llvm-tools.cmake 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  2. set(CLANGPLUSPLUS ${CMAKE_CXX_COMPILER})
  3. message(STATUS "Using ${CLANGPLUSPLUS} for c++ to LLVM IR translation")
  4. else()
  5. find_program(CLANGPLUSPLUS NAMES clang++-12 clang++)
  6. if (CLANGPLUSPLUS MATCHES "CLANGPLUSPLUS-NOTFOUND")
  7. message(SEND_ERROR "clang++ not found")
  8. else()
  9. message(STATUS "Using ${CLANGPLUSPLUS} for c++ to LLVM IR translation")
  10. endif()
  11. endif()
  12. if (CMAKE_C_COMPILER_ID MATCHES "Clang")
  13. set(CLANGC ${CMAKE_C_COMPILER})
  14. message(STATUS "Using ${CLANGC} for c++ to LLVM IR translation")
  15. else()
  16. find_program(CLANGC NAMES clang-12 clang)
  17. if (CLANGC MATCHES "CLANGC-NOTFOUND")
  18. message(SEND_ERROR "clang not found")
  19. else()
  20. message(STATUS "Using ${CLANGC} for c to LLVM IR translation")
  21. endif()
  22. endif()
  23. find_program(LLVMLINK NAMES llvm-link-12 llvm-link)
  24. if (LLVMLINK MATCHES "LLVMLINK-NOTFOUND")
  25. message(SEND_ERROR "llvm-link not found")
  26. else()
  27. message(STATUS "Using ${LLVMLINK} for LLVM IR linking")
  28. endif()
  29. find_program(LLVMOPT NAMES opt-12 opt)
  30. if (LLVMOPT MATCHES "LLVMOPT-NOTFOUND")
  31. message(SEND_ERROR "llvm opt tool not found")
  32. else()
  33. message(STATUS "Using ${LLVMOPT} for LLVM IR optimization")
  34. endif()
  35. function(llvm_compile_cxx Tgt Inpt Out Tool UseC)
  36. list(APPEND TARGET_INCLUDES "-I$<JOIN:$<TARGET_PROPERTY:${Tgt},INCLUDE_DIRECTORIES>,$<SEMICOLON>-I>")
  37. list(APPEND TARGET_COMPILE_OPTIONS "$<JOIN:$<TARGET_PROPERTY:${Tgt},COMPILE_OPTIONS>,$<SEMICOLON>>")
  38. if (${UseC})
  39. set(STD_FLAG "")
  40. else()
  41. get_target_property(TARGET_STANDARD ${Tgt} CXX_STANDARD)
  42. set(STD_FLAG "-std=c++${TARGET_STANDARD}")
  43. endif()
  44. add_custom_command(
  45. OUTPUT ${Out}
  46. COMMAND
  47. ${Tool}
  48. ${TARGET_INCLUDES}
  49. ${TARGET_COMPILE_OPTIONS}
  50. ${STD_FLAG}
  51. -Wno-unknown-warning-option
  52. -fno-lto
  53. -emit-llvm
  54. -c
  55. ${Inpt}
  56. -o
  57. ${Out}
  58. COMMAND_EXPAND_LISTS
  59. DEPENDS ${Inpt} ${Tool}
  60. )
  61. endfunction()
  62. function(llvm_compile_c Tgt Inpt Out Tool)
  63. llvm_compile_cxx(${Tgt} ${Inpt} ${Out} ${Tool} TRUE)
  64. endfunction()