View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0010069CMakeModulespublic2009-12-18 19:072011-01-12 07:16
ReporterPeter Collingbourne 
Assigned ToAlex Neundorf 
PlatformOSOS Version
Product VersionCMake-2-8 
Target VersionCMake 2.8.4Fixed in VersionCMake 2.8.4 
Summary0010069: Added support for the nasm assembler
DescriptionThis patch adds support for the nasm assembler on Windows, Apple
and other Unix-like platforms.
TagsNo tags attached.
Attached Filespatch file icon 0003-Added-support-for-the-nasm-assembler.patch [^] (3,018 bytes) 2009-12-18 19:07 [Show Content]
patch file icon nasm-2010-10-21.patch [^] (6,982 bytes) 2010-10-21 15:00 [Show Content]
patch file icon 2010-11-10.patch [^] (4,456 bytes) 2010-11-10 04:51 [Show Content]


Alex Neundorf (developer)
2010-08-15 11:50

Thanks for your patch.
A few questions still.
On Linux, nasm -v prints "NASM version 0.98.39 compiled on Feb 6 2006".
Does this work also on Windows and Mac ?

Does "nasm -h" work on all platforms ?
Here on Linux the output contains "usage: nasm [-@ response file]".
Does this look the same on all platforms ?
Or does it contain on Windows "nasm.exe" ?

Peter Collingbourne (developer)
2010-08-15 12:51

Hi Alex,

I tested the commands you mentioned on Windows and they all work the same as on Linux. "nasm -v" is the same, "nasm -h" always prints "nasm" (this appears to be hard coded in the nasm source code). I don't have access to a Mac any more so I can't test there, but I can't see any reason why those commands wouldn't work there.

I assume you are planning to expand the patch to add support for version detection and response files? Perhaps that should be a separate patch.

Alex Neundorf (developer)
2010-09-25 15:05

I just merged this into the git next branch of cmake.
Please give it a try and let me know if there are issues.

kwtc (reporter)
2010-10-19 09:11

Once this patch is integrated, does it allow to specify that the compiler to use should be YASM instead of NASM ? Otherwise perhaps we should also add the same patch for the YASM assembler at the same time.

YASM is a rewrite of NASM.
kwtc (reporter)
2010-10-21 05:46

I installed the patch and modified my CMakeLists.txt as follow :


The compiler used for .nasm files is then yasm.

I still have two issues :
* How do I link .asm file to this compiler
* How do I disable C flags for this compiler

In my CMakeLists.txt I have
  add_definitions(-Wall -Wextra ...)
and these flags get forwarded to the nasm/yasm compiler.
Alex Neundorf (developer)
2010-10-21 15:02

Please give the attached nasm.patch a try.
It now also searches for yasm, and the C flags shouldn't make it anymore to its command line.
Also asm files should now be used automatically.

You can also get it directly from git, it's the AddASM_NASMSupport branch here: [^]

kwtc (reporter)
2010-10-22 10:14
edited on: 2010-10-22 10:15

Thanks for the quick reply !

Indeed, *.asm files are now handled by NASM.

Moreover, if NASM is not installed, YASM is automatically used. Command
set(CMAKE_ASM_NASM_COMPILER yasm) still works to force YASM if both compilers are installed. As a side note, find_path(CMAKE_ASM_NASM_COMPILER yasm) does fill the variable with '/usr/bin/yasm' but for some reason, it sets it "differently" than the set command since it does not get propagated.

The C flags does no longer make it to the command line but the <CMAKE_ASM_NASM_CFLAGS> in CMakeASM_NASMInformation.cmake does not get replaced; using verbose makefile I get the following command line :

/usr/bin/yasm CMAKE_ASM_NASM_CFLAGS -f elf -o AsmFilePath.asm.o AsmFilePath.asm

I have tried various things to get this variable replaced but failed.

Alex Neundorf (developer)
2010-10-22 13:53

> As a side note, find_path(CMAKE_ASM_NASM_COMPILER yasm) does fill the
> variable with '/usr/bin/yasm' but for some reason, it sets it "differently"
> than the set command since it does not get propagated.

Sorry, I don't understand. What do you mean ?
find_program() finds the file with the full path, that's how it is supposed to be.

> /usr/bin/yasm CMAKE_ASM_NASM_CFLAGS -f elf -o AsmFilePath.asm.o
> AsmFilePath.asm

I'll have a closer look next week.
Until then you can just remove it from the CMakeASM_NASMInformation.cmake file.

kwtc (reporter)
2010-11-03 02:21

About my sidenote on CMAKE_ASM_NASM_COMPILER :

With the following code :
find_program(CMAKE_ASM_NASM_COMPILER, yasm)
message("Compiler is ${CMAKE_ASM_NASM_COMPILER)")

I do see the message 'Compiler is /usr/bin/yasm', a cache variable is created but the compiler used is /usr/bin/nasm.

With the following code :
find_program(CMAKE_ASM_NASM_COMPILER_PATH, yasm)
message("Compiler is ${CMAKE_ASM_NASM_COMPILER_PATH)")

I see the same message, a cache variable named CMAKE_ASM_NASM_COMPILER_PATH is created with value '/usr/bin/yasm', a cache variable named CMAKE_ASM_NASM_COMPILER is created with value '/usr/bin/nasm' and in the end, it is the yasm compiler which is used.

This is most certainly not a bug but an unexpected interaction between cache and non cache variables and the automatic detection of compilers. It is not a problem for me, I had just mentionned it as a sidenote. Now that I've explained what I have seen, you can ignore it !
Alex Neundorf (developer)
2010-11-09 15:59

Ok, so it is working for you now ?
Then I'll merge this into the main cmake branch.

kwtc (reporter)
2010-11-10 04:50

I am uploading a new patch with the following modifications :

1. I reverted <CMAKE_ASM_NASM_CFLAGS> back to <FLAGS>.
2. Added an 'if (NOT CMAKE_ASM_NASM_FORMAT_OBJECT)' to let the user select a different output format if the default value selected is not suitable.


Note for users of this patch :
All compilation flags get forwarded to the NASM/YASM compiler but it looks like it is the behavior for the other languages supported by cmake. It seems to be up to the user to take care of setting C compilation flags only for C files when mixing more than one language.

For example :
foreach (SOURCE ${SOURCES})
    if (NOT ${SOURCE} MATCHES "asm$")
        set_source_files_properties(${SOURCE} PROPERTIES COMPILE_FLAGS " -g -Wall -Wextra")
kwtc (reporter)
2010-11-10 05:05
edited on: 2010-11-10 05:06

Please forgive me, my patch is not as complete as yours, it includes only the three new files for NASM support.

I also forgot to mention that with this new patch, it does work perfectly.

Alex Neundorf (developer)
2010-11-17 17:08

I merged this into the next branch now.
Please give it a try.
If something doesn't work, feel free to open a new bug or to reopen this one.


 Issue History
Date Modified Username Field Change
2009-12-18 19:07 Peter Collingbourne New Issue
2009-12-18 19:07 Peter Collingbourne File Added: 0003-Added-support-for-the-nasm-assembler.patch
2010-08-15 11:36 Alex Neundorf Status new => assigned
2010-08-15 11:36 Alex Neundorf Assigned To => Alex Neundorf
2010-08-15 11:50 Alex Neundorf Note Added: 0021760
2010-08-15 12:51 Peter Collingbourne Note Added: 0021761
2010-09-25 15:05 Alex Neundorf Note Added: 0022347
2010-09-25 15:05 Alex Neundorf Status assigned => feedback
2010-10-19 09:11 kwtc Note Added: 0022533
2010-10-21 05:46 kwtc Note Added: 0022552
2010-10-21 15:00 Alex Neundorf File Added: nasm-2010-10-21.patch
2010-10-21 15:02 Alex Neundorf Note Added: 0022652
2010-10-22 10:14 kwtc Note Added: 0022660
2010-10-22 10:15 kwtc Note Edited: 0022660
2010-10-22 13:53 Alex Neundorf Note Added: 0022663
2010-11-03 02:21 kwtc Note Added: 0022812
2010-11-09 15:59 Alex Neundorf Note Added: 0023110
2010-11-10 04:50 kwtc Note Added: 0023123
2010-11-10 04:51 kwtc File Added: 2010-11-10.patch
2010-11-10 05:05 kwtc Note Added: 0023125
2010-11-10 05:06 kwtc Note Edited: 0023125
2010-11-10 13:03 David Cole Target Version => CMake 2.8.4
2010-11-17 17:08 Alex Neundorf Note Added: 0023359
2010-11-17 17:08 Alex Neundorf Status feedback => closed
2010-11-17 17:08 Alex Neundorf Resolution open => fixed
2011-01-12 07:16 David Cole Fixed in Version => CMake 2.8.4

Copyright © 2000 - 2018 MantisBT Team