-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
51 lines (44 loc) · 2.22 KB
/
CMakeLists.txt
File metadata and controls
51 lines (44 loc) · 2.22 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
cmake_minimum_required(VERSION 3.1)
project(GANCC C)
find_package(BISON)
find_package(FLEX)
function(REQUIRE_C_STANDARD TARGET VERSION)
set_property(TARGET ${TARGET} PROPERTY C_STANDARD ${VERSION})
set_property(TARGET ${TARGET} PROPERTY C_STANDARD_REQUIRED ON)
#set_property(TARGET ${TARGET} PROPERTY C_EXTENSIONS OFF)
endfunction()
include(CheckIncludeFile)
function(CHECK_AND_ADD_HEADER TARGET HEADER VAR)
check_include_file(${HEADER} ${VAR})
if(${VAR})
target_compile_definitions(${TARGET} PRIVATE ${VAR})
endif()
endfunction()
file(GLOB_RECURSE COMMON_SOURCES "common/src/*.c")
file(GLOB_RECURSE COMMON_HEADERS "common/include/*.h")
add_library(common STATIC ${COMMON_SOURCES} ${COMMON_HEADERS})
require_c_standard(common 99)
target_include_directories(common PUBLIC common/include/)
bison_target(pp_parser gancpp/src/pp.y ${CMAKE_CURRENT_BINARY_DIR}/pp_parser.c)
flex_target(pp_scanner gancpp/src/pp.l ${CMAKE_CURRENT_BINARY_DIR}/pp_scanner.c)
add_flex_bison_dependency(pp_scanner pp_parser)
file(GLOB_RECURSE GANCPP_SOURCES "gancpp/src/*.c")
file(GLOB_RECURSE GANCPP_LOCAL_HEADERS "gancpp/src/*.h")
add_executable(gancpp ${GANCPP_SOURCES} ${GANCPP_LOCAL_HEADERS} ${BISON_pp_parser_OUTPUTS} ${FLEX_pp_scanner_OUTPUTS})
require_c_standard(gancpp 99)
target_include_directories(gancpp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/)
target_link_libraries(gancpp PRIVATE common)
bison_target(lang_parser gancc/src/c.y ${CMAKE_CURRENT_BINARY_DIR}/lang_parser.c)
flex_target(lang_scanner gancc/src/c.l ${CMAKE_CURRENT_BINARY_DIR}/lang_scanner.c)
add_flex_bison_dependency(lang_scanner lang_parser)
file(GLOB_RECURSE GANCC_SOURCES "gancc/src/*.c")
file(GLOB_RECURSE GANCC_LOCAL_HEADERS "gancc/src/*.h")
file(GLOB_RECURSE HEADERS "include/*.h")
add_executable(gancc ${GANCC_SOURCES} ${GANCC_LOCAL_HEADERS} ${GANCC_HEADERS} ${BISON_lang_parser_OUTPUTS} ${FLEX_lang_scanner_OUTPUTS})
require_c_standard(gancc 99)
check_and_add_header(gancc getopt.h HAVE_GETOPT_H)
check_and_add_header(gancc unistd.h HAVE_UNISTD_H)
target_include_directories(gancc PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/)
target_include_directories(gancc PRIVATE gancc/include/)
target_link_libraries(gancc PRIVATE common)
install(TARGETS gancpp gancc DESTINATION ${CMAKE_INSTALL_PREFIX})