-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
130 lines (109 loc) · 2.98 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
cmake_minimum_required(VERSION 3.10)
project(CppLox VERSION 0.1)
# specify the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
#------------------------------------------------#
# LIBRARIES #
#------------------------------------------------#
# AddressSanitizer
if(UNIX AND NOT APPLE)
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb -fsanitize=address -fno-omit-frame-pointer -static-libstdc++ -static-libgcc -static-libasan -lrt")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -ggdb -fsanitize=address -fno-omit-frame-pointer -static-libstdc++ -static-libgcc -static-libasan -lrt")
elseif(APPLE)
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -fsanitize=address -fno-omit-frame-pointer")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -g3 -fsanitize=address -fno-omit-frame-pointer")
endif()
# GTest
find_package(GTest REQUIRED)
# GFlags
find_package(gflags REQUIRED)
# GLog
find_package (glog REQUIRED)
# Bison
find_package(BISON REQUIRED)
# Flex
find_package(FLEX REQUIRED)
#------------------------------------------------#
# CPPLOX SOURCES #
#------------------------------------------------#
configure_file(config.h.in ${PROJECT_SOURCE_DIR}/src/config.h)
# Bison
BISON_TARGET(
JSParser
${PROJECT_SOURCE_DIR}/src/parser.yy
${PROJECT_SOURCE_DIR}/src/parser.cpp
DEFINES_FILE ${PROJECT_SOURCE_DIR}/src/parser.h)
# Flex
set(LEXER_INPUT_FILE ${PROJECT_SOURCE_DIR}/src/lexer.l)
FLEX_TARGET(
JSLexer
${LEXER_INPUT_FILE}
${PROJECT_SOURCE_DIR}/src/lexer.cpp)
include_directories(src ${gflags_INCLUDE_DIR})
set(SOURCES
src/common.h
src/ast.h
src/ast.cpp
src/astbuilder.h
src/astbuilder.cpp
src/config.h
src/lineinfo.h
src/lineinfo.cpp
src/token.h
src/token.cpp
src/parser.h
src/parser.cpp
src/object.h
src/object.cpp
src/function.h
src/function.cpp
src/class_object.h
src/class_object.cpp
src/record.h
src/record.cpp
src/environment.h
src/environment.cpp
src/evaluator.h
src/evaluator.cpp
src/settings.h
src/settings.cpp
src/lexer.h
src/lexer_impl.cpp
src/location.h
${BISON_JSParser_OUTPUTS}
${FLEX_JSLexer_OUTPUTS}
)
add_library(libcpplox STATIC ${SOURCES})
add_executable(
cpplox
src/main.cpp
)
if(UNIX AND NOT APPLE)
set(ADDITIONAL_LIBRARIES Threads::Threads)
else()
set(ADDITIONAL_LIBRARIES)
endif()
target_link_libraries(cpplox libcpplox ${ADDITIONAL_LIBRARIES} gflags glog::glog)
#------------------------------------------------#
# GOOGLE TEST #
#------------------------------------------------#
enable_testing()
add_executable(
cpplox_test
tests/lexer_test.cpp
tests/parser_test.cpp
tests/object_test.cpp
tests/environment_test.cpp
tests/evaluator_test.cpp
)
target_link_libraries(
cpplox_test
libcpplox
glog::glog
GTest::gtest
GTest::gtest_main
${ADDITIONAL_LIBRARIES}
)
include(GoogleTest)
gtest_discover_tests(cpplox_test)