-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
213 lines (177 loc) · 6.77 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
cmake_minimum_required(VERSION 3.8)
cmake_policy(SET CMP0057 NEW) # Enable IN_LIST operator
cmake_policy(SET CMP0064 NEW) # Support if (TEST) operator
IF (POLICY CMP0042)
CMAKE_POLICY(SET CMP0042 NEW)
ENDIF ()
project(moscc)
#set(CMAKE_CXX_STANDARD 99)
#set(CMAKE_C_STANDARD 99)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Os -g")
set(CMAKE_C_FLAGS "-Wall -Wextra")
set(CMAKE_C_FLAGS_RELEASE "-O3")
set(CMAKE_C_FLAGS_MINSIZEREL "-Os")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os -g")
set(MSC_SOURCE_FILES)
set(MSC_INCLUDE_DIRS)
set(MSC_FLAGS)
set(MSC_DEPS)
set(MSC_DEFS)
set(LINK_OPTIONS)
# Utility function which will only add compiler flags if supported
INCLUDE(CheckCCompilerFlag)
FUNCTION(ADD_FLAG_IF_SUPPORTED container flag)
CHECK_C_COMPILER_FLAG(${flag} _flag_supported)
IF (_flag_supported)
# NOTE: Can't use LIST(APPEND...) here because it doesn't support
# PARENT_SCOPE:
# http://stackoverflow.com/a/10032337
SET(${container} ${${container}} ${flag} PARENT_SCOPE)
ENDIF ()
ENDFUNCTION()
file(GLOB SOURCE_FILES_C src/**/*.c)
file(GLOB SOURCE_FILES_H src/**/*.h)
file(GLOB SOURCE_FILES_INC src/**/*.inc)
LIST(APPEND MSC_SOURCE_FILES ${SOURCE_FILES_C} ${SOURCE_FILES_H} ${SOURCE_FILES_INC})
LIST(APPEND MSC_INCLUDE_DIRS
src/cli
src/packages
)
#include mosc dependancy
LIST(APPEND MSC_INCLUDE_DIRS
deps/mosc/api
deps/mosc/src/builtin
deps/mosc/src/common
deps/mosc/src/compiler
deps/mosc/src/helpers
deps/mosc/src/memory
deps/mosc/src/meta
deps/mosc/src/runtime
)
file(GLOB SOURCE_FILES_C deps/mosc/src/**/*.c)
file(GLOB SOURCE_FILES_H deps/mosc/src/**/*.h)
file(GLOB SOURCE_FILES_INC deps/mosc/src/**/*.inc)
LIST(APPEND MSC_SOURCE_FILES ${SOURCE_FILES_C} ${SOURCE_FILES_H} ${SOURCE_FILES_INC})
LIST(APPEND MSC_SOURCE_FILES deps/mosc/api/msc.h)
#include nafamaw dependancy
LIST(APPEND MSC_INCLUDE_DIRS
deps/nafamaw
deps/nafamaw/vendors
deps/nafamaw/packages
)
file(GLOB SOURCE_FILES_C deps/nafamaw/**/*.c)
file(GLOB SOURCE_FILES_H deps/nafamaw/**/*.h)
file(GLOB SOURCE_FILES_INC deps/nafamaw/**/*.inc)
LIST(APPEND MSC_SOURCE_FILES ${SOURCE_FILES_C} ${SOURCE_FILES_H} ${SOURCE_FILES_INC})
LIST(APPEND MSC_SOURCE_FILES deps/nafamaw/nafamaw.c deps/nafamaw/nafamaw.h)
#include libuv dependancy
# include_directories(deps/libuv/include deps/libuv/src)
file(GLOB SOURCE_FILES_H deps/libuv/include/**.h)
file(GLOB SOURCE_FILES_C deps/libuv/src/*.c)
file(GLOB SOURCE_FILES_CH deps/libuv/src/*.h)
#LIST(APPEND MSC_SOURCE_FILES ${SOURCE_FILES_H})
#LIST(APPEND MSC_SOURCE_FILES ${SOURCE_FILES_C})
LIST(APPEND MSC_SOURCE_FILES ${SOURCE_FILES_C})
LIST(APPEND MSC_INCLUDE_DIRS deps/libuv/include deps/libuv/src)
if (UNIX AND NOT APPLE)
set(LINUX TRUE)
endif ()
IF (CMAKE_SYSTEM_NAME STREQUAL "Windows")
LIST(APPEND MSC_DEFS WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0600)
LIST(APPEND MSC_INCLUDE_DIRS
deps/libuv/src/win
)
LIST(APPEND MSC_DEPS imm32 winmm version wldap32 ws2_32 psapi iphlpapi userenv)
LIST(APPEND MSC_SOURCE_FILES
deps/libuv/src/win/*.h
deps/libuv/src/win/*.c
)
ELSE ()
ADD_FLAG_IF_SUPPORTED(MSC_FLAGS -fvisibility=hidden)
ADD_FLAG_IF_SUPPORTED(MSC_FLAGS -std=gnu89)
ADD_FLAG_IF_SUPPORTED(MSC_FLAGS -pedantic)
ADD_FLAG_IF_SUPPORTED(MSC_FLAGS -Wall)
ADD_FLAG_IF_SUPPORTED(MSC_FLAGS -Wextra)
ADD_FLAG_IF_SUPPORTED(MSC_FLAGS -Wno-unused-parameter)
LIST(APPEND MSC_DEFS
_LARGEFILE_SOURCE
_FILE_OFFSET_BITS=64
)
LIST(APPEND MSC_SOURCE_FILES
deps/libuv/src/unix/async.c
deps/libuv/src/unix/core.c
deps/libuv/src/unix/dl.c
deps/libuv/src/unix/fs.c
deps/libuv/src/unix/getaddrinfo.c
deps/libuv/src/unix/getnameinfo.c
deps/libuv/src/unix/loop-watcher.c
deps/libuv/src/unix/loop.c
deps/libuv/src/unix/pipe.c
deps/libuv/src/unix/poll.c
deps/libuv/src/unix/process.c
deps/libuv/src/unix/random-devurandom.c
deps/libuv/src/unix/signal.c
deps/libuv/src/unix/stream.c
deps/libuv/src/unix/tcp.c
deps/libuv/src/unix/thread.c
deps/libuv/src/unix/tty.c
deps/libuv/src/unix/udp.c)
LIST(APPEND MSC_INCLUDE_DIRS deps/libuv/src/unix)
FIND_PACKAGE(Threads REQUIRED)
LIST(APPEND MSC_DEPS ${CMAKE_THREAD_LIBS_INIT})
IF (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
LIST(APPEND MSC_DEPS
dl)
LIST(APPEND MSC_DEFS
_DARWIN_USE_64_BIT_INODE=1
_DARWIN_UNLIMITED_SELECT=1
)
LIST(APPEND MSC_SOURCE_FILES
deps/libuv/src/unix/bsd-ifaddrs.c
deps/libuv/src/unix/darwin.c
deps/libuv/src/unix/darwin-proctitle.c
deps/libuv/src/unix/fsevents.c
deps/libuv/src/unix/kqueue.c
deps/libuv/src/unix/proctitle.c
deps/libuv/src/unix/random-getentropy.c)
ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Linux")
LIST(APPEND MSC_DEFS _GNU_SOURCE _POSIX_C_SOURCE=200112)
LIST(APPEND MSC_DEPS pthread dl m rt)
LIST(APPEND MSC_SOURCE_FILES
deps/libuv/src/unix/linux-core.c
deps/libuv/src/unix/linux-inotify.c
deps/libuv/src/unix/linux-syscalls.c
deps/libuv/src/unix/procfs-exepath.c
deps/libuv/src/unix/proctitle.c
deps/libuv/src/unix/random-getrandom.c
deps/libuv/src/unix/random-sysctl-linux.c
deps/libuv/src/unix/epoll.c
)
ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
LIST(APPEND MSC_DEPS pthread dl m rt)
LIST(APPEND MSC_SOURCE_FILES
deps/libuv/src/unix/bsd-ifaddrs.c
deps/libuv/src/unix/bsd-proctitle.c
deps/libuv/src/unix/freebsd.c
deps/libuv/src/unix/kqueue.c
deps/libuv/src/unix/posix-hrtime.c
deps/libuv/src/unix/random-getrandom.c)
ENDIF ()
ENDIF ()
ADD_EXECUTABLE(moscc ${MSC_SOURCE_FILES})
TARGET_COMPILE_DEFINITIONS(moscc PRIVATE ${MSC_DEFS})
TARGET_INCLUDE_DIRECTORIES(moscc PUBLIC ${MSC_INCLUDE_DIRS})
SET_PROPERTY(TARGET moscc PROPERTY C_STANDARD 99)
# TARGET_LINK_OPTIONS(moscc PRIVATE ${LINK_OPTIONS})
TARGET_COMPILE_OPTIONS(moscc PRIVATE ${MSC_FLAGS})
TARGET_LINK_LIBRARIES(moscc PRIVATE ${MSC_DEPS})
if(CMAKE_BUILD_TYPE STREQUAL Debug)
set_target_properties(moscc PROPERTIES SUFFIX "_d")
endif()