Skip to content

Commit 3e2f3af

Browse files
authored
Merge pull request #94 from IITH-Compilers/llvm-submodule
Update to cmake in order to support both standalone and llvm submodule builds.
2 parents 40026aa + 21b9abd commit 3e2f3af

File tree

8 files changed

+137
-109
lines changed

8 files changed

+137
-109
lines changed

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
cmake ../eigen-3.3.7
3434
make -j4 && cd ..
3535
- name: cmake
36-
run: cd build && cmake -DEigen3_DIR=./eigen-build ../src
36+
run: cd build && cmake -DEigen3_DIR=./eigen-build ..
3737
- name: make
3838
run: cd build && make -j8
3939
- uses: actions/upload-artifact@v2

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
cmake ../eigen-3.3.7
3838
make -j4 && cd ..
3939
- name: cmake
40-
run: cd build && cmake -DEigen3_DIR=./eigen-build ../src
40+
run: cd build && cmake -DEigen3_DIR=./eigen-build ..
4141
- name: make
4242
run: cd build && make -j8
4343
- name: Run-tests

CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
10+
11+
find_package (Eigen3 3.3.7 REQUIRED NO_MODULE)
12+
message(STATUS "Found Eigen3 in: ${Eigen3_DIR}")
13+
14+
set(CMAKE_CXX_STANDARD 17 CACHE STRING "")
15+
16+
# LLVM is normally built without RTTI. Be consistent with that.
17+
if(NOT LLVM_ENABLE_RTTI)
18+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
19+
endif()
20+
21+
add_subdirectory(src)

Manylinux2014_Compliant_Source/pkg/build.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ cd eigen-build
1515
cmake ../eigen-3.3.7 && make && make install
1616

1717
cd ..
18-
cmake -DCMAKE_BUILD_TYPE=Release ../src && make -j"$(nproc)" && make install
18+
cmake -DCMAKE_BUILD_TYPE=Release .. && make -j"$(nproc)" && make install
1919

2020
cd ..
2121
cp src/include/utils.h Manylinux2014_Compliant_Source/pkg/ir2vec/
22-
cp build/version.h Manylinux2014_Compliant_Source/pkg/ir2vec/
22+
cp build/src/version.h Manylinux2014_Compliant_Source/pkg/ir2vec/
2323
cp vocabulary/seedEmbeddingVocab.txt Manylinux2014_Compliant_Source/pkg/ir2vec/
2424

2525
bash Manylinux2014_Compliant_Source/pkg/regen-oracle.sh

Manylinux2014_Compliant_Source/pkg/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
VERSION = ""
1919
DESCRIPTION = ""
2020

21-
with (pl.Path(__file__).resolve().parents[2] / "src" / "CMakeLists.txt").open() as f:
21+
with (pl.Path(__file__).resolve().parents[2] / "CMakeLists.txt").open() as f:
2222
for line in f:
2323
if not VERSION:
2424
vmatch = version_regex.match(line) # Not using walrus because Python3.6

README.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,31 @@ Please see [here](https://compilers.cse.iith.ac.in/projects/ir2vec/) for more de
2727

2828
## Table Of Contents
2929
- [IR2Vec](#ir2vec)
30-
- [LLVM Version Archive](#llvm-version-archive)
31-
- [Table Of Contents](#table-of-contents)
32-
- [Installation](#installation)
33-
- [Python](#python)
34-
- [Cpp](#cpp)
35-
- [Requirements](#requirements)
36-
- [Building from source](#building-from-source)
37-
- [Generating program representations](#generating-program-representations)
38-
- [Using Binary](#using-binary)
39-
- [Command-Line options](#command-line-options)
40-
- [Flow-Aware Embeddings](#flow-aware-embeddings)
41-
- [Symbolic Embeddings](#symbolic-embeddings)
42-
- [Using Libraries](#using-libraries)
43-
- [Using Python package (IR2Vec-Wheels)](#using-python-package-ir2vec-wheels)
44-
- [Initialization -ir2vec.initEmbedding](#initialization--ir2vecinitembedding)
45-
- [getProgramVector](#getprogramvector)
46-
- [getFunctionVectors](#getfunctionvectors)
47-
- [getInstructionVectors](#getinstructionvectors)
48-
- [Example](#example)
49-
- [Binaries, Libraries and Wheels - Artifacts](#binaries-libraries-and-wheels---artifacts)
50-
- [Experiments](#experiments)
51-
- [Note](#note)
52-
- [Citation](#citation)
53-
- [Contributions](#contributions)
54-
- [License](#license)
30+
- [LLVM Version Archive](#llvm-version-archive)
31+
- [Table Of Contents](#table-of-contents)
32+
- [Installation](#installation)
33+
- [Python](#python)
34+
- [Cpp](#cpp)
35+
- [Requirements](#requirements)
36+
- [Building from source](#building-from-source)
37+
- [Generating program representations](#generating-program-representations)
38+
- [Using Binary](#using-binary)
39+
- [Command-Line options](#command-line-options)
40+
- [Flow-Aware Embeddings](#flow-aware-embeddings)
41+
- [Symbolic Embeddings](#symbolic-embeddings)
42+
- [Using Libraries](#using-libraries)
43+
- [Using Python package (IR2Vec-Wheels)](#using-python-package-ir2vec-wheels)
44+
- [Initialization -ir2vec.initEmbedding](#initialization--ir2vecinitembedding)
45+
- [getProgramVector](#getprogramvector)
46+
- [getFunctionVectors](#getfunctionvectors)
47+
- [getInstructionVectors](#getinstructionvectors)
48+
- [Example](#example)
49+
- [Binaries, Libraries and Wheels - Artifacts](#binaries-libraries-and-wheels---artifacts)
50+
- [Experiments](#experiments)
51+
- [Note](#note)
52+
- [Citation](#citation)
53+
- [Contributions](#contributions)
54+
- [License](#license)
5555

5656
## Installation
5757

@@ -96,7 +96,7 @@ If you're a C++ developer and require low-level control, optimization, or integr
9696
2. `mkdir eigen-build && cd eigen-build`
9797
3. `cmake ../eigen-3.3.7 && make`
9898
4. `cd ../`
99-
3. `cmake -DLT_LLVM_INSTALL_DIR=<path_to_LLVM_build_dir> -DEigen3_DIR=<path_to_eigen_build_dir> [-DCMAKE_INSTALL_PREFIX=<install_dir>] ../src`
99+
3. `cmake -DLT_LLVM_INSTALL_DIR=<path_to_LLVM_build_dir> -DEigen3_DIR=<path_to_eigen_build_dir> [-DCMAKE_INSTALL_PREFIX=<install_dir>] ..`
100100
4. `make [&& make install]`
101101

102102
This process would generate `ir2vec` binary under `build/bin` directory, `libIR2Vec.a` and `libIR2Vec.so` under `build/lib` directory.

src/CMakeLists.txt

Lines changed: 84 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,94 @@
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})
231

242
configure_file (./include/version.h.cmake version.h @ONLY)
253
include_directories(./include ${CMAKE_CURRENT_BINARY_DIR})
264

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-
345
set(commonsrc FlowAware.cpp Symbolic.cpp utils.cpp)
356
set(libsrc libIR2Vec.cpp ${commonsrc})
367
set(binsrc CollectIR.cpp IR2Vec.cpp)
378

389
file(GLOB RESOURCE_FILES ../vocabulary/seedEmbeddingVocab.txt)
3910

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()

src/test-suite/sanity_check.sh.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
BUILD=@LIB_LOC@
3-
43
EncodingType=$1
54

65
SO_FILE=
@@ -26,7 +25,7 @@ fi
2625

2726
SEED_VERSION=$2
2827
VOCAB_PATH="./vocabulary/seedEmbeddingVocab.txt"
29-
IR2VEC_PATH="../bin/ir2vec"
28+
IR2VEC_PATH="../../bin/ir2vec"
3029

3130
functions=("main" "buildMatchingMachine" "search" "BellamFord" "BFS" "isBCUtil" "insertionSort" "binomialCoeff" "find" "countParenth" "boruvkaMST" "maxStackHeight" "badCharHeuristic" "bpm"
3231
"count" "getMaxUtil" "buildSuffixArray" "countOnes" "countStrings" "countRec" "countWays" "AP" "cutRod" "isCyclic" "isDivisible" "DFS" "editDist" "eggDrop" "isSC" "isConnected" "printClosest"

0 commit comments

Comments
 (0)