-
Notifications
You must be signed in to change notification settings - Fork 1
/
CMakeLists.txt
106 lines (94 loc) · 2.94 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
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
set (BCC_TARGET "bcc")
set (BCC_VERSION "0.2.0")
set (BCC_SOURCES
src/emitc.c
src/emit_rust.c
src/main.c
src/comp.c
src/debugger.c
src/interp.c
src/opt-nloops.c
src/opt-sloops.c
src/opt-squash.c
src/parser.c
src/prepare.c
src/status.c
src/terminfo.c
src/util.c
src/warn.c
)
set (BCC_LINK_LIBRARIES
${BCC_LINK_LIBRARIES}
ncurses
)
set (BCC_INCLUDE_DIRECTORIES
include
include/ccommon
)
set (CMAKE_C_STANDARD 99)
set (CMAKE_C_STANDARD_REQUIRED True)
project (${BCC_TARGET} VERSION ${BCC_VERSION} LANGUAGES C)
message ("-- Building ${BCC_TARGET} version ${BCC_VERSION}")
message (" System: ${CMAKE_SYSTEM}")
message (" C compiler: ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
execute_process (COMMAND date "+%Y-%m-%d %H%M"
OUTPUT_VARIABLE BUILDDATE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_executable (${BCC_TARGET} ${BCC_SOURCES})
target_link_libraries (${BCC_TARGET} ${BCC_LINK_LIBRARIES})
find_package (Curses REQUIRED)
target_include_directories (${BCC_TARGET} PUBLIC
${CURSES_INCLUDE_DIR}
./include
./include/ccommon
./src
)
include (CheckCCompilerFlag)
check_c_compiler_flag("-Wimplicit-fallthrough=2" HAS_IMPLICIT_FALLTHROUGH)
if (HAS_IMPLICIT_FALLTHROUGH)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-fallthrough=2")
endif()
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -fdiagnostics-color=auto \
-fmax-errors=32 -Wall -Wpedantic -Wextra -Wold-style-definition \
-Wmissing-prototypes -Winit-self -Wfloat-equal -Wstrict-prototypes \
-Wredundant-decls -Wendif-labels -Wstrict-aliasing=2 -Woverflow -Wformat=2 \
-Wmissing-include-dirs -Wno-trigraphs -Wno-format-nonliteral")
# unset this for non-fancy spinners
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSPINNER_FANCY")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBUILDDATE=\"\\\"${BUILDDATE}\\\"\"")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DVERSION=\\\"${BCC_VERSION}\\\"")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMEMTYPE=u8")
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -march=native")
set (CMAKE_EXE_LINKER_FLAGS_RELEASE
"${CMAKE_EXE_LINKER_FLAGS_RELEASE} -flto -s")
# --- manpage ---
find_program(SCDOC NAMES scdoc)
set (MAN_NAMES bcc.1 brainfuck.7)
set (MAN_FILES)
foreach(MAN IN LISTS MAN_NAMES)
set (MDEST ${CMAKE_BINARY_DIR}/${MAN})
set (MSRC ${CMAKE_SOURCE_DIR}/docs/${MAN}.scd)
add_custom_command (
OUTPUT ${MDEST}
COMMAND ${SCDOC} < ${MSRC} > ${MDEST}
DEPENDS ${MSRC}
COMMENT "Building manpage ${MDEST}"
VERBATIM
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
list (APPEND MAN_FILES ${MDEST})
endforeach()
add_custom_target (man ALL DEPENDS ${MAN_FILES})
install (TARGETS ${BCC_TARGET} DESTINATION bin)
install (
FILES "${CMAKE_BINARY_DIR}/brainfuck.7"
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man7"
)
install (
FILES "${CMAKE_BINARY_DIR}/bcc.1"
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1"
)