-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
114 lines (86 loc) · 3.16 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
# ------------------------------------------------------------------------------
# CMakeLists.txt (Root)
# ------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.15)
project(hook
DESCRIPTION "The Hook Programming Language"
VERSION 0.1.0
LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(BINARY_DIR "${CMAKE_BINARY_DIR}/../bin")
set(LIBRARY_DIR "${CMAKE_BINARY_DIR}/../lib")
set(PACKAGE_DIR "${CMAKE_BINARY_DIR}/../package")
include_directories(/usr/local/include)
include_directories(include)
link_directories(/usr/local/lib)
if(MSVC)
add_compile_options(/W4)
endif()
if(NOT MSVC)
add_compile_options(-Wall -Wextra -Wpedantic)
add_compile_options("$<$<CONFIG:Debug>:-fsanitize=address>")
add_compile_options("$<$<CONFIG:Debug>:-fprofile-arcs>")
add_compile_options("$<$<CONFIG:Debug>:-ftest-coverage>")
add_link_options("$<$<CONFIG:Debug>:-fsanitize=address>")
add_link_options("$<$<CONFIG:Debug>:-fprofile-arcs>")
add_link_options("$<$<CONFIG:Debug>:-ftest-coverage>")
endif()
# ------------------------------------------------------------------------------
# Libraries, CLI, Core Modules, and Extensions
# ------------------------------------------------------------------------------
set(STATIC_LIB_TARGET "static_lib")
set(SHARED_LIB_TARGET "shared_lib")
add_subdirectory(src)
add_subdirectory(cli)
add_subdirectory(core)
if(BUILD_EXTENSIONS)
message("Building with extensions")
add_subdirectory(extensions)
endif()
# ------------------------------------------------------------------------------
# Pack and Install
# ------------------------------------------------------------------------------
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
set(FORMAT TGZ)
set(CPACK_GENERATOR ${FORMAT})
set(CPACK_SOURCE_GENERATOR ${FORMAT})
set(CPACK_OUTPUT_FILE_PREFIX ${PACKAGE_DIR})
set(CPACK_PACKAGE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
string(TOLOWER ${PROJECT_NAME} project)
string(TOLOWER ${CMAKE_SYSTEM_NAME} os)
string(TOLOWER ${CMAKE_HOST_SYSTEM_PROCESSOR} arch)
if(${os} STREQUAL "darwin")
set(os "macos")
endif()
if(${arch} MATCHES "^(x86_64|amd64)$")
set(arch "x64")
elseif(${arch} MATCHES "^(i386|i586|i686|i786|i886)$")
set(arch "x86")
elseif(${arch} MATCHES "^(aarch64|armv8)$")
set(arch "arm64")
endif()
set(CPACK_PACKAGE_FILE_NAME "${project}-${PROJECT_VERSION}-${os}-${arch}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${project}-${PROJECT_VERSION}")
file(READ ${CMAKE_CURRENT_LIST_DIR}/.cpack_ignore cpack_ignore)
string(REGEX REPLACE "\n" ";" cpack_ignore ${cpack_ignore})
set(CPACK_SOURCE_IGNORE_FILES "${cpack_ignore}")
if(MSVC)
set(EXECUTABLE "${PROJECT_NAME}.exe")
endif()
if(NOT MSVC)
set(EXECUTABLE ${PROJECT_NAME})
endif()
install(
FILES "bin/${EXECUTABLE}"
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ
WORLD_EXECUTE WORLD_READ
DESTINATION bin
)
install(DIRECTORY examples/ DESTINATION examples)
install(DIRECTORY include/ DESTINATION include)
install(DIRECTORY lib/ DESTINATION lib)
install(FILES LICENSE README.md DESTINATION docs)
include(CPack)