最近CMakeをアップグレードして2.6(まだベータ)にした。モジュールをざっと眺めていてCMakeASMInformation.cmakeなるファイルを見つけた。CMakeはいいツールなんだけど、.Sファイルを認識してくれないのが弱点だった。2.4を使っているときは自分でコマンドを作ってそれでアセンブリファイルをコンパイルしていた。これで、CMakeファイルを簡潔にすることが出来る。
メーリングリストを見るとアセンブリファイルのサポートはまだ実験段階らしい。まあ、そんなことは気にせずに使う。
CMakeLists.txt: cmake_mininum_required(VERSION 2.6) enable_language(ASM)
これでアセンブリファイルを認識するようになる。
標準の状態ではCMakeはアセンブリファイルに対してATTのアセンブラ、つまりGASを起動する。今やっているプロジェクトはアセンブリファイルをCコンパイラに処理させたいのでカスタマイズが必要になる。アセンブリファイルに異なるアセンブラを割り当てたい。
CMakeLists.txt:
cmake_mininum_require(VERSION 2.6)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/MyCMake}
enable_language(ASM-GCC)
set(CMAKE_ASM-GCC_COMPILER_ARG1 -c) # invoke gcc with "-c"
MyCMake/CMakeASM-GCCInformation.cmake:
set(ASM_DIALECT "-GCC")
set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS s;S)
include(CMakeASMInformation)
set(ASM_DIALECT)
MyCMake/CMakeDetermineASM-GCCCompiler.cmake:
set(ASM_DIALECT "-GCC")
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT ${_CMAKE_TOOLCHAIN_PREFIX}gcc ${_CMAKE_TOOLCHAIN_PREFIX}cc)
include(CMakeDetermineASMCompiler)
set(ASM_DIALECT)
MyCMake/CMakeTestASM-GCCCompiler.cmake:
set(ASM_DIALECT "-GCC")
include(CMakeTestASMCompiler)
set(ASM_DIALECT)
これでアセンブリファイルをgccでコンパイルできるようになった。