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.
* deterministic-2.diff: remove timestamps from generated files.
* 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.
