-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
84 lines (66 loc) · 2.3 KB
/
Copy pathCMakeLists.txt
File metadata and controls
84 lines (66 loc) · 2.3 KB
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
cmake_minimum_required(VERSION 3.10)
project(blang VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_BUILD_TYPE Debug)
if (APPLE)
list(APPEND CMAKE_PREFIX_PATH "/opt/homebrew/opt/Flex")
list(APPEND CMAKE_PREFIX_PATH "/opt/homebrew/opt/Bison")
list(APPEND CMAKE_PREFIX_PATH "/opt/homebrew/opt/llvm")
endif()
find_package(FLEX REQUIRED)
find_package(BISON REQUIRED)
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION} in ${LLVM_DIR}")
# Generate Bison parser
BISON_TARGET(Parser src/parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h)
# Generate Flex lexer, using Bison's generated header
FLEX_TARGET(Lexer src/lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.c)
# Make Flex depend on Bison (so y.tab.h / parser.h is generated first)
ADD_FLEX_BISON_DEPENDENCY(Lexer Parser)
llvm_map_components_to_libnames(llvm_libs
Passes
X86AsmParser
X86CodeGen
X86Desc
X86Info
AArch64AsmParser
AArch64CodeGen
AArch64Desc
AArch64Info
)
# Include directories for generated headers
include_directories(${CMAKE_CURRENT_BINARY_DIR} include)
# Your other source files (if any)
file(
GLOB_RECURSE
SOURCES
"src/main.c"
"src/error.c"
"src/ast.c"
"src/binary.cpp"
"src/llvm_ir.cpp"
)
# Remove raw lexer and parser source files if they're listed by GLOB
list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/lexing.l")
list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.y")
# Add executable BEFORE applying target-specific commands
add_executable(blang
${SOURCES}
${FLEX_Lexer_OUTPUTS}
${BISON_Parser_OUTPUTS}
)
target_compile_definitions(blang PRIVATE
BLANG_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
BLANG_VERSION_MINOR=${PROJECT_VERSION_MINOR}
BLANG_VERSION_PATCH=${PROJECT_VERSION_PATCH}
BLANG_VERSION_STRING="${PROJECT_VERSION}"
)
# Now target-specific commands
target_include_directories(blang PRIVATE ${LLVM_INCLUDE_DIRS})
target_include_directories(blang PRIVATE src ${CMAKE_CURRENT_BINARY_DIR})
target_compile_definitions(blang PRIVATE ${LLVM_DEFINITIONS})
target_compile_options(blang PRIVATE -fno-rtti)
target_link_libraries(blang PRIVATE ${llvm_libs} ${FLEX_LIBRARIES})