Index: third_party/yasm/README.chromium |
diff --git a/third_party/yasm/README.chromium b/third_party/yasm/README.chromium |
new file mode 100644 |
index 0000000000000000000000000000000000000000..476bfdf1d4b830df5fe573ad38395ffe050d9555 |
--- /dev/null |
+++ b/third_party/yasm/README.chromium |
@@ -0,0 +1,118 @@ |
+See also the yasm.gyp file for a description of the yasm build process. |
+ |
+Instructions for recreating the yasm.gyp file. |
+ 1) Get a clean version of the yasm source tree and copy it somewhere. The |
+ clean tree can be found at: |
+ |
+ src/third_party/yasm/source/yasm |
+ |
+ 2) Run ./autogen.sh in your copy of the pristine source. Unlike ./configure, |
+ autogen.sh will dirty the tree regardless of where it is called from. |
+ |
+ 3) Next, capture all the output from a build of yasm. We will use the build |
+ log as a reference for making the yasm.gyp file. |
+ |
+ make yasm > yasm_build_log 2> yasm_build_err |
+ |
+ 4) Check yasm_build_err to see if there are any anomalies beyond yasm's |
+ compiler warnings. |
+ |
+ 5) Grab the generated Makefile, libyasm-stdint.h, config.h, and put into |
+ the correct platform location. |
+ |
+ src/third_party/yasm/source/config/[platform] |
+ |
+ While we do not directly use the "Makefile" to build, it is needed by |
+ the "genmodule" subprogram as input for creating the available modules |
+ list. |
+ |
+ 6) Make sure all the subprograms are represented in yasm.gyp. |
+ |
+ grep '^gcc' yasm_build_log | |
+ grep -v ' -DHAVE_CONFIG_H ' |
+ |
+ The yasm build creates a bunch of subprograms that in-turn generate |
+ more .c files in the build. Luckily the commands to generate the |
+ subprogram do not have -DHAVE_CONFIG_H as a cflag. |
+ |
+ From this list, make sure all the subprograms that are build have |
+ appropriate targets in the yasm.gyp. |
+ |
+ You will notice, when you get to the next step, that there are some |
+ .c source files that are compiled both for yasm, and for genperf. |
+ |
+ Those should go into the genperf_libs target so that they can be |
+ shared by the genperf and yasm targets. Find those files by appending |
+ |
+ | grep 'gp-' |
+ |
+ to the command above. |
+ |
+ 7) Find all the source files used to build yasm proper. |
+ |
+ grep -E '^gcc' yasm_build_log | |
+ grep ' -DHAVE_CONFIG_H ' | |
+ awk '{print $NF }' | |
+ sed -e "s/'\.\/'\`//" | # Removes some garbage from the build line. |
+ sort -u | |
+ sed -e "s/\(.*\)/'\1',/" # Add quotes to each line. |
+ |
+ Reversing the -DHAVE_CONFIG_H filter from the command above should |
+ list the compile lines for yasm proper. |
+ |
+ This should get you close, but you will need to manually examine this |
+ list. However, some of the built products are still included in the |
+ command above. Generally, if the source file is in the root directory, |
+ it's a generated file. |
+ |
+ Inspect the current yasm.gyp for a list of the subprograms and their |
+ outputs. |
+ |
+ Update the sources list in the yasm target accordingly. Read step #9 |
+ as well if you update the source list to avoid problems. |
+ |
+ 8) Update the actions for each of the subprograms. |
+ |
+ Here is the real fun. For each subprogram created, you will need to |
+ update the actions and rules in yasm.gyp that invoke the subprogram to |
+ generate the files needed by the rest of the build. |
+ |
+ I don't have any good succinct instructions for this. Grep the build |
+ log for each subprogram invocation (eg., "./genversion"), look at |
+ its command inputs and output, then verify our yasm.gyp does something |
+ similar. |
+ |
+ The good news is things likely only link or compile if this is done |
+ right so you'll know if there is a problem. |
+ |
+ Again, refer to the existing yasm.gyp for a guide to how the generated |
+ files are used. |
+ |
+ Here are a few gotchas: |
+ 1) genmodule, by default, writes module.c into the current |
+ directory. This does not play nicely with gyp. We patch the |
+ source during build to allow specifying a specific output file. |
+ |
+ 2) Most of the generated files, even though they are .c files, are |
+ #included by other files in the build. Make sure they end up |
+ in a directory that is in the include path for the build. |
+ One of <(shared_generated_dir) or <(generated_dir) should work. |
+ |
+ 3) Some of the genperf output is #included while others need to be |
+ compiled directly. That is why there are 2 different rules for |
+ .gperf files in two targets. |
+ |
+ 9) Check for python scripts that are run. |
+ |
+ grep python yasm_build_log |
+ |
+ Yasm uses python scripts to generate the assembly code description |
+ files in C++. Make sure to get these put into the gyp file properly as |
+ well. An example is gen_x86_insn.py for x86 assembly. |
+ |
+ Note that at least the gen_x86_insn.py script suffers from the same |
+ problem as genmacro in that it outputs to the current directory by |
+ default. The yasm.gyp build patches this file before invoking it to |
+ allow specifying an output directory. |
+ |
+ 10) If all that's is finished, attempt to build....and cross your fingers. |