-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCMakeLists.txt
109 lines (94 loc) · 3.23 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
cmake_minimum_required(VERSION 3.14)
project(Scarlet LANGUAGES CXX)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose build type: Debug Release" FORCE)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Building in debug mode")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
message(STATUS "Building in release mode")
else()
message(FATAL_ERROR "Invalid build type: ${CMAKE_BUILD_TYPE}\nValid build types are: Debug, Release")
endif()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
message(STATUS "Using ${CMAKE_CXX_COMPILER} (version ${CMAKE_CXX_COMPILER_VERSION}) to build Scarlet")
set(SCARLET_SOURCE_DIR ${CMAKE_SOURCE_DIR})
execute_process(
COMMAND uname -m
OUTPUT_VARIABLE SYSTEM_ARCHITECTURE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(SYSTEM_ARCHITECTURE STREQUAL "arm64")
message(STATUS "Detected ARM64 platform")
message(FATAL_ERROR "Build halted.\nPlease run the following command in your terminal and then build again:\n'arch -x86_64 zsh'")
endif()
function(set_basic_compile_options target)
target_compile_options(${target} PRIVATE
-Wall
-Wextra
-Werror
-fno-strict-aliasing
-fwrapv
-fpie
$<$<CONFIG:Debug>:-g -O0 -DDEBUG>
$<$<CONFIG:Release>:-O3>
)
endfunction()
add_subdirectory(token)
add_subdirectory(regex)
add_subdirectory(unary_operations)
add_subdirectory(binary_operations)
add_subdirectory(scar)
add_subdirectory(scasm)
add_subdirectory(lexer)
add_subdirectory(parser)
add_subdirectory(codegen)
set(SOURCES ./driver/driver.cc)
include_directories(${CMAKE_SOURCE_DIR})
find_package(Boost REQUIRED COMPONENTS program_options)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
endif()
add_executable(scarlet ${SOURCES})
target_compile_options(scarlet PRIVATE
-Wall
-Wextra
-Werror
$<$<CONFIG:Debug>:-g -O0 -DDEBUG>
$<$<CONFIG:Release>:-O3>
)
add_dependencies(
scarlet
scar
scasm
scarRegex
scarLexer
scarParser
scarCodegen
)
target_link_libraries(scarlet ${Boost_LIBRARIES})
target_link_libraries(scarlet scarRegex)
target_link_libraries(scarlet scarLexer)
target_link_libraries(scarlet scarParser)
target_link_libraries(scarlet scarCodegen)
target_link_libraries(scarlet scar)
target_link_libraries(scarlet scasm)
target_compile_options(scarlet PRIVATE -O3)
add_custom_target(test-scarlet
DEPENDS scarlet
COMMAND echo "Running lexer test"
COMMAND ${CMAKE_SOURCE_DIR}/test_compiler ./scarlet --chapter 8 --stage lex
COMMAND echo "Running parser test"
COMMAND ${CMAKE_SOURCE_DIR}/test_compiler ./scarlet --chapter 8 --stage parse
COMMAND echo "Running semantic analysis test"
COMMAND ${CMAKE_SOURCE_DIR}/test_compiler ./scarlet --chapter 8 --stage validate
COMMAND echo "Running scar test"
COMMAND ${CMAKE_SOURCE_DIR}/test_compiler ./scarlet --chapter 8 --stage tacky
COMMAND echo "Running Codegen test"
COMMAND ${CMAKE_SOURCE_DIR}/test_compiler ./scarlet --chapter 8 --stage codegen
COMMAND echo "Running bitwise, compound, increment/decrement and goto test"
COMMAND ${CMAKE_SOURCE_DIR}/test_compiler ./scarlet --chapter 7 --extra-credit
COMMAND echo "Running test asm"
COMMAND ${CMAKE_SOURCE_DIR}/test_compiler ./scarlet --chapter 8
)