123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- set(CLANGPLUSPLUS ${CMAKE_CXX_COMPILER})
- message(STATUS "Using ${CLANGPLUSPLUS} for c++ to LLVM IR translation")
- else()
- find_program(CLANGPLUSPLUS NAMES clang++-12 clang++)
- if (CLANGPLUSPLUS MATCHES "CLANGPLUSPLUS-NOTFOUND")
- message(SEND_ERROR "clang++ not found")
- else()
- message(STATUS "Using ${CLANGPLUSPLUS} for c++ to LLVM IR translation")
- endif()
- endif()
- if (CMAKE_C_COMPILER_ID MATCHES "Clang")
- set(CLANGC ${CMAKE_C_COMPILER})
- message(STATUS "Using ${CLANGC} for c++ to LLVM IR translation")
- else()
- find_program(CLANGC NAMES clang-12 clang)
- if (CLANGC MATCHES "CLANGC-NOTFOUND")
- message(SEND_ERROR "clang not found")
- else()
- message(STATUS "Using ${CLANGC} for c to LLVM IR translation")
- endif()
- endif()
- find_program(LLVMLINK NAMES llvm-link-12 llvm-link)
- if (LLVMLINK MATCHES "LLVMLINK-NOTFOUND")
- message(SEND_ERROR "llvm-link not found")
- else()
- message(STATUS "Using ${LLVMLINK} for LLVM IR linking")
- endif()
- find_program(LLVMOPT NAMES opt-12 opt)
- if (LLVMOPT MATCHES "LLVMOPT-NOTFOUND")
- message(SEND_ERROR "llvm opt tool not found")
- else()
- message(STATUS "Using ${LLVMOPT} for LLVM IR optimization")
- endif()
- function(llvm_compile_cxx Tgt Inpt Out Tool UseC)
- list(APPEND TARGET_INCLUDES "-I$<JOIN:$<TARGET_PROPERTY:${Tgt},INCLUDE_DIRECTORIES>,$<SEMICOLON>-I>")
- list(APPEND TARGET_COMPILE_OPTIONS "$<JOIN:$<TARGET_PROPERTY:${Tgt},COMPILE_OPTIONS>,$<SEMICOLON>>")
- if (${UseC})
- set(STD_FLAG "")
- else()
- get_target_property(TARGET_STANDARD ${Tgt} CXX_STANDARD)
- set(STD_FLAG "-std=c++${TARGET_STANDARD}")
- endif()
- add_custom_command(
- OUTPUT ${Out}
- COMMAND
- ${Tool}
- ${TARGET_INCLUDES}
- ${TARGET_COMPILE_OPTIONS}
- ${STD_FLAG}
- -Wno-unknown-warning-option
- -fno-lto
- -emit-llvm
- -c
- ${Inpt}
- -o
- ${Out}
- COMMAND_EXPAND_LISTS
- DEPENDS ${Inpt} ${Tool}
- )
- endfunction()
- function(llvm_compile_c Tgt Inpt Out Tool)
- llvm_compile_cxx(${Tgt} ${Inpt} ${Out} ${Tool} TRUE)
- endfunction()
|