CMakeLists.txt 1.9 KB

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