[CMake] Assembly language support using gcc or gas
Glenn Coombs
glenn.coombs at gmail.com
Tue Aug 2 12:03:37 EDT 2011
Previously with cmake 2.8.4 we were using these lines to compile an assembly
language file in our project:
if(UNIX)
enable_language(ASM)
# see if we are building 32-bit or 64-bit executables
file(WRITE ${CMAKE_BINARY_DIR}/check_32or64bit.cpp "int main(int argc,
char *argv[]) { return 8 * sizeof(char *); }\n")
try_run(
run_result
compile_result
${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}/check_32or64bit.cpp
)
if (${run_result} EQUAL 32)
list(APPEND sources "src/sysc/qt/md/i386.s")
if(APPLE)
set(ASM_SYS_FLAGS "-arch i386")
else()
set(ASM_SYS_FLAGS "-32")
endif()
else()
list(APPEND sources "src/sysc/qt/md/iX86_64.s")
if(APPLE)
set(ASM_SYS_FLAGS "-arch x86_64")
else()
set(ASM_SYS_FLAGS "-64")
endif()
endif()
set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT
"<CMAKE_ASM${ASM_DIALECT}_COMPILER> ${ASM_SYS_FLAGS} -o <OBJECT> <SOURCE>")
endif()
And this resulted in the appropriate 32-bit or 64-bit assembler file being
compiled like so:
/usr/bin/as -32 -o <path snipped>/i386.s.o <path-snipped>/i386.s
/usr/bin/as -64 -o <path snipped>/iX86_64.s.o <path-snipped>/iX86_64.s
Now with cmake 2.8.5 it fails when compiling that assembler file as it uses
/usr/bin/gcc rather than /usr/bin/as and gcc wants -m32 and -c instead of
-32. When I tried commenting out the line that overrides the default
setting of CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT it fails differently:
/usr/bin/gcc -DEXTERNAL_BUS_WIDTH=128 -DLINUX -DHIDEBUG -O3 -DNDEBUG
-I/user/grc/msvdx-cvsfiles/sim/msvdx-cmake-2.8.5/systemC/src
-I/user/grc/msvdx-cvsfiles/sim/msvdx-cmake-2.8.5/systemC/src/sysc/kernel
-DNOMINMAX -DUSE_SIM_NAMESPACE -o
CMakeFiles/systemc.dir/src/sysc/qt/md/i386.s.o -c
/user/grc/msvdx-cvsfiles/sim/msvdx-cmake-2.8.5/systemC/src/sysc/qt/md/i386.s
i386.s:69: Error: suffix or operands invalid for `push'
This line works if I add the -m32 option using set(CMAKE_ASM_FLAGS "-m32")
but should all the preprocessor defines (-DXXX) and include directory
arguments (-IXXX) be present ? I was thinking they were only for C/C++
files, no ?
And what is the recommended way to compile an assembly language file that
will work on both 2.8.4 and 2.8.5 ?
--
Glenn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110802/2fb83df9/attachment.htm>
More information about the CMake
mailing list