2 cmake_minimum_required(VERSION 3.9)
6 set(TIM41_USE_AVX2 FALSE CACHE BOOL "Enable use of Intel AVX2 enhanced instructions")
8 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
9 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
10 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/bin")
11 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/bin")
13 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
14 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
15 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/bin")
16 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/bin")
18 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
19 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
20 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/bin")
21 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/bin")
25 if("${Git_FOUND}" AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
28 COMMAND "${CMAKE_COMMAND}"
29 -DGIT_EXECUTABLE="${GIT_EXECUTABLE}"
30 -DINFILE="${CMAKE_CURRENT_SOURCE_DIR}/version.h.in"
31 -DOUTFILE="${CMAKE_CURRENT_BINARY_DIR}/version.h"
32 -P "${CMAKE_CURRENT_SOURCE_DIR}/WriteVersion.cmake"
33 BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/version.h"
34 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
35 COMMENT "Updating version info..."
38 set(tim41VersionStr "current")
39 set(tim41Version4Comma "41,0,0,0")
40 configure_file(version.h.in version.h)
44 COMMAND "${CMAKE_COMMAND}" -E echo "automatic version detection is not available"
48 include_directories("${CMAKE_CURRENT_BINARY_DIR}")
81 -DTIMW32G_USE_NEW_CONSOLE
100 -D_CRT_SECURE_NO_WARNINGS
104 TIMIDITY_FE_DEFINITIONS
125 -DVORBIS_DLL_INCLUDE_VORBISENC
126 -DVORBIS_DLL_INCLUDE_VORBISFILE
148 add_definitions(-DUSE_AVX2)
150 add_definitions(-DUSE_SSE42)
154 # remove existing /W3 options
155 string(REGEX REPLACE "/W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
156 string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
158 add_compile_options(/W4 /Zi /GS /fp:fast)
160 if(NOT ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang"))
161 add_compile_options(/Qspectre)
164 add_compile_options(/we4013) # '%s' undefined; assuming extern returning int
165 add_compile_options(/we4133) # 'function': incompatible types - from '%s' to '%s'
168 add_compile_options(/arch:AVX2)
170 if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
171 add_compile_options(-msse4.2)
175 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /std:c++17")
177 if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
178 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto=thin")
179 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto=thin")
181 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL /guard:cf")
182 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL /guard:cf")
185 if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
186 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG")
187 set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG")
189 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /DEBUG")
190 set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /DEBUG")
192 set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG")
193 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG")
195 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
196 set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
198 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
199 set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
200 set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG:incremental")
202 set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
203 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
210 add_compile_options(-Wall -Wextra -Wno-missing-braces -ffast-math)
213 add_compile_options(-mavx2 -mfma)
215 add_compile_options(-msse4.2)
218 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
219 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
220 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
221 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s")
222 set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -s")
223 set(CMAKE_RC_FLAGS "-O coff")
226 function(DisableMSManifest targetName)
228 get_property(linkFlags TARGET ${targetName} PROPERTY LINK_FLAGS)
229 set_target_properties(${targetName} PROPERTIES LINK_FLAGS "${linkFlags} /MANIFEST:NO")
255 add_subdirectory(FLAC)
256 add_subdirectory(lame)
257 add_subdirectory(libmpg123)
258 add_subdirectory(ogg)
259 add_subdirectory(opus)
260 add_subdirectory(pdcurses)
261 add_subdirectory(portaudio)
262 add_subdirectory(portmidi)
263 add_subdirectory(speex)
264 add_subdirectory(vorbis)
266 add_subdirectory(cfgforsf)
267 add_subdirectory(interface)
268 add_subdirectory(libarc)
269 add_subdirectory(libunimod)
270 add_subdirectory(sf_view_gui)
271 add_subdirectory(timidity)
272 add_subdirectory(twsyn_bridge)
273 add_subdirectory(utils)