-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
159 lines (133 loc) · 6.93 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
cmake_minimum_required (VERSION 3.4)
set(CMAKE_CXX_STANDARD 17)
#set(CMAKE_HOST_SYSTEM "Windows-10.0.18362")
set(CMAKE_HOST_SYSTEM "Windows-10.0.19041")
project(LED-Audio-Server)
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES Debug Release)
endif()
project("LED-Audio-Server${BITS}")
set(OP_PLATFORM "windows")
message(STATUS "Windows SDK target ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
# Configure global paths
# Options
option(OP_FINAL_BUILD "Final release build" OFF)
option(OP_BUILD_EXPERIMENTAL "Build experimental projects" OFF)
option(OP_INCLUDE_VERSION "Include autogenerated version number" OFF)
set(OP_BINARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/../bin" CACHE STRING "VS post build output directory")
option(OP_NO_MAIN_PROJECT "Do not compile main project" OFF)
option(OP_NO_LAUNCHER "Do not compile launcher" OFF)
# Precompiled headers
MACRO(ADD_MSVC_PRECOMPILED_HEADER PrecompiledHeader PrecompiledSource SourcesVar)
IF(MSVC)
GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE)
SET(PrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/${PrecompiledBasename}.pch")
#SET(Sources ${${SourcesVar}})
IF(${SourcesVar})
#SET(Sources ${SourcesVar})
#SET(Sources "a" "b")
LIST(APPEND Sources ${${SourcesVar}})
#MESSAGE( STATUS ${Sources} )
LIST(FILTER Sources INCLUDE REGEX cpp$)
#MESSAGE( STATUS ${${Sources}} )
SET(Sources ${Sources})
SET_SOURCE_FILES_PROPERTIES(${Sources}
PROPERTIES COMPILE_FLAGS "/Yu\"${PrecompiledHeader}\" /FI\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
OBJECT_DEPENDS "${PrecompiledBinary}")
#MESSAGE( STATUS ${Sources} )
ENDIF()
SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource}
PROPERTIES COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
OBJECT_OUTPUTS "${PrecompiledBinary}")
# Add precompiled header to SourcesVar
LIST(APPEND ${SourcesVar} ${PrecompiledSource})
ENDIF()
ENDMACRO()
# Visual Studio filters
FUNCTION(ADD_SOURCE_DIRS SourcesVar)
#foreach(source IN LISTS ${SourcesVar})
# MESSAGE( STATUS ${source} )
#endforeach()
foreach(source IN LISTS ${SourcesVar})
get_filename_component(source_path "${source}" PATH)
if (source_path STREQUAL "")
else (source_path STREQUAL "")
string(FIND ${source_path} "include" foundInclude REVERSE)
string(FIND ${source_path} "src" foundSrc REVERSE)
string(FIND ${source_path} "thirdparty" foundThirdparty)
if (foundInclude GREATER 0)
string(SUBSTRING ${source_path} ${foundInclude} -1 source_path)
endif ()
if (foundSrc GREATER 0)
string(SUBSTRING ${source_path} ${foundSrc} -1 source_path)
endif ()
if (foundThirdparty GREATER 0)
string(SUBSTRING ${source_path} ${foundThirdparty} -1 source_path)
endif ()
string(REPLACE "/" "\\" source_path_msvc "${source_path}")
string(REPLACE "include" "Header Files" source_path_msvc "${source_path_msvc}")
string(REPLACE "src" "Source Files" source_path_msvc "${source_path_msvc}")
source_group("${source_path_msvc}" FILES "${source}")
endif (source_path STREQUAL "")
endforeach()
ENDFUNCTION()
# Copy output directory
MACRO(ADD_TARGET_OUTPUT_DIR projoutputname subdirectory)
add_custom_command(TARGET ${projoutputname}
POST_BUILD
COMMAND xcopy /Y \"$(OutputPath)$(TargetFileName)\" \"${OP_BINARY_OUTPUT_DIRECTORY}${subdirectory}\"\n
if exist \"$(OutputPath)$(TargetName).pdb\" xcopy /Y \"$(OutputPath)$(TargetName).pdb\" \"${OP_BINARY_OUTPUT_DIRECTORY}${subdirectory}\"
)
ENDMACRO()
MACRO(ADD_TARGET_OUTPUT projoutputname)
ADD_TARGET_OUTPUT_DIR(${projoutputname} "")
ENDMACRO()
add_definitions(-DPLATFORM_WINDOWS)
add_definitions(-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB)
add_definitions(-DUNICODE -D_UNICODE)
add_definitions(-DPSAPI_VERSION=1) # https://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx
add_definitions(-DGLM_ENABLE_EXPERIMENTAL)
if ("${BITS}" EQUAL "64")
add_definitions(-DWIN64)
add_definitions(-DPLATFORM_X64)
endif()
if ("${BITS}" EQUAL "32")
set(CMAKE_CXX_FLAGS_RELEASE "/MP32 /MT /GF /GR- /Gy /Oi /O2 /Ot /Zi /GL /arch:SSE2 /GS- /std:c++17 ") # /fp:fast
else ("${BITS}" EQUAL "32")
set(CMAKE_CXX_FLAGS_RELEASE "/MP32 /MT /GF /GR- /Gy /Oi /O2 /Ot /Zi /GL /GS- /std:c++17 ") # /fp:fast
endif()
#set(CMAKE_CXX_FLAGS_MINSIZEREL "/MD /GF /GR- /Gy /Oi /O2 /Zi")
set(CMAKE_CXX_FLAGS_DEBUG "/MP32 /MTd /GR- /Od /Zi /RTC1 /arch:SSE2 /std:c++17 ")
#set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "Flags used by the compiler during all build types (Forced version)." FORCE)
set(CMAKE_C_FLAGS_RELEASE "/MP32 /MT /GF /GR- /Gy /Oi /O2 /Ot /Zi /GL /arch:SSE2 /GS- /std:c++17 ") # /fp:fast
#set(CMAKE_CXX_FLAGS_MINSIZEREL "/MD /GF /GR- /Gy /Oi /O2 /Zi")
set(CMAKE_C_FLAGS_DEBUG "/MP32 /MTd /GR- /Od /Zi /RTC1 /arch:SSE2 /std:c++17 ")
#set(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} CACHE STRING "Flags used by the compiler during all build types (Forced version)." FORCE)
# needed for address sanitizer
# set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO")
# set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO")
# set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO /NODEFAULTLIB:libucrtd")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /INCREMENTAL:NO /DEBUG /LTCG")
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /INCREMENTAL:NO /LTCG")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /INCREMENTAL:NO /DEBUG /LTCG")
#set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /DEBUG")
#set(CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL "${CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL}")
#set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /DEBUG")
string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
#set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /fsanitize=address ")
#set(CMAKE_EXE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG} CACHE STRING "Flags used by the compiler during all build types (Forced version)." FORCE)
# set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} libcmt.lib")
# 4996 deprecated API
# 4530 exception handler used, but unwind semantics are not enabled
# 4577 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed
# 4091 'keyword' : ignored on left of 'type' when no variable is declared
# 4351 new behavior: elements of array '' will be default initialized
# 4838 conversion from 'const uint32' to 'const float' requires a narrowing conversion
# PROMOTE 4715 not all control paths return value
# 26444 local var without name
# 26812 unscoped enum
set(CMAKE_CXX_FLAGS "/wd4996 /wd4530 /wd4577 /wd4091 /wd4351 /wd4838 /we4715 /wd26444 /wd26812")
# static libraries
add_subdirectory(ffts)
add_subdirectory(server)