project(timidity41)
-set(TIM41_USE_AVX2 FALSE CACHE BOOL "Enable use of Intel AVX2 enhanced instructions")
+set(TIM41_X86_SIMD_LEVEL SSE42 CACHE STRING "x86 SIMD instruction set extension to use")
+set_property(CACHE TIM41_X86_SIMD_LEVEL PROPERTY STRINGS SSE2 SSE42 AVX AVX2 AVX512)
+
+set(TIM41_SPECTRE_MITIGATION FALSE CACHE BOOL "Enable Spectre mitigation")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
# MSVCRT
-D_CRT_SECURE_NO_WARNINGS
+ -D_CRT_NONSTDC_NO_DEPRECATE
)
set(
-DHAVE_LIBMPG123
-DENABLE_SFZ
-DENABLE_DLS
+ -DENABLE_ECW
-DSNDFNT_INITFILE_NAME="soundfont.ini"
# TiMidity++ audio
-DAU_GOGO_DLL
-DAU_VORBIS
-DAU_VORBIS_DLL
- -DVORBIS_DLL_INCLUDE_VORBISENC
- -DVORBIS_DLL_INCLUDE_VORBISFILE
+ # -DVORBIS_DLL_INCLUDE_VORBISENC
+ # -DVORBIS_DLL_INCLUDE_VORBISFILE
-DAU_FLAC
-DAU_FLAC_DLL
-DAU_OGGFLAC
add_definitions(-DVST_LIBRARY_NAME="timvstwrap.dll")
endif()
-if(TIM41_USE_AVX2)
+if("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX512")
+ add_definitions(-DUSE_AVX512)
+elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX2")
add_definitions(-DUSE_AVX2)
-else()
+elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX")
+ add_definitions(-DUSE_AVX)
+elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "SSE42")
add_definitions(-DUSE_SSE42)
+elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "SSE2")
+ add_definitions(-DUSE_SSE2)
endif()
if(MSVC)
string(REGEX REPLACE "/W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- add_compile_options(/W4 /Zi /GS /fp:fast)
+ add_compile_options(/W4 /GS /fp:fast)
- if(NOT ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang"))
+ if("${TIM41_SPECTRE_MITIGATION}")
add_compile_options(/Qspectre)
endif()
add_compile_options(/we4028) # formal parameter %d different from declaration
add_compile_options(/we4133) # 'function': incompatible types - from '%s' to '%s'
- if(TIM41_USE_AVX2)
- add_compile_options(/arch:AVX2)
- else()
- if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
- add_compile_options(-msse4.2)
+ if("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX512")
+ if("${CMAKE_C_COMPILER_ID}" MATCHES "Intel")
+ add_compile_options(/QxCORE-AVX512)
+ else()
+ add_compile_options(/arch:AVX512)
+ if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
+ add_definitions(-D__PRFCHWINTRIN_H) # Workaround for conflicting _m_prefetchw() definitions
+ endif()
+ endif()
+ elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX2")
+ if("${CMAKE_C_COMPILER_ID}" MATCHES "Intel")
+ add_compile_options(/QxCORE-AVX2)
+ else()
+ add_compile_options(/arch:AVX2)
+ endif()
+ elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX")
+ if("${CMAKE_C_COMPILER_ID}" MATCHES "Intel")
+ add_compile_options(/QxAVX)
+ else()
+ add_compile_options(/arch:AVX)
+ endif()
+ elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "SSE42")
+ if("${CMAKE_C_COMPILER_ID}" MATCHES "Intel")
+ add_compile_options(/QxSSE4.2)
+ elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
+ add_compile_options(-msse4.2 -mpclmul -mpopcnt)
endif()
endif()
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /std:c++17")
-
- if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
- set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto=thin")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto=thin")
- else()
- set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL /guard:cf")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL /guard:cf")
+ string(APPEND CMAKE_CXX_FLAGS " /EHsc /std:c++17")
+ string(APPEND CMAKE_C_FLAGS_RELEASE " /Zi /guard:cf")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Zi /guard:cf")
+
+ if("${CMAKE_C_COMPILER_ID}" MATCHES "Intel")
+ string(APPEND CMAKE_C_FLAGS_RELEASE " /Qipo")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Qipo")
+ elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
+ string(APPEND CMAKE_C_FLAGS_RELEASE " -flto=thin")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE " -flto=thin")
+ elseif("${CMAKE_C_COMPILER_ID}" MATCHES "MSVC")
+ string(APPEND CMAKE_C_FLAGS_RELEASE " /GL")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE " /GL")
+
+ if ("${CMAKE_C_COMPILER_VERSION}" VERSION_GREATER_EQUAL "19.20")
+ string(REGEX REPLACE "/Ob[0-2]" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
+ string(REGEX REPLACE "/Ob[0-2]" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+ string(APPEND CMAKE_C_FLAGS_RELEASE " /Ob3")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Ob3")
+ endif()
endif()
+ string(APPEND CMAKE_EXE_LINKER_FLAGS " /STACK:16777216")
+
if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
- set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG")
- set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /DEBUG")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG " /DEBUG")
- set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /DEBUG")
- set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /DEBUG")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /DEBUG /GUARD:CF")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /DEBUG /GUARD:CF")
- set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG")
- set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG")
else()
- set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
- set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /DEBUG:FASTLINK")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG " /DEBUG:FASTLINK")
- set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
- set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
- set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG:incremental")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
+ string(APPEND CMAKE_STATIC_LINKER_FLAGS_RELEASE " /LTCG:incremental")
- set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
- set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG:FASTLINK")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO " /OPT:REF /DEBUG:FASTLINK")
endif()
+ string(APPEND CMAKE_RC_FLAGS " /nologo")
+
add_definitions(
-DSTDOUT_FILENO=1
)
else()
add_compile_options(-Wall -Wextra -Wno-missing-braces -ffast-math)
- if(TIM41_USE_AVX2)
- add_compile_options(-mavx2 -mfma)
- else()
- add_compile_options(-msse4.2)
+ if("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX512")
+ add_compile_options(
+ -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw # -mavx512ifma -mavx512vbmi # -mavx512vpopcntdq -mavx512vnni -mavx512vbmi2 -mavx512bitalg -mvpclmulqdq -mgfni -mvaes
+ -mpclmul -mpopcnt -maes -mavx2 -mfma -mfsgsbase -mf16c -mmovbe -mrdrnd -mlzcnt -mbmi -mbmi2 -mprfchw -mrdseed -madx
+ )
+ elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX2")
+ add_compile_options(-mavx2 -mpclmul -mpopcnt -maes -mavx2 -mfma -mfsgsbase -mf16c -mmovbe -mrdrnd -mlzcnt -mbmi -mbmi2)
+ elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "AVX")
+ add_compile_options(-mavx -mpclmul -mpopcnt -maes)
+ elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "SSE42")
+ add_compile_options(-msse4.2 -mpclmul -mpopcnt)
+ elseif("${TIM41_X86_SIMD_LEVEL}" STREQUAL "SSE2")
+ add_compile_options(-msse2)
endif()
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
- set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
- set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s")
- set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -s")
- set(CMAKE_RC_FLAGS "-O coff")
+ string(APPEND CMAKE_CXX_FLAGS " -std=c++17")
+ string(APPEND CMAKE_C_FLAGS_RELEASE " -flto")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE " -flto")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,--stack,16777216")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " -s")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " -s")
+ string(APPEND CMAKE_RC_FLAGS " -O coff")
endif()
function(DisableMSManifest targetName)
twsyn_bridge
utils
vorbis/include
+ vorbis-tools/include
)
add_subdirectory(FLAC)