Add 'llvm' as external module (#1110)
author박세희/동작제어Lab(SR)/Principal Engineer/삼성전자 <saehie.park@samsung.com>
Wed, 22 Aug 2018 02:19:15 +0000 (11:19 +0900)
committer박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Wed, 22 Aug 2018 02:19:15 +0000 (11:19 +0900)
This commit adds 'llvm' as external module which provides compile/link options to use LLVM libraries.

Signed-off-by: SaeHie Park <saehie.park@samsung.com>
cmake/packages/LLVMConfig.cmake [new file with mode: 0644]

diff --git a/cmake/packages/LLVMConfig.cmake b/cmake/packages/LLVMConfig.cmake
new file mode 100644 (file)
index 0000000..0f8faec
--- /dev/null
@@ -0,0 +1,45 @@
+function(_LLVM_import)
+
+  if(NOT TARGET llvm)
+    find_program(llvm_config "llvm-config")
+    if (NOT llvm_config)
+      return()
+    endif(NOT llvm_config)
+    message(STATUS "Found llvm-config: ${llvm_config}")
+
+    # get llvm compile options
+    execute_process(COMMAND ${llvm_config} --cppflags OUTPUT_VARIABLE
+                    LLVM_CPPFLAGS_STR OUTPUT_STRIP_TRAILING_WHITESPACE)
+    # split one string to list of option items
+    string(REPLACE " " ";" LLVM_CPPFLAGS ${LLVM_CPPFLAGS_STR})
+    execute_process(COMMAND ${llvm_config} --has-rtti OUTPUT_VARIABLE
+                    LLVM_HAS_RTTI OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if("${LLVM_HAS_RTTI}" STREQUAL "NO")
+      list(APPEND LLVM_CPPFLAGS "-fno-rtti")
+    endif()
+    # note: "llvm-config --cxxflags" returns whole string but also includes
+    # unwanted "-O3 -DNDEBUG" and several "-Wno-" options so this is not used
+
+    # get llvm link options
+    execute_process(COMMAND ${llvm_config} --ldflags OUTPUT_VARIABLE
+                    LLVM_LINKFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+    execute_process(COMMAND ${llvm_config} --system-libs 
+                    OUTPUT_VARIABLE LLVM_LINKSYSLIBS OUTPUT_STRIP_TRAILING_WHITESPACE)
+    execute_process(COMMAND ${llvm_config} --libs core mcjit native
+                    OUTPUT_VARIABLE LLVM_LINKLIBS OUTPUT_STRIP_TRAILING_WHITESPACE)
+                    
+    add_library(llvm INTERFACE)
+    
+    foreach(ONE_CPPFLAG ${LLVM_CPPFLAGS})
+      target_compile_options(llvm INTERFACE ${ONE_CPPFLAG})
+    endforeach()
+    target_link_libraries(llvm INTERFACE ${LLVM_LINKFLAGS})
+    target_link_libraries(llvm INTERFACE ${LLVM_LINKLIBS})
+    target_link_libraries(llvm INTERFACE ${LLVM_LINKSYSLIBS})
+  
+  endif(NOT TARGET llvm)
+
+  set(LLVM_FOUND TRUE PARENT_SCOPE)
+endfunction(_LLVM_import)
+
+_LLVM_import()