Name: yasm
URL: http://www.tortall.net/projects/yasm/
Version: 1.3.0
License: 2-clause or 3-clause BSD licensed, with the exception of bitvect, which is triple-licensed under the Artistic license, GPL, and LGPL
License File: source/patched-yasm/COPYING
License Android Compatible: yes
Security Critical: no

Source: http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
SHA-512: 572d3b45568b10f58e48f1188c2d6bcbdd16429c8afaccc8c6d37859b45635e1
         06885d679e41d0bee78c23822108c7ae75aa7475eed5ba58057e0a6fe1b68645

With these patches applied:
* deterministic.diff: make yasm deterministic.
* genmodule.diff: add an optional output argument to genmodule.
* genperf.diff: make genperf silent on non-fatal errors.


See also the BUILD.gn file for a description of the yasm build process.

Instructions for recreating the BUILD.gn file.
  1) Update yasm and re-apply the patches.

  2) Make a copy of source in a different directory (e.g., /tmp/yasm_build) and
     run configure. Using another directory will keep the source tree clean. An
     out-of-tree build does not appear to work reliably as of yasm 1.3.0.

  3) Next, capture all the output from a build of yasm.  We will use the build
     log as a reference for BUILD.gn.

       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 libyasm-stdint.h and config.h and put into the correct
     platform location.

       src/third_party/yasm/source/config/[platform]

     For android platform, copy the files generated for linux, but make sure
     that ENABLE_NLS is not defined to allow mac host compiles to work.  For
     ios, copy the files from mac.  For win, copy the libyasm-stdint.h from
     linux and fix up config.h.

     Find the YASM_MODULES line in the generated Makefile and update
     src/third_party/yasm/source/config/Makefile. It is needed by the
     "genmodule" subprogram as input for creating the available modules list.

  6) Make sure all the subprograms are represented in BUILD.gn.

       grep -w 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 BUILD.gn.

     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 yasm_utils target so that they can be shared by
     the genperf and yasm targets. Find the files used by genperf by appending

       | grep 'gp-'

     to the command above. Then grep for them without the 'gp-' prefix to see if
     they are used in yasm as well.

  7) Find all the source files used to build yasm proper.

       grep -w gcc yasm_build_log  |
       grep ' -DHAVE_CONFIG_H ' |
       sed -e 's/[&\\]*$//' |  # Remove any trailing '&&'s and '\'s.
       awk '{print $NF }' |
       sed -e "s/'\.\/'\`//" |  # Removes some garbage from the build line.
       sort -u |
       sed -e 's/\(.*\)/      "source\/patched-yasm\/\1",/'

     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.  Also remove the sources in the yasm_utils target.

     Inspect the current BUILD.gn 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 BUILD.gn 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 BUILD.gn 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 BUILD.gn 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 gn.  We have a patch
          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 yasm_gen_include_dir.

       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) If all that's is finished, attempt to build....and cross your fingers.
