OLD | NEW |
| (Empty) |
1 Name: yasm | |
2 URL: http://www.tortall.net/projects/yasm/ | |
3 Version: 1.2.0 | |
4 License: 2-clause or 3-clause BSD licensed, with the exception of bitvect, which
is triple-licensed under the Artistic license, GPL, and LGPL | |
5 License File: source/patched-yasm/COPYING | |
6 License Android Compatible: yes | |
7 Security Critical: no | |
8 | |
9 With these patches merged: | |
10 * https://github.com/yasm/yasm/commit/a2cbb10ee1b90b73647667ac849c74d65761d412 | |
11 * https://github.com/yasm/yasm/commit/01ab853e68ef8aeded716d6f5b34895200f66a51 | |
12 * https://github.com/yasm/yasm/commit/82fafa7b5619e702c8681c959ade0746498e3cbc | |
13 * https://github.com/yasm/yasm/commit/2bd66514b6b100887c19d8598da38347b3cff40e | |
14 * https://github.com/yasm/yasm/commit/ab19547382660d81e0b4a0232dccb38f44c52a36 | |
15 * https://github.com/yasm/yasm/commit/9728322335cba96500861ef766b1546d096e5600 | |
16 * CHROMIUM.diff | |
17 | |
18 | |
19 See also the yasm.gyp file for a description of the yasm build process. | |
20 | |
21 Instructions for recreating the yasm.gyp file. | |
22 1) Get a clean version of the yasm source tree. The clean tree can be found | |
23 at: | |
24 | |
25 src/third_party/yasm/source/yasm | |
26 | |
27 2) Run configure on the pristine source from a different directory (eg., | |
28 /tmp/yasm_build). Running configure from another directory will keep | |
29 the source tree clean. | |
30 | |
31 3) Next, capture all the output from a build of yasm. We will use the build | |
32 log as a reference for making the yasm.gyp file. | |
33 | |
34 make yasm > yasm_build_log 2> yasm_build_err | |
35 | |
36 4) Check yasm_build_err to see if there are any anomalies beyond yasm's | |
37 compiler warnings. | |
38 | |
39 5) Grab the generated Makefile, libyasm-stdint.h, config.h, and put into | |
40 the correct platform location. For android platform, copy the files | |
41 generated for linux, but make sure that ENABLE_NLS is not defined to | |
42 allow mac host compiles to work. For ios, copy the files from mac. | |
43 | |
44 src/third_party/yasm/source/config/[platform] | |
45 | |
46 While we do not directly use the "Makefile" to build, it is needed by | |
47 the "genmodule" subprogram as input for creating the available modules | |
48 list. | |
49 | |
50 6) Make sure all the subprograms are represented in yasm.gyp. | |
51 | |
52 grep '^gcc' yasm_build_log | | |
53 grep -v ' -DHAVE_CONFIG_H ' | |
54 | |
55 The yasm build creates a bunch of subprograms that in-turn generate | |
56 more .c files in the build. Luckily the commands to generate the | |
57 subprogram do not have -DHAVE_CONFIG_H as a cflag. | |
58 | |
59 From this list, make sure all the subprograms that are build have | |
60 appropriate targets in the yasm.gyp. | |
61 | |
62 You will notice, when you get to the next step, that there are some | |
63 .c source files that are compiled both for yasm, and for genperf. | |
64 | |
65 Those should go into the genperf_libs target so that they can be | |
66 shared by the genperf and yasm targets. Find those files by appending | |
67 | |
68 | grep 'gp-' | |
69 | |
70 to the command above. | |
71 | |
72 7) Find all the source files used to build yasm proper. | |
73 | |
74 grep -E '^gcc' yasm_build_log | | |
75 grep ' -DHAVE_CONFIG_H ' | | |
76 awk '{print $NF }' | | |
77 sed -e "s/'\.\/'\`//" | # Removes some garbage from the build line. | |
78 sort -u | | |
79 sed -e "s/\(.*\)/'\1',/" # Add quotes to each line. | |
80 | |
81 Reversing the -DHAVE_CONFIG_H filter from the command above should | |
82 list the compile lines for yasm proper. | |
83 | |
84 This should get you close, but you will need to manually examine this | |
85 list. However, some of the built products are still included in the | |
86 command above. Generally, if the source file is in the root directory, | |
87 it's a generated file. | |
88 | |
89 Inspect the current yasm.gyp for a list of the subprograms and their | |
90 outputs. | |
91 | |
92 Update the sources list in the yasm target accordingly. Read step #9 | |
93 as well if you update the source list to avoid problems. | |
94 | |
95 8) Update the actions for each of the subprograms. | |
96 | |
97 Here is the real fun. For each subprogram created, you will need to | |
98 update the actions and rules in yasm.gyp that invoke the subprogram to | |
99 generate the files needed by the rest of the build. | |
100 | |
101 I don't have any good succinct instructions for this. Grep the build | |
102 log for each subprogram invocation (eg., "./genversion"), look at | |
103 its command inputs and output, then verify our yasm.gyp does something | |
104 similar. | |
105 | |
106 The good news is things likely only link or compile if this is done | |
107 right so you'll know if there is a problem. | |
108 | |
109 Again, refer to the existing yasm.gyp for a guide to how the generated | |
110 files are used. | |
111 | |
112 Here are a few gotchas: | |
113 1) genmodule, by default, writes module.c into the current | |
114 directory. This does not play nicely with gyp. We patch the | |
115 source during build to allow specifying a specific output file. | |
116 | |
117 2) Most of the generated files, even though they are .c files, are | |
118 #included by other files in the build. Make sure they end up | |
119 in a directory that is in the include path for the build. | |
120 One of <(shared_generated_dir) or <(generated_dir) should work. | |
121 | |
122 3) Some of the genperf output is #included while others need to be | |
123 compiled directly. That is why there are 2 different rules for | |
124 .gperf files in two targets. | |
125 | |
126 9) Check for python scripts that are run. | |
127 | |
128 grep python yasm_build_log | |
129 | |
130 Yasm uses python scripts to generate the assembly code description | |
131 files in C++. Make sure to get these put into the gyp file properly as | |
132 well. An example is gen_x86_insn.py for x86 assembly. | |
133 | |
134 Note that at least the gen_x86_insn.py script suffers from the same | |
135 problem as genmacro in that it outputs to the current directory by | |
136 default. The yasm.gyp build patches this file before invoking it to | |
137 allow specifying an output directory. | |
138 | |
139 10) Recreate the 'AdditionalOptions!': [ '/analyze' ] block so that VC++ | |
140 /analyze builds won't fail. | |
141 | |
142 11) If all that's is finished, attempt to build....and cross your fingers. | |
OLD | NEW |