-
Notifications
You must be signed in to change notification settings - Fork 1k
/
Copy pathCMakeLists.txt
90 lines (72 loc) · 3.85 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
cmake_minimum_required(VERSION 3.5)
# set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(PJNAME bcjh)
project(${PJNAME})
include_directories(src/include)
# Add debug definitions
string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
if(uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
add_definitions(-D_DEBUG)
endif()
message(STATUS "operation system is ${CMAKE_SYSTEM_NAME}")
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++20")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:gbk>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/W3>")
message(STATUS "Now is windows")
elseif(CMAKE_SYSTEM_NAME MATCHES "Emscripten")
# Doesn't work on Windows: I don't know how to specify the charset.
# If I use utf8, running on windows would be cause error C2001 etc;
# If I use utf8 with BOM, there would be extra # before some file and invoke error.
# add_compile_options("-pthread")
# add_compile_options("-sNO_DISABLE_EXCEPTION_CATCHING")
message(STATUS "Now is Emscripten")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
add_definitions(-DEMSCRIPTEN)
add_definitions(-DNOJIT) # EMS doesn't really work with SSE2, even with proper headers and flags?
add_definitions(-Dunix)
add_definitions()
# add_compile_options("-fwasm-exceptions")
# add_compile_options("-fsanitize=address")
execute_process(COMMAND bash assets/removeSpaces.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
message(STATUS "Spaces and newlines in data.min.json have been removed.")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Wall -Wextra -Wno-reorder -Wno-unused-parameter")
# add_definitions(-DNOJIT) # EMS doesn't really work with SSE2?
endif()
file(GLOB src_list_cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/*/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/include/*/*.c
${CMAKE_CURRENT_SOURCE_DIR}/src/include/*/*.cpp
)
set(src_EMSCRIPTEN ${src_list_cpp})
list(REMOVE_ITEM src_EMSCRIPTEN ${CMAKE_CURRENT_SOURCE_DIR}/src/bcjh_js_cpp.cpp)
list(REMOVE_ITEM src_EMSCRIPTEN ${CMAKE_CURRENT_SOURCE_DIR}/src/bcjh_win.cpp)
set(src_WINDOWS ${src_list_cpp})
list(REMOVE_ITEM src_WINDOWS ${CMAKE_CURRENT_SOURCE_DIR}/src/bcjh_js_cpp.cpp)
list(REMOVE_ITEM src_WINDOWS ${CMAKE_CURRENT_SOURCE_DIR}/src/bcjh_js.cpp)
set(src_LINUX ${src_list_cpp})
list(REMOVE_ITEM src_LINUX ${CMAKE_CURRENT_SOURCE_DIR}/src/bcjh_win.cpp)
message(STATUS "target name is ${PJNAME}")
message(STATUS "src_list_cpp is ${src_list_cpp}")
if (CMAKE_SYSTEM_NAME MATCHES "Emscripten")
# set multithread make
set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} -j$(nproc)")
set(target_name ${PJNAME})
add_executable(${target_name} ${src_EMSCRIPTEN})
set_target_properties(${target_name} PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/data/data.min.json)
set_target_properties(${target_name} PROPERTIES LINK_FLAGS "--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/data/data.min.json@./data.min.json -lembind -sALLOW_MEMORY_GROWTH -sEXPORTED_RUNTIME_METHODS=run -sSTACK_SIZE=512kb") #512k for zpaq
# Add -O0 and -fexceptions to LINK_FLAGS when -DCMAKE_BUILD_TYPE=Debug; ow. -O3
set_target_properties(${target_name} PROPERTIES LINK_FLAGS_DEBUG "-O0 -fexceptions -fwasm-exceptions")
set_target_properties(${target_name} PROPERTIES LINK_FLAGS_RELEASE "-O3")
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
add_executable(${PJNAME} ${src_WINDOWS})
else()
add_executable(${PJNAME} ${src_LINUX})
set(target_WINDOWS ${PJNAME}_win)
add_executable(${target_WINDOWS} ${src_WINDOWS})
set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} -j$(nproc)")
endif()