Mercurial > hg > CbC > CbC_llvm
comparison tools/llvm-shlib/CMakeLists.txt @ 83:60c9769439b8 LLVM3.7
LLVM 3.7
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Feb 2015 14:55:36 +0900 |
parents | |
children | afa8332a0e37 |
comparison
equal
deleted
inserted
replaced
78:af83660cff7b | 83:60c9769439b8 |
---|---|
1 # This tool creates a shared library from the LLVM libraries. Generating this | |
2 # library is enabled by setting LLVM_BUILD_LLVM_DYLIB=yes on the CMake | |
3 # commandline. By default the shared library only exports the LLVM C API. | |
4 | |
5 | |
6 # You can configure which libraries from LLVM you want to include in the shared | |
7 # library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited list of | |
8 # LLVM components. All compoenent names handled by llvm-config are valid. | |
9 | |
10 if(NOT DEFINED LLVM_DYLIB_COMPONENTS) | |
11 set(LLVM_DYLIB_COMPONENTS | |
12 ${LLVM_TARGETS_TO_BUILD} | |
13 Analysis | |
14 BitReader | |
15 BitWriter | |
16 CodeGen | |
17 Core | |
18 ExecutionEngine | |
19 IPA | |
20 IPO | |
21 IRReader | |
22 InstCombine | |
23 Instrumentation | |
24 Interpreter | |
25 Linker | |
26 MCDisassembler | |
27 MCJIT | |
28 ObjCARCOpts | |
29 Object | |
30 ScalarOpts | |
31 Support | |
32 Target | |
33 TransformUtils | |
34 Vectorize | |
35 native | |
36 ) | |
37 endif() | |
38 | |
39 add_definitions( -DLLVM_VERSION_INFO=\"${PACKAGE_VERSION}\" ) | |
40 | |
41 set(SOURCES | |
42 libllvm.cpp | |
43 ) | |
44 | |
45 if(NOT DEFINED LLVM_EXPORTED_SYMBOL_FILE) | |
46 | |
47 if( WIN32 AND NOT CYGWIN ) | |
48 message(FATAL_ERROR "Auto-generation not implemented for Win32 without GNU utils. Please specify LLVM_EXPORTED_SYMBOL_FILE.") | |
49 endif() | |
50 | |
51 # To get the export list for a single llvm library: | |
52 # nm ${LIB_PATH} | awk "/T _LLVM/ { print $3 }" | sort -u | sed -e "s/^_//g" > ${LIB_PATH}.exports | |
53 | |
54 set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_BINARY_DIR}/libllvm.exports) | |
55 | |
56 llvm_map_components_to_libnames(LIB_NAMES ${LLVM_DYLIB_COMPONENTS}) | |
57 | |
58 foreach (lib ${LIB_NAMES}) | |
59 | |
60 set(LIB_DIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) | |
61 set(LIB_NAME ${LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}) | |
62 set(LIB_PATH ${LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}) | |
63 set(LIB_EXPORTS_PATH ${LIB_NAME}.exports) | |
64 | |
65 list(APPEND LLVM_DYLIB_REQUIRED_EXPORTS ${LIB_EXPORTS_PATH}) | |
66 | |
67 add_custom_command(OUTPUT ${LIB_EXPORTS_PATH} | |
68 COMMAND nm ${LIB_PATH} | awk "/T _LLVM/ || /T LLVM/ { print $3 }" | sort -u | sed -e "s/^_//g" > ${LIB_EXPORTS_PATH} | |
69 WORKING_DIRECTORY ${LIB_DIR} | |
70 DEPENDS ${lib} | |
71 COMMENT "Generating Export list for ${lib}..." | |
72 VERBATIM ) | |
73 endforeach () | |
74 | |
75 add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE} | |
76 COMMAND cat ${LLVM_DYLIB_REQUIRED_EXPORTS} > ${LLVM_EXPORTED_SYMBOL_FILE} | |
77 WORKING_DIRECTORY ${LIB_DIR} | |
78 DEPENDS ${LLVM_DYLIB_REQUIRED_EXPORTS} | |
79 COMMENT "Generating combined export list...") | |
80 | |
81 endif() | |
82 | |
83 add_llvm_library(LLVM SHARED ${SOURCES}) | |
84 | |
85 if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # FIXME: It should be "GNU ld for elf" | |
86 # GNU ld doesn't resolve symbols in the version script. | |
87 list(REMOVE_DUPLICATES LIB_NAMES) | |
88 set(LIB_NAMES -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive) | |
89 endif() | |
90 | |
91 target_link_libraries(LLVM ${cmake_2_8_12_PRIVATE} ${LIB_NAMES}) | |
92 | |
93 add_dependencies(LLVM ${LLVM_EXPORTED_SYMBOL_FILE}) | |
94 | |
95 if (APPLE) | |
96 set_property(TARGET LLVM APPEND_STRING PROPERTY | |
97 LINK_FLAGS | |
98 " -compatibility_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR} -current_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") | |
99 endif() | |
100 |