2 cmake_minimum_required(VERSION 3.9)
6 set(TIM41_USE_AVX2 FALSE CACHE BOOL "Enable use of Intel AVX2 enhanced instructions")
7 set(TIM41_SPECTRE_MITIGATION FALSE CACHE BOOL "Enable Spectre mitigation")
9 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
10 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
11 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/bin")
12 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/bin")
14 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
15 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
16 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/bin")
17 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/bin")
19 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
20 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
21 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/bin")
22 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/bin")
26 if("${Git_FOUND}" AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
29 COMMAND "${CMAKE_COMMAND}"
30 -DGIT_EXECUTABLE="${GIT_EXECUTABLE}"
31 -DINFILE="${CMAKE_CURRENT_SOURCE_DIR}/version.h.in"
32 -DOUTFILE="${CMAKE_CURRENT_BINARY_DIR}/version.h"
33 -P "${CMAKE_CURRENT_SOURCE_DIR}/WriteVersion.cmake"
34 BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/version.h"
35 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
36 COMMENT "Updating version info..."
39 set(tim41VersionStr "current")
40 set(tim41Version4Comma "41,0,0,0")
41 configure_file(version.h.in version.h)
45 COMMAND "${CMAKE_COMMAND}" -E echo "automatic version detection is not available"
49 include_directories("${CMAKE_CURRENT_BINARY_DIR}")
82 -DTIMW32G_USE_NEW_CONSOLE
101 -D_CRT_SECURE_NO_WARNINGS
102 -D_CRT_NONSTDC_NO_DEPRECATE
106 TIMIDITY_FE_DEFINITIONS
114 -DSNDFNT_INITFILE_NAME="soundfont.ini"
128 # -DVORBIS_DLL_INCLUDE_VORBISENC
129 # -DVORBIS_DLL_INCLUDE_VORBISFILE
150 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
151 add_definitions(-DVST_LIBRARY_NAME="timvstwrap_x64.dll")
153 add_definitions(-DVST_LIBRARY_NAME="timvstwrap.dll")
157 add_definitions(-DUSE_AVX2)
159 add_definitions(-DUSE_SSE42)
163 # remove existing /W3 options
164 string(REGEX REPLACE "/W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
165 string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
167 add_compile_options(/W4 /GS /fp:fast)
169 if("${TIM41_SPECTRE_MITIGATION}")
170 add_compile_options(/Qspectre)
173 add_compile_options(/we4013) # '%s' undefined; assuming extern returning int
174 add_compile_options(/we4028) # formal parameter %d different from declaration
175 add_compile_options(/we4133) # 'function': incompatible types - from '%s' to '%s'
178 add_compile_options(/arch:AVX2)
180 if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
181 add_compile_options(-msse4.2)
185 string(APPEND CMAKE_CXX_FLAGS " /EHsc /std:c++17")
186 string(APPEND CMAKE_C_FLAGS_RELEASE " /Zi /guard:cf")
187 string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Zi /guard:cf")
189 if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
190 string(APPEND CMAKE_C_FLAGS_RELEASE " -flto=thin")
191 string(APPEND CMAKE_CXX_FLAGS_RELEASE " -flto=thin")
193 string(APPEND CMAKE_C_FLAGS_RELEASE " /GL")
194 string(APPEND CMAKE_CXX_FLAGS_RELEASE " /GL")
196 if ("${CMAKE_C_COMPILER_VERSION}" VERSION_GREATER_EQUAL "19.20")
197 string(REGEX REPLACE "/Ob[0-2]" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
198 string(REGEX REPLACE "/Ob[0-2]" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
199 string(APPEND CMAKE_C_FLAGS_RELEASE " /Ob3")
200 string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Ob3")
204 if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
205 string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /DEBUG")
206 string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG " /DEBUG")
208 string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /DEBUG /GUARD:CF")
209 string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /DEBUG /GUARD:CF")
211 string(APPEND CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG")
212 string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG")
214 string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /DEBUG:FASTLINK")
215 string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG " /DEBUG:FASTLINK")
217 string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
218 string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
219 string(APPEND CMAKE_STATIC_LINKER_FLAGS_RELEASE " /LTCG:incremental")
221 string(APPEND CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG:FASTLINK")
222 string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG:FASTLINK")
225 string(APPEND CMAKE_RC_FLAGS " /nologo")
231 add_compile_options(-Wall -Wextra -Wno-missing-braces -ffast-math)
234 add_compile_options(-mavx2 -mfma)
236 add_compile_options(-msse4.2)
239 string(APPEND CMAKE_CXX_FLAGS " -std=c++17")
240 string(APPEND CMAKE_C_FLAGS_RELEASE " -flto")
241 string(APPEND CMAKE_CXX_FLAGS_RELEASE " -flto")
242 string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " -s")
243 string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " -s")
244 string(APPEND CMAKE_RC_FLAGS " -O coff")
247 function(DisableMSManifest targetName)
249 get_property(linkFlags TARGET ${targetName} PROPERTY LINK_FLAGS)
250 set_target_properties(${targetName} PROPERTIES LINK_FLAGS "${linkFlags} /MANIFEST:NO")
276 add_subdirectory(FLAC)
277 add_subdirectory(lame)
278 add_subdirectory(libmpg123)
279 add_subdirectory(ogg)
280 add_subdirectory(opus)
281 add_subdirectory(pdcurses)
282 add_subdirectory(portaudio)
283 add_subdirectory(portmidi)
284 add_subdirectory(speex)
285 add_subdirectory(vorbis)
287 add_subdirectory(cfgforsf)
288 add_subdirectory(interface)
289 add_subdirectory(libarc)
290 add_subdirectory(libunimod)
291 add_subdirectory(sf_view_gui)
292 add_subdirectory(timidity)
293 add_subdirectory(twsyn_bridge)
294 add_subdirectory(utils)