[FFmpeg-trac] #6527(build system:new): NASM 2.11.06 doesn't load config.asm

FFmpeg trac at avcodec.org
Sat Jul 15 02:37:31 EEST 2017


#6527: NASM 2.11.06 doesn't load config.asm
-------------------------------------+-------------------------------------
             Reporter:  forbyta      |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:  build        |                  Version:  git-
  system                             |  master
             Keywords:  nasm         |               Blocked By:
  configuration                      |  Reproduced by developer:  0
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 NASM version 2.11.06 doesn't seem to work correctly and configure should
 check to see if NASM is newer then 2.11.06 before allowing it to be used.

 Background:
 On July 12, 2017, I tried to build from git master on a system that had no
 problems building from master a few months earlier (March 29, 2017).

 The problems stem from changes to "configure" (on June 21, 2017) that
 prefers nasm over yasm
 [http://git.ffmpeg.org/gitweb/ffmpeg.git/commit/4f9297ac3b39098547863d28fbc8d2a906d5be49].
 My system has both, but nasm is old... and apparently too old.

 After downloading the latest git master (at the time, July 12, 2017),
 "make" displayed the following errors:

 {{{
 $ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg-20170712
 ...
 $ cd ffmpeg-20170712
 $ configure
 ...
 $ make
 ...
 X86ASM  libavfilter/x86/af_afir.o
 libavutil/x86/x86inc.asm:45: error: symbol `HAVE_ALIGNED_STACK' not
 defined before use
 libavutil/x86/x86inc.asm:58: error: symbol `ARCH_X86_64' not defined
 before use
 libavutil/x86/x86inc.asm:193: error: (DECLARE_REG_SIZE:11) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:194: error: (DECLARE_REG_SIZE:11) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:195: error: (DECLARE_REG_SIZE:11) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:196: error: (DECLARE_REG_SIZE:11) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:197: error: (DECLARE_REG_SIZE:11) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:198: error: (DECLARE_REG_SIZE:11) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:199: error: (DECLARE_REG_SIZE:11) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:225: error: symbol `ARCH_X86_64' not defined
 before use
 libavutil/x86/x86inc.asm:938: error: (INIT_XMM:5) symbol `ARCH_X86_64' not
 defined before use
 libavutil/x86/x86inc.asm:938: error: (INIT_CPUFLAGS:32) symbol
 `ARCH_X86_64' not defined before use
 libavutil/x86/x86inc.asm:938: error: (CPUNOP:1) symbol `HAVE_CPUNOP' not
 defined before use
 libavutil/x86/x86inc.asm:938: error: unknown 'cpu' type
 libavfilter/x86/af_afir.asm:30: error: (INIT_XMM:5) symbol `ARCH_X86_64'
 not defined before use
 libavfilter/x86/af_afir.asm:30: error: (INIT_CPUFLAGS:32) symbol
 `ARCH_X86_64' not defined before use
 libavfilter/x86/af_afir.asm:30: error: (CPUNOP:1) symbol `HAVE_CPUNOP' not
 defined before use
 libavfilter/x86/af_afir.asm:30: error: unknown 'cpu' type
 libavfilter/x86/af_afir.asm:31: error: (INIT_XMM:5) symbol `ARCH_X86_64'
 not defined before use
 libavfilter/x86/af_afir.asm:31: error: (INIT_CPUFLAGS:32) symbol
 `ARCH_X86_64' not defined before use
 libavfilter/x86/af_afir.asm:31: error: (CPUNOP:1) symbol `HAVE_CPUNOP' not
 defined before use
 libavfilter/x86/af_afir.asm:31: error: unknown 'cpu' type
 make: *** [libavfilter/x86/af_afir.o] Error 1
 }}}

 I eventually, figured out what command was actually used by running "make
 -n" and grepping for 'X86ASM.*af_afir':

 {{{
 printf "X86ASM\t%s\n" libavfilter/x86/af_afir.o; nasm -f elf32 -g -F dwarf
 -I./ -I.// -Ilibavfilter/x86/ -Pconfig.asm -MD libavfilter/x86/af_afir.d
 -o libavfilter/x86/af_afir.o libavfilter/x86/af_afir.asm
 }}}

 When the "nasm ..." line above is run by itself, it generates the same
 errors.  It appears the -Pconfig.asm option is ignored with NASM version
 2.11.06.  The symbols it's looking for ARE defined in config.asm:

 {{{
 $ egrep 'HAVE_ALIGNED_STACK|ARCH_X86_64' config.asm
 %define ARCH_X86_64 0
 %define HAVE_ALIGNED_STACK 1
 }}}

 I also tried "nasm -DARCH_X86_64=0 ..." but that fails as well.  The only
 thing that did work was to add the above "%define" directly to
 libavutil/x86/x86inc.asm.

 If NASM version 2.11.08 is used, then the original nasm command works fine
 (without modifying x86inc.asm)

 I think a change to configure to check the version of nasm before allowing
 it to be used would avoid this problem.  Maybe, something like the
 following:

 {{{
 --- a/configure 2017-07-14 13:18:02.493845243 -0700
 +++ b/configure 2017-07-14 13:26:02.205575931 -0700
 @@ -5502,9 +5502,19 @@
      enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0,
 %xmm0"'
      enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0,
 %mm1"'

 +    check_nasm(){
 +      log "$1 -v"
 +      nasmverstr=$($1 -v 2>&1 | tee -a $logfile)
 +      nasmver=$(expr "$nasmverstr" : 'NASM version \([0-9.][0-9.]*\).*')
 +      [ -z "$nasmver" ] && return 1
 +      n_nasmver=$(echo "$nasmver" | sed 's/[^0-9]//g')
 +      [ "$n_nasmver" -lt '21108' ] && die "NASM version [$nasmver] is too
 old.  Upgrade NASM or try configure --x86asmexe=yasm"
 +      return 0
 +    }
 +
      probe_x86asm(){
          x86asmexe_probe=$1
 -        if check_cmd $x86asmexe_probe -v; then
 +        if check_nasm $x86asmexe_probe; then
              x86asmexe=$x86asmexe_probe
              x86asm_type=nasm
              x86asm_debug="-g -F dwarf"
 }}}

 On a slightly related note, while investigating this issue, I had to go
 through several changes before finding the one that caused the problems.
 The log message in this change
 ([http://git.ffmpeg.org/gitweb/ffmpeg.git/commit/3cc73d3d6d2a98cd0da3deda90760729c82cdeeb])
 is incorrect.  I says "nasm --version" has worked since 2.11, but nasm
 didn't support the "--version" option until 2.13.   The change itself is
 fine, it's just the log message that's misleading.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/6527>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list