-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathCMakeLists.txt
80 lines (71 loc) · 2.71 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
cmake_minimum_required(VERSION 3.10)
project(Decaf_Compiler)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_COMPILER ${CMAKE_CXX_COMPILER})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -ldl -lfl")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_FLEX_BISON_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/flex_bison_output)
# Create the directory for flex and bison outputs
file(MAKE_DIRECTORY ${CMAKE_FLEX_BISON_OUTPUT_DIRECTORY})
# Setup the required Libraries
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
find_package(BISON)
find_package(FLEX)
# Link the directories which contain required libraries
link_directories(/usr/lib/llvm-6.0/build/lib)
# Add directories which has the header files that are used in the project
include_directories(/usr/lib/llvm-6.0/build/include)
include_directories(src)
include_directories(src/class_definitions)
# Make Lexical analyser and parser using flex and bison
BISON_TARGET(Parser src/decaf_parser.ypp ${CMAKE_FLEX_BISON_OUTPUT_DIRECTORY}/decaf.tab.cpp)
FLEX_TARGET(Lexer src/decaf_lexer.l ${CMAKE_FLEX_BISON_OUTPUT_DIRECTORY}/lex.yy.cc)
# Build the core functionality shared library
add_library(coreLibrary SHARED
src/utilities.cpp
src/variable.cpp
src/variables.cpp
src/fieldDeclaration.cpp
src/fieldDeclarations.cpp
src/enclosedExpression.cpp
src/unaryExpression.cpp
src/binaryExpression.cpp
src/location.cpp
src/integerLiteral.cpp
src/boolLiteral.cpp
src/charLiteral.cpp
src/stringLiteral.cpp
src/statements.cpp
src/calloutCall.cpp
src/calloutArgument.cpp
src/calloutArguments.cpp
src/methodCall.cpp
src/parameters.cpp
src/assignment.cpp
src/block.cpp
src/variableDeclaration.cpp
src/stringList.cpp
src/variableDeclarations.cpp
src/forStatement.cpp
src/ifElseStatements.cpp
src/returnStatement.cpp
src/breakStatement.cpp
src/continueStatement.cpp
src/methodArgument.cpp
src/methodArguments.cpp
src/methodDeclaration.cpp
src/methodDeclarations.cpp
src/program.cpp
src/constructs.cpp)
# Add the main executable
add_executable(decafCompiler
${FLEX_Lexer_OUTPUTS}
${BISON_Parser_OUTPUTS})
target_include_directories(decafCompiler PRIVATE
${CMAKE_FLEX_BISON_OUTPUT_DIRECTORY})
target_link_libraries(decafCompiler coreLibrary)
llvm_map_components_to_libnames(llvm_libs support core irreader mcjit native)
target_link_libraries(decafCompiler ${llvm_libs})