Trying to integrate NASM with CMake for the build system of Rival Fortress has been tricky. The documentation on the official wiki is not up to date, and in fact, states that NASM is not supported by CMake 2.6 and below, but fortunately after a little bit of digging through CMake’s source I found that NASM is indeed supported since CMake version 2.8.
Using NASM with CMake
To enable support for
.asm source files in your project you have to make sure you add the
C language flag to your project declaration in your
CMakeLists.txt file like so:
Rival Fortress is in C++, but the
C specification is required otherwise the CMake variable
CMAKE_C_SIZEOF_DATA_PTR will not be set. This variable is read by the NASM CMake module during initialization and used by CMake to detect processor architecture (32/64bit) and determines the
-f flag that will be passed to NASM during compilation.
Next, in order to enable
*.asm compilation, you must enable the
ASM_NASM language like so:
This snippet of code attempts to load the
ASM_NASM language compiler and checks if it has been loaded correctly. If load was successful, the
CAN_USE_ASSEMBLER variable is set to
TRUE and all
*.asm files are globbed and added to the source files to be compiles.
Later in the
CMakeLists.txt you can check if assembly is supported for the current build using the
CAN_USE_ASSEMBLER variable and branch like so:
Now CMake will automatically call NASM during compilation to generate object files that will be linked with other object files generated by clang.