aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/llvm-tools.cmake
diff options
context:
space:
mode:
authormonster <monster@ydb.tech>2022-07-07 14:41:37 +0300
committermonster <monster@ydb.tech>2022-07-07 14:41:37 +0300
commit06e5c21a835c0e923506c4ff27929f34e00761c2 (patch)
tree75efcbc6854ef9bd476eb8bf00cc5c900da436a2 /cmake/llvm-tools.cmake
parent03f024c4412e3aa613bb543cf1660176320ba8f4 (diff)
downloadydb-06e5c21a835c0e923506c4ff27929f34e00761c2.tar.gz
fix ya.make
Diffstat (limited to 'cmake/llvm-tools.cmake')
-rw-r--r--cmake/llvm-tools.cmake48
1 files changed, 48 insertions, 0 deletions
diff --git a/cmake/llvm-tools.cmake b/cmake/llvm-tools.cmake
new file mode 100644
index 0000000000..b53345232a
--- /dev/null
+++ b/cmake/llvm-tools.cmake
@@ -0,0 +1,48 @@
+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()
+
+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)
+ 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>>")
+ get_target_property(TARGET_STANDARD ${Tgt} CXX_STANDARD)
+
+ add_custom_command(
+ OUTPUT ${Out}
+ COMMAND
+ ${Tool}
+ ${TARGET_INCLUDES}
+ ${TARGET_COMPILE_OPTIONS}
+ -std=c++${TARGET_STANDARD}
+ -Wno-unknown-warning-option
+ -fno-lto
+ -emit-llvm
+ -c
+ ${Inpt}
+ -o
+ ${Out}
+ COMMAND_EXPAND_LISTS
+ DEPENDS ${Inpt} ${Tool}
+ )
+endfunction()