mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-28 07:02:38 +00:00
499 lines
14 KiB
CMake
499 lines
14 KiB
CMake
macro(export)
|
|
endmacro()
|
|
|
|
if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES)
|
|
set(SRB2_INTERNAL_LIBRARY_TYPE SHARED)
|
|
set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES OFF)
|
|
else()
|
|
set(SRB2_INTERNAL_LIBRARY_TYPE STATIC)
|
|
set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES ON)
|
|
endif()
|
|
|
|
|
|
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
CPMAddPackage(
|
|
NAME SDL2
|
|
VERSION 2.24.2
|
|
URL "https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.24.2.zip"
|
|
EXCLUDE_FROM_ALL ON
|
|
OPTIONS
|
|
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
"SDL_SHARED ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
"SDL_STATIC ${NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
"SDL_TEST OFF"
|
|
"SDL2_DISABLE_SDL2MAIN ON"
|
|
"SDL2_DISABLE_INSTALL ON"
|
|
)
|
|
endif()
|
|
|
|
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
CPMAddPackage(
|
|
NAME SDL2_mixer
|
|
VERSION 2.6.2
|
|
URL "https://github.com/libsdl-org/SDL_mixer/archive/refs/tags/release-2.6.2.zip"
|
|
EXCLUDE_FROM_ALL ON
|
|
OPTIONS
|
|
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
"SDL2MIXER_INSTALL OFF"
|
|
"SDL2MIXER_DEPS_SHARED OFF"
|
|
"SDL2MIXER_SAMPLES OFF"
|
|
"SDL2MIXER_VENDORED ON"
|
|
"SDL2MIXER_FLAC ON"
|
|
"SDL2MIXER_FLAC_LIBFLAC OFF"
|
|
"SDL2MIXER_FLAC_DRFLAC ON"
|
|
"SDL2MIXER_MOD OFF"
|
|
"SDL2MIXER_MP3 ON"
|
|
"SDL2MIXER_MP3_DRMP3 ON"
|
|
"SDL2MIXER_MIDI ON"
|
|
"SDL2MIXER_OPUS OFF"
|
|
"SDL2MIXER_VORBIS STB"
|
|
"SDL2MIXER_WAVE ON"
|
|
)
|
|
endif()
|
|
|
|
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
CPMAddPackage(
|
|
NAME ZLIB
|
|
VERSION 1.2.13
|
|
URL "https://github.com/madler/zlib/archive/refs/tags/v1.2.13.zip"
|
|
EXCLUDE_FROM_ALL
|
|
OPTIONS
|
|
# The assembly optimizations are unmaintained and slated to be removed
|
|
"ASM686 Off"
|
|
"AMD64 Off"
|
|
"SKIP_INSTALL_ALL ON"
|
|
)
|
|
file(MAKE_DIRECTORY "${zlib_BINARY_DIR}/include")
|
|
file(COPY "${zlib_SOURCE_DIR}/zlib.h" DESTINATION "${zlib_BINARY_DIR}/include")
|
|
file(COPY "${zlib_BINARY_DIR}/zconf.h" DESTINATION "${zlib_BINARY_DIR}/include")
|
|
# honestly this should probably be built like png is
|
|
set_target_properties(zlib PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
set_target_properties(minigzip PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
set_target_properties(example PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
# zlib cmake also adds these 64 targets separately
|
|
if(HAVE_OFF64_T)
|
|
set_target_properties(minigzip64 PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
set_target_properties(example64 PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
endif()
|
|
target_include_directories(zlib INTERFACE "${zlib_BINARY_DIR}/include")
|
|
target_include_directories(zlibstatic INTERFACE "${zlib_BINARY_DIR}/include")
|
|
if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES)
|
|
add_library(ZLIB::ZLIB ALIAS zlib)
|
|
else()
|
|
add_library(ZLIB::ZLIB ALIAS zlibstatic)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
CPMAddPackage(
|
|
NAME png
|
|
VERSION 1.6.38
|
|
URL "https://github.com/glennrp/libpng/archive/refs/tags/v1.6.38.zip"
|
|
# png cmake build is broken on msys/mingw32
|
|
DOWNLOAD_ONLY YES
|
|
)
|
|
|
|
if(png_ADDED)
|
|
# Since png's cmake build is broken, we're going to create a target manually
|
|
set(
|
|
PNG_SOURCES
|
|
|
|
png.h
|
|
pngconf.h
|
|
|
|
pngpriv.h
|
|
pngdebug.h
|
|
pnginfo.h
|
|
pngstruct.h
|
|
|
|
png.c
|
|
pngerror.c
|
|
pngget.c
|
|
pngmem.c
|
|
pngpread.c
|
|
pngread.c
|
|
pngrio.c
|
|
pngrtran.c
|
|
pngrutil.c
|
|
pngset.c
|
|
pngtrans.c
|
|
pngwio.c
|
|
pngwrite.c
|
|
pngwtran.c
|
|
pngwutil.c
|
|
)
|
|
list(TRANSFORM PNG_SOURCES PREPEND "${png_SOURCE_DIR}/")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${png_BINARY_DIR}/include/png.h" "${png_BINARY_DIR}/include/pngconf.h"
|
|
COMMAND ${CMAKE_COMMAND} -E copy "${png_SOURCE_DIR}/png.h" "${png_SOURCE_DIR}/pngconf.h" "${png_BINARY_DIR}/include"
|
|
DEPENDS "${png_SOURCE_DIR}/png.h" "${png_SOURCE_DIR}/pngconf.h"
|
|
VERBATIM
|
|
)
|
|
add_custom_command(
|
|
OUTPUT "${png_BINARY_DIR}/include/pnglibconf.h"
|
|
COMMAND ${CMAKE_COMMAND} -E copy "${png_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt" "${png_BINARY_DIR}/include/pnglibconf.h"
|
|
DEPENDS "${png_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt"
|
|
VERBATIM
|
|
)
|
|
list(
|
|
APPEND PNG_SOURCES
|
|
"${png_BINARY_DIR}/include/png.h"
|
|
"${png_BINARY_DIR}/include/pngconf.h"
|
|
"${png_BINARY_DIR}/include/pnglibconf.h"
|
|
)
|
|
add_library(png "${SRB2_INTERNAL_LIBRARY_TYPE}" ${PNG_SOURCES})
|
|
|
|
# Disable ARM NEON since having it automatic breaks libpng external build on clang for some reason
|
|
target_compile_definitions(png PRIVATE -DPNG_ARM_NEON_OPT=0)
|
|
|
|
# The png includes need to be available to consumers
|
|
target_include_directories(png PUBLIC "${png_BINARY_DIR}/include")
|
|
|
|
# ... and these also need to be present only for png build
|
|
target_include_directories(png PRIVATE "${zlib_SOURCE_DIR}")
|
|
target_include_directories(png PRIVATE "${zlib_BINARY_DIR}")
|
|
target_include_directories(png PRIVATE "${png_BINARY_DIR}")
|
|
|
|
target_link_libraries(png PRIVATE ZLIB::ZLIB)
|
|
add_library(PNG::PNG ALIAS png)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
set(
|
|
internal_curl_options
|
|
|
|
"BUILD_CURL_EXE OFF"
|
|
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
"CURL_DISABLE_TESTS ON"
|
|
"HTTP_ONLY ON"
|
|
"CURL_DISABLE_CRYPTO_AUTH ON"
|
|
"CURL_DISABLE_NTLM ON"
|
|
"ENABLE_MANUAL OFF"
|
|
"ENABLE_THREADED_RESOLVER OFF"
|
|
"CURL_USE_LIBPSL OFF"
|
|
"CURL_USE_LIBSSH2 OFF"
|
|
"USE_LIBIDN2 OFF"
|
|
"CURL_ENABLE_EXPORT_TARGET OFF"
|
|
)
|
|
if(${CMAKE_SYSTEM} MATCHES Windows)
|
|
list(APPEND internal_curl_options "CURL_USE_OPENSSL OFF")
|
|
list(APPEND internal_curl_options "CURL_USE_SCHANNEL ON")
|
|
endif()
|
|
if(${CMAKE_SYSTEM} MATCHES Darwin)
|
|
list(APPEND internal_curl_options "CURL_USE_OPENSSL OFF")
|
|
list(APPEND internal_curl_options "CURL_USE_SECTRANSP ON")
|
|
endif()
|
|
if(${CMAKE_SYSTEM} MATCHES Linux)
|
|
list(APPEND internal_curl_options "CURL_USE_OPENSSL ON")
|
|
endif()
|
|
|
|
CPMAddPackage(
|
|
NAME curl
|
|
VERSION 7.86.0
|
|
URL "https://github.com/curl/curl/archive/refs/tags/curl-7_86_0.zip"
|
|
EXCLUDE_FROM_ALL ON
|
|
OPTIONS ${internal_curl_options}
|
|
)
|
|
endif()
|
|
|
|
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
CPMAddPackage(
|
|
NAME openmpt
|
|
VERSION 0.4.30
|
|
URL "https://github.com/OpenMPT/openmpt/archive/refs/tags/libopenmpt-0.4.30.zip"
|
|
DOWNLOAD_ONLY ON
|
|
)
|
|
|
|
if(openmpt_ADDED)
|
|
set(
|
|
openmpt_SOURCES
|
|
|
|
# minimp3
|
|
# -DMPT_WITH_MINIMP3
|
|
include/minimp3/minimp3.c
|
|
|
|
common/mptStringParse.cpp
|
|
common/mptLibrary.cpp
|
|
common/Logging.cpp
|
|
common/Profiler.cpp
|
|
common/version.cpp
|
|
common/mptCPU.cpp
|
|
common/ComponentManager.cpp
|
|
common/mptOS.cpp
|
|
common/serialization_utils.cpp
|
|
common/mptStringFormat.cpp
|
|
common/FileReader.cpp
|
|
common/mptWine.cpp
|
|
common/mptPathString.cpp
|
|
common/mptAlloc.cpp
|
|
common/mptUUID.cpp
|
|
common/mptTime.cpp
|
|
common/mptString.cpp
|
|
common/mptFileIO.cpp
|
|
common/mptStringBuffer.cpp
|
|
common/mptRandom.cpp
|
|
common/mptIO.cpp
|
|
common/misc_util.cpp
|
|
|
|
common/mptCRC.h
|
|
common/mptLibrary.h
|
|
common/mptIO.h
|
|
common/version.h
|
|
common/stdafx.h
|
|
common/ComponentManager.h
|
|
common/Endianness.h
|
|
common/mptStringFormat.h
|
|
common/mptMutex.h
|
|
common/mptUUID.h
|
|
common/mptExceptionText.h
|
|
common/BuildSettings.h
|
|
common/mptAlloc.h
|
|
common/mptTime.h
|
|
common/FileReaderFwd.h
|
|
common/Logging.h
|
|
common/mptException.h
|
|
common/mptWine.h
|
|
common/mptStringBuffer.h
|
|
common/misc_util.h
|
|
common/mptBaseMacros.h
|
|
common/mptMemory.h
|
|
common/mptFileIO.h
|
|
common/serialization_utils.h
|
|
common/mptSpan.h
|
|
common/mptThread.h
|
|
common/FlagSet.h
|
|
common/mptString.h
|
|
common/mptStringParse.h
|
|
common/mptBaseUtils.h
|
|
common/mptRandom.h
|
|
common/CompilerDetect.h
|
|
common/FileReader.h
|
|
common/mptAssert.h
|
|
common/mptPathString.h
|
|
common/Profiler.h
|
|
common/mptOS.h
|
|
common/mptBaseTypes.h
|
|
common/mptCPU.h
|
|
common/mptBufferIO.h
|
|
common/versionNumber.h
|
|
|
|
soundlib/WAVTools.cpp
|
|
soundlib/ITTools.cpp
|
|
soundlib/AudioCriticalSection.cpp
|
|
soundlib/Load_stm.cpp
|
|
soundlib/MixerLoops.cpp
|
|
soundlib/Load_dbm.cpp
|
|
soundlib/ModChannel.cpp
|
|
soundlib/Load_gdm.cpp
|
|
soundlib/Snd_fx.cpp
|
|
soundlib/Load_mid.cpp
|
|
soundlib/mod_specifications.cpp
|
|
soundlib/Snd_flt.cpp
|
|
soundlib/Load_psm.cpp
|
|
soundlib/Load_far.cpp
|
|
soundlib/patternContainer.cpp
|
|
soundlib/Load_med.cpp
|
|
soundlib/Load_dmf.cpp
|
|
soundlib/Paula.cpp
|
|
soundlib/modcommand.cpp
|
|
soundlib/Message.cpp
|
|
soundlib/SoundFilePlayConfig.cpp
|
|
soundlib/Load_uax.cpp
|
|
soundlib/plugins/PlugInterface.cpp
|
|
soundlib/plugins/LFOPlugin.cpp
|
|
soundlib/plugins/PluginManager.cpp
|
|
soundlib/plugins/DigiBoosterEcho.cpp
|
|
soundlib/plugins/dmo/DMOPlugin.cpp
|
|
soundlib/plugins/dmo/Flanger.cpp
|
|
soundlib/plugins/dmo/Distortion.cpp
|
|
soundlib/plugins/dmo/ParamEq.cpp
|
|
soundlib/plugins/dmo/Gargle.cpp
|
|
soundlib/plugins/dmo/I3DL2Reverb.cpp
|
|
soundlib/plugins/dmo/Compressor.cpp
|
|
soundlib/plugins/dmo/WavesReverb.cpp
|
|
soundlib/plugins/dmo/Echo.cpp
|
|
soundlib/plugins/dmo/Chorus.cpp
|
|
soundlib/Load_ams.cpp
|
|
soundlib/tuningbase.cpp
|
|
soundlib/ContainerUMX.cpp
|
|
soundlib/Load_ptm.cpp
|
|
soundlib/ContainerXPK.cpp
|
|
soundlib/SampleFormatMP3.cpp
|
|
soundlib/tuning.cpp
|
|
soundlib/Sndfile.cpp
|
|
soundlib/ContainerMMCMP.cpp
|
|
soundlib/Load_amf.cpp
|
|
soundlib/Load_669.cpp
|
|
soundlib/modsmp_ctrl.cpp
|
|
soundlib/Load_mtm.cpp
|
|
soundlib/OggStream.cpp
|
|
soundlib/Load_plm.cpp
|
|
soundlib/Tables.cpp
|
|
soundlib/Load_c67.cpp
|
|
soundlib/Load_mod.cpp
|
|
soundlib/Load_sfx.cpp
|
|
soundlib/Sndmix.cpp
|
|
soundlib/load_j2b.cpp
|
|
soundlib/ModSequence.cpp
|
|
soundlib/SampleFormatFLAC.cpp
|
|
soundlib/ModInstrument.cpp
|
|
soundlib/Load_mo3.cpp
|
|
soundlib/ModSample.cpp
|
|
soundlib/Dlsbank.cpp
|
|
soundlib/Load_itp.cpp
|
|
soundlib/UpgradeModule.cpp
|
|
soundlib/MIDIMacros.cpp
|
|
soundlib/ContainerPP20.cpp
|
|
soundlib/RowVisitor.cpp
|
|
soundlib/Load_imf.cpp
|
|
soundlib/SampleFormatVorbis.cpp
|
|
soundlib/Load_dsm.cpp
|
|
soundlib/Load_mt2.cpp
|
|
soundlib/MixerSettings.cpp
|
|
soundlib/S3MTools.cpp
|
|
soundlib/Load_xm.cpp
|
|
soundlib/MIDIEvents.cpp
|
|
soundlib/pattern.cpp
|
|
soundlib/Load_digi.cpp
|
|
soundlib/Load_s3m.cpp
|
|
soundlib/tuningCollection.cpp
|
|
soundlib/SampleIO.cpp
|
|
soundlib/Dither.cpp
|
|
soundlib/Load_mdl.cpp
|
|
soundlib/OPL.cpp
|
|
soundlib/WindowedFIR.cpp
|
|
soundlib/SampleFormats.cpp
|
|
soundlib/Load_wav.cpp
|
|
soundlib/Load_it.cpp
|
|
soundlib/UMXTools.cpp
|
|
soundlib/Load_stp.cpp
|
|
soundlib/Load_okt.cpp
|
|
soundlib/Load_ult.cpp
|
|
soundlib/MixFuncTable.cpp
|
|
soundlib/SampleFormatOpus.cpp
|
|
soundlib/Fastmix.cpp
|
|
soundlib/Tagging.cpp
|
|
soundlib/ITCompression.cpp
|
|
soundlib/Load_dtm.cpp
|
|
soundlib/MPEGFrame.cpp
|
|
soundlib/XMTools.cpp
|
|
soundlib/SampleFormatMediaFoundation.cpp
|
|
soundlib/InstrumentExtensions.cpp
|
|
|
|
soundlib/MixerInterface.h
|
|
soundlib/SoundFilePlayConfig.h
|
|
soundlib/ModSample.h
|
|
soundlib/MIDIEvents.h
|
|
soundlib/ModSampleCopy.h
|
|
soundlib/patternContainer.h
|
|
soundlib/ChunkReader.h
|
|
soundlib/ITCompression.h
|
|
soundlib/Dither.h
|
|
soundlib/S3MTools.h
|
|
soundlib/MPEGFrame.h
|
|
soundlib/WAVTools.h
|
|
soundlib/mod_specifications.h
|
|
soundlib/ITTools.h
|
|
soundlib/RowVisitor.h
|
|
soundlib/plugins/PluginMixBuffer.h
|
|
soundlib/plugins/PluginStructs.h
|
|
soundlib/plugins/LFOPlugin.h
|
|
soundlib/plugins/PlugInterface.h
|
|
soundlib/plugins/DigiBoosterEcho.h
|
|
soundlib/plugins/OpCodes.h
|
|
soundlib/plugins/dmo/Echo.h
|
|
soundlib/plugins/dmo/I3DL2Reverb.h
|
|
soundlib/plugins/dmo/WavesReverb.h
|
|
soundlib/plugins/dmo/ParamEq.h
|
|
soundlib/plugins/dmo/Gargle.h
|
|
soundlib/plugins/dmo/DMOPlugin.h
|
|
soundlib/plugins/dmo/Chorus.h
|
|
soundlib/plugins/dmo/Compressor.h
|
|
soundlib/plugins/dmo/Distortion.h
|
|
soundlib/plugins/dmo/Flanger.h
|
|
soundlib/plugins/PluginManager.h
|
|
soundlib/SampleIO.h
|
|
soundlib/Container.h
|
|
soundlib/ModSequence.h
|
|
soundlib/UMXTools.h
|
|
soundlib/Message.h
|
|
soundlib/modcommand.h
|
|
soundlib/XMTools.h
|
|
soundlib/Snd_defs.h
|
|
soundlib/MixFuncTable.h
|
|
soundlib/pattern.h
|
|
soundlib/modsmp_ctrl.h
|
|
soundlib/Tagging.h
|
|
soundlib/tuningcollection.h
|
|
soundlib/Mixer.h
|
|
soundlib/FloatMixer.h
|
|
soundlib/AudioCriticalSection.h
|
|
soundlib/Tables.h
|
|
soundlib/tuningbase.h
|
|
soundlib/WindowedFIR.h
|
|
soundlib/Sndfile.h
|
|
soundlib/Paula.h
|
|
soundlib/ModInstrument.h
|
|
soundlib/Dlsbank.h
|
|
soundlib/IntMixer.h
|
|
soundlib/OPL.h
|
|
soundlib/Resampler.h
|
|
soundlib/ModChannel.h
|
|
soundlib/MixerSettings.h
|
|
soundlib/AudioReadTarget.h
|
|
soundlib/MixerLoops.h
|
|
soundlib/tuning.h
|
|
soundlib/MIDIMacros.h
|
|
soundlib/OggStream.h
|
|
soundlib/Loaders.h
|
|
soundlib/BitReader.h
|
|
soundlib/opal.h
|
|
|
|
sounddsp/AGC.cpp
|
|
sounddsp/EQ.cpp
|
|
sounddsp/DSP.cpp
|
|
sounddsp/Reverb.cpp
|
|
sounddsp/Reverb.h
|
|
sounddsp/EQ.h
|
|
sounddsp/DSP.h
|
|
sounddsp/AGC.h
|
|
|
|
libopenmpt/libopenmpt_c.cpp
|
|
libopenmpt/libopenmpt_cxx.cpp
|
|
libopenmpt/libopenmpt_impl.cpp
|
|
libopenmpt/libopenmpt_ext_impl.cpp
|
|
)
|
|
list(TRANSFORM openmpt_SOURCES PREPEND "${openmpt_SOURCE_DIR}/")
|
|
|
|
# -DLIBOPENMPT_BUILD
|
|
configure_file("openmpt_svn_version.h" "svn_version.h")
|
|
add_library(openmpt "${SRB2_INTERNAL_LIBRARY_TYPE}" ${openmpt_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/svn_version.h)
|
|
target_compile_features(openmpt PRIVATE cxx_std_11)
|
|
target_compile_definitions(openmpt PRIVATE -DLIBOPENMPT_BUILD)
|
|
|
|
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/common")
|
|
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/src")
|
|
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/include")
|
|
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}")
|
|
target_include_directories(openmpt PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
|
|
|
|
# I wish this wasn't necessary, but it is
|
|
target_include_directories(openmpt PUBLIC "${openmpt_SOURCE_DIR}")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
CPMAddPackage(
|
|
NAME libgme
|
|
VERSION 0.6.3
|
|
URL "https://bitbucket.org/mpyne/game-music-emu/get/e76bdc0cb916e79aa540290e6edd0c445879d3ba.zip"
|
|
EXCLUDE_FROM_ALL ON
|
|
OPTIONS
|
|
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
"ENABLE_UBSAN OFF"
|
|
)
|
|
target_compile_features(gme PRIVATE cxx_std_11)
|
|
target_link_libraries(gme PRIVATE ZLIB::ZLIB)
|
|
endif()
|