[CMake] Assembler files

Brad King brad.king at kitware.com
Wed May 31 18:04:27 EDT 2006


James Mansion wrote:
> I'd like to create a library from a mix of
> assembler and C files.
> 
> I'm reading the book to try to determine how
> to achieve this.  There seems to be perhaps two
> possible approaches.
> 
> (Initially this is for Win32, and I have files for NASM
> and MASM with extensions .nasm and .masm)
> 
> 1) define new languages for NASM and MASM.
> 
> The example in the book (Fortran) suggests that I then need to
> enable the language in the PROJECT declaration, though the
> section on PROJECT suggests that all languages are enabled
> by default. (?)  Presumably I'm safe if I use ENABLE_LANGUAGE?
> 
> Then I would just use ADD_LIBRARY (foo a.c b.nasm c.masm).
> 
> Is that right?

This is mostly right, but currently there is no NASM or MASM language. 
You have to look at all the *Fortran*.cmake files in the Modules 
directory.  Create similar ones for NASM and MASM in some directory in 
your project, say myproj/CMake.  Then in myproj/CMakeLists.txt do

SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
PROJECT(MYPROJ C NASM MASM)

Note the above is from memory so it may need some tweaking.

> 2) Define a whole set of custom commands that create an object
> file:
> 
> SET( MASM_SOURCES b1.masm b2.masm )
> FOREACH( SRC ${MASM_SOURCES} )
>   ADD_CUSTOM_COMMAND(TARGET <obj for ${SRC}>
>                      PRE_LINK
>                      COMMAND masm ${SRC}
>                     )
> ENDFOREACH( SRC )
> 
> ADD_LIBRARY( foo a.c b1.obj b2.obj )
> 
> Is that right?

Try something like

SET(MASM_NAMES b1 b2)
FOREACH(src ${MASM_NAMES})
   SET(MASM_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${src}.masm)
   SET(MASM_OBJ ${CMAKE_CURRENT_BINARY_DIR}/${src}.obj)
   ADD_CUSTOM_COMMAND(
      OUTPUT ${MASM_OBJ}
      DEPENDS ${MASM_SRC}
      COMMAND masm ${MASM_SRC} -o${MASM_OBJ}
      )
   SET(MASM_OBJECTS ${MASM_OBJECTS} ${MASM_OBJ})
ENDFOREACH(src)
ADD_LIBRARY(foo a.c ${MASM_OBJECTS})

-Brad


More information about the CMake mailing list