|
1 | | -cmake_minimum_required(VERSION 3.13) |
2 | | -project(ir2vec VERSION 2.1.2) |
3 | | - |
4 | | -set(IR2VEC_LIB "IR2Vec") |
5 | | -set(IR2VEC_LIB_STATIC "IR2Vec_Static") |
6 | | - |
7 | | -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") |
8 | | - |
9 | | - |
10 | | -set(LT_LLVM_INSTALL_DIR "" CACHE PATH "LLVM installation directory") |
11 | | -list(APPEND CMAKE_PREFIX_PATH "${LT_LLVM_INSTALL_DIR}/lib/cmake/llvm/") |
12 | | - |
13 | | -find_package(LLVM 17.0.0 REQUIRED CONFIG) |
14 | | -message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") |
15 | | -message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") |
16 | | - |
17 | | -find_package (Eigen3 3.3.7 REQUIRED NO_MODULE) |
18 | | -message(STATUS "Found Eigen3 in: ${Eigen3_DIR}") |
19 | | - |
20 | | -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) |
21 | | - |
22 | | -include_directories(SYSTEM ${LLVM_INCLUDE_DIRS}) |
23 | 1 |
|
24 | 2 | configure_file (./include/version.h.cmake version.h @ONLY) |
25 | 3 | include_directories(./include ${CMAKE_CURRENT_BINARY_DIR}) |
26 | 4 |
|
27 | | -set(CMAKE_CXX_STANDARD 17 CACHE STRING "") |
28 | | - |
29 | | -# LLVM is normally built without RTTI. Be consistent with that. |
30 | | -if(NOT LLVM_ENABLE_RTTI) |
31 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") |
32 | | -endif() |
33 | | - |
34 | 5 | set(commonsrc FlowAware.cpp Symbolic.cpp utils.cpp) |
35 | 6 | set(libsrc libIR2Vec.cpp ${commonsrc}) |
36 | 7 | set(binsrc CollectIR.cpp IR2Vec.cpp) |
37 | 8 |
|
38 | 9 | file(GLOB RESOURCE_FILES ../vocabulary/seedEmbeddingVocab.txt) |
39 | 10 |
|
40 | | -# llvm_map_components_to_libnames(llvm_libs all) |
41 | | -llvm_map_components_to_libnames(llvm_libs support core irreader analysis TransformUtils) |
42 | | - |
43 | | -add_executable(${PROJECT_NAME} ${binsrc}) |
44 | | -target_link_libraries (${PROJECT_NAME} ${llvm_libs} objlib) |
45 | | -target_include_directories(${PROJECT_NAME} PRIVATE .) |
46 | | - |
47 | | -add_library(objlib OBJECT ${libsrc}) |
48 | | -set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1) |
49 | | -target_link_libraries (objlib Eigen3::Eigen) |
50 | | - |
51 | | -add_library(${IR2VEC_LIB} SHARED $<TARGET_OBJECTS:objlib>) |
52 | | -add_library(${IR2VEC_LIB_STATIC} STATIC $<TARGET_OBJECTS:objlib>) |
53 | | -set_target_properties(${IR2VEC_LIB} ${IR2VEC_LIB_STATIC} PROPERTIES |
54 | | - VERSION ${PROJECT_VERSION} |
55 | | - SOVERSION 1 |
56 | | - PUBLIC_HEADER "./include/IR2Vec.h" |
57 | | - RESOURCE ${RESOURCE_FILES} |
58 | | - OUTPUT_NAME ${IR2VEC_LIB} |
59 | | - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib |
60 | | - ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib |
61 | | - ) |
62 | | - |
63 | | -install(TARGETS ${IR2VEC_LIB} ${IR2VEC_LIB_STATIC} |
64 | | - LIBRARY DESTINATION lib |
65 | | - PUBLIC_HEADER DESTINATION include |
66 | | - RESOURCE DESTINATION ./) |
67 | | - |
68 | | -add_subdirectory(test-suite) |
69 | | - |
70 | | -add_custom_target(verify-symbolic |
71 | | - COMMAND bash ./sanity_check.sh SYM llvm17 |
72 | | - COMMENT "Generating Symbolic IR2Vec vectors and comparing with oracle..." |
73 | | - WORKING_DIRECTORY ./test-suite |
74 | | - DEPENDS ${PROJECT_NAME} |
75 | | - VERBATIM |
76 | | - ) |
77 | | - |
78 | | -add_custom_target(verify-flowaware |
79 | | - COMMAND bash sanity_check.sh FA llvm17 |
80 | | - COMMENT "Generating Flow-Aware IR2Vec vectors and comparing with oracle..." |
81 | | - WORKING_DIRECTORY ./test-suite |
82 | | - DEPENDS ${PROJECT_NAME} |
83 | | - VERBATIM |
84 | | - ) |
85 | | - |
86 | | -add_custom_target(verify-all DEPENDS verify-symbolic verify-flowaware) |
| 11 | +option(LLVM_IR2VEC "where to enable IR2Vec as subproject for LLVM" OFF) |
| 12 | + |
| 13 | +if(NOT LLVM_IR2VEC) |
| 14 | + |
| 15 | + set(LT_LLVM_INSTALL_DIR "" CACHE PATH "LLVM installation directory") |
| 16 | + list(APPEND CMAKE_PREFIX_PATH "${LT_LLVM_INSTALL_DIR}/lib/cmake/llvm/") |
| 17 | + |
| 18 | + find_package(LLVM 17.0.0 REQUIRED CONFIG) |
| 19 | + message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") |
| 20 | + message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") |
| 21 | + |
| 22 | + include_directories(SYSTEM ${LLVM_INCLUDE_DIRS}) |
| 23 | + # llvm_map_components_to_libnames(llvm_libs all) |
| 24 | + llvm_map_components_to_libnames(llvm_libs support core irreader analysis TransformUtils) |
| 25 | + |
| 26 | + add_executable(${PROJECT_NAME} ${binsrc}) |
| 27 | + target_link_libraries (${PROJECT_NAME} ${llvm_libs} objlib) |
| 28 | + target_include_directories(${PROJECT_NAME} PRIVATE .) |
| 29 | + |
| 30 | + add_library(objlib OBJECT ${libsrc}) |
| 31 | + set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1) |
| 32 | + target_link_libraries (objlib Eigen3::Eigen) |
| 33 | + |
| 34 | + add_library(${IR2VEC_LIB} SHARED $<TARGET_OBJECTS:objlib>) |
| 35 | + add_library(${IR2VEC_LIB_STATIC} STATIC $<TARGET_OBJECTS:objlib>) |
| 36 | + set_target_properties(${IR2VEC_LIB} ${IR2VEC_LIB_STATIC} PROPERTIES |
| 37 | + VERSION ${PROJECT_VERSION} |
| 38 | + SOVERSION 1 |
| 39 | + PUBLIC_HEADER "./include/IR2Vec.h" |
| 40 | + RESOURCE ${RESOURCE_FILES} |
| 41 | + OUTPUT_NAME ${IR2VEC_LIB} |
| 42 | + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib |
| 43 | + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib |
| 44 | + ) |
| 45 | + |
| 46 | + install(TARGETS ${IR2VEC_LIB} ${IR2VEC_LIB_STATIC} |
| 47 | + LIBRARY DESTINATION lib |
| 48 | + PUBLIC_HEADER DESTINATION include |
| 49 | + RESOURCE DESTINATION ./) |
| 50 | + |
| 51 | + add_subdirectory(test-suite) |
| 52 | + |
| 53 | + add_custom_target(verify-symbolic |
| 54 | + COMMAND bash ./sanity_check.sh SYM llvm17 |
| 55 | + COMMENT "Generating Symbolic IR2Vec vectors and comparing with oracle..." |
| 56 | + WORKING_DIRECTORY ./test-suite |
| 57 | + DEPENDS ${PROJECT_NAME} |
| 58 | + VERBATIM |
| 59 | + ) |
| 60 | + |
| 61 | + add_custom_target(verify-flowaware |
| 62 | + COMMAND bash sanity_check.sh FA llvm17 |
| 63 | + COMMENT "Generating Flow-Aware IR2Vec vectors and comparing with oracle..." |
| 64 | + WORKING_DIRECTORY ./test-suite |
| 65 | + DEPENDS ${PROJECT_NAME} |
| 66 | + VERBATIM |
| 67 | + ) |
| 68 | + |
| 69 | + add_custom_target(verify-all |
| 70 | + COMMAND bash sanity_check.sh FA llvm17 && bash sanity_check.sh SYM llvm17 |
| 71 | + COMMENT "Generating both Symbolic and Flow-Aware IR2Vec vectors and comparing with oracle..." |
| 72 | + WORKING_DIRECTORY ./test-suite |
| 73 | + DEPENDS ${PROJECT_NAME} |
| 74 | + VERBATIM |
| 75 | + ) |
| 76 | + |
| 77 | +else() |
| 78 | + |
| 79 | + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/include/IR2Vec.h DESTINATION ${LLVM_MAIN_INCLUDE_DIR}/llvm ) |
| 80 | + |
| 81 | + set(LLVM_OPTIONAL_SOURCES ${binsrc}) |
| 82 | + |
| 83 | + add_llvm_library(LLVMIR2Vec |
| 84 | + ${libsrc} |
| 85 | + |
| 86 | + DEPENDS |
| 87 | + intrinsics_gen |
| 88 | + ) |
| 89 | + |
| 90 | + target_link_libraries(LLVMIR2Vec PRIVATE Eigen3::Eigen) |
| 91 | + target_include_directories(LLVMIR2Vec PRIVATE ${LLVM_MAIN_INCLUDE_DIR}) |
| 92 | + target_include_directories(LLVMIR2Vec PRIVATE .) |
| 93 | + |
| 94 | +endif() |
0 commit comments