1cmake_minimum_required (VERSION 3.8) 2project(Assembler C) 3message("CTEST_FULL_OUTPUT ") 4set(CMAKE_VERBOSE_MAKEFILE 1) 5 6set(SRCS) 7 8# (at least) the following toolchains can process assembler files directly 9# and also generate assembler files from C: 10if("${CMAKE_GENERATOR}" MATCHES "Makefile|Xcode|Ninja" AND 11 NOT CMAKE_OSX_ARCHITECTURES MATCHES ";") 12 if((CMAKE_C_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang|HP|SunPro|XL)$") OR (CMAKE_C_COMPILER_ID MATCHES "Intel" AND UNIX) 13 AND NOT (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")) 14 set(C_FLAGS "${CMAKE_C_FLAGS}") 15 separate_arguments(C_FLAGS) 16 if(CMAKE_OSX_SYSROOT AND CMAKE_C_SYSROOT_FLAG AND NOT ";${C_FLAGS};" MATCHES ";${CMAKE_C_SYSROOT_FLAG};") 17 list(APPEND C_FLAGS ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}) 18 endif() 19 if(CMAKE_OSX_ARCHITECTURES) 20 list(APPEND C_FLAGS -arch ${CMAKE_OSX_ARCHITECTURES}) 21 elseif("${CMAKE_SYSTEM_NAME};${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "Darwin;arm64") 22 list(APPEND C_FLAGS -arch arm64) 23 endif() 24 # Clang on OS X, and perhaps other compilers, do not support -g 25 # for both generating and assembling, so drop it from generating. 26 list(REMOVE_ITEM C_FLAGS -g) 27 set(SRCS main.s) 28 add_custom_command( 29 OUTPUT main.s 30 COMMAND ${CMAKE_C_COMPILER} ${C_FLAGS} 31 "$<$<CONFIG:Debug>:${CMAKE_C_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL}>" 32 "$<$<NOT:$<CONFIG:Debug>>:${CMAKE_C_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL}>" 33 -S ${CMAKE_CURRENT_SOURCE_DIR}/main.c -o main.s 34 COMMAND_EXPAND_LISTS 35 DEPENDS main.c 36 VERBATIM 37 ) 38 endif() 39endif() 40 41 42if(SRCS) 43 set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}") 44 enable_language(ASM OPTIONAL) 45else() 46 message(STATUS "No assembler enabled, using C") 47 set(SRCS main.c) 48endif() 49 50add_executable(HelloAsm ${SRCS}) 51