diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/common/BuildSettings.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/common/BuildSettings.h')
-rw-r--r-- | Src/external_dependencies/openmpt-trunk/common/BuildSettings.h | 683 |
1 files changed, 683 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/common/BuildSettings.h b/Src/external_dependencies/openmpt-trunk/common/BuildSettings.h new file mode 100644 index 00000000..f319b6e9 --- /dev/null +++ b/Src/external_dependencies/openmpt-trunk/common/BuildSettings.h @@ -0,0 +1,683 @@ +/* + * BuildSettings.h + * --------------- + * Purpose: Global, user settable compile time flags (and some global system header configuration) + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#pragma once + + + +#include "mpt/base/detect_compiler.hpp" +#include "mpt/base/detect_os.hpp" +#include "mpt/base/detect_quirks.hpp" + + + +// set windows version early so that we can deduce dependencies from SDK version + +#if MPT_OS_WINDOWS + +#if !defined(WINVER) && !defined(_WIN32_WINDOWS) && !defined(_WIN32_WINNT) +#if MPT_COMPILER_CLANG +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif // MPT_COMPILER_CLANG +#define _WIN32_WINNT 0x0601 // _WIN32_WINNT_WIN7 +#if MPT_COMPILER_CLANG +#pragma clang diagnostic pop +#endif // MPT_COMPILER_CLANG +#endif + +#ifndef WINVER +#if defined(_WIN32_WINNT) +#define WINVER _WIN32_WINNT +#elif defined(_WIN32_WINDOWS) +#define WINVER _WIN32_WINDOWS +#endif +#endif + +#endif // MPT_OS_WINDOWS + + + +#if defined(MODPLUG_TRACKER) && defined(LIBOPENMPT_BUILD) +#error "either MODPLUG_TRACKER or LIBOPENMPT_BUILD has to be defined" +#elif defined(MODPLUG_TRACKER) +// nothing +#define MPT_INLINE_NS mptx +#elif defined(LIBOPENMPT_BUILD) +// nothing +#define MPT_INLINE_NS mpt_libopenmpt +#else +#error "either MODPLUG_TRACKER or LIBOPENMPT_BUILD has to be defined" +#endif // MODPLUG_TRACKER || LIBOPENMPT_BUILD + + + +#if defined(LIBOPENMPT_BUILD) + +// Fixup dependencies which are currently not used in libopenmpt itself, +// however might be set by some build systems like autotools anyway for simplicity. +#ifdef MPT_WITH_FLAC +#undef MPT_WITH_FLAC +#endif + +#endif // LIBOPENMPT_BUILD + + + +// Dependencies from the MSVC build system +#if defined(MPT_BUILD_MSVC) + +// This section defines which dependencies are available when building with +// MSVC. Other build systems provide MPT_WITH_* macros via command-line or other +// means. +// OpenMPT and libopenmpt should compile and run successfully (albeit with +// reduced functionality) with any or all dependencies missing/disabled. +// The defaults match the bundled third-party libraries with the addition of +// ASIO and VST SDKs. + +#if defined(MODPLUG_TRACKER) + +#if MPT_OS_WINDOWS +#if !defined(MPT_BUILD_WINESUPPORT) && !defined(MPT_BUILD_UPDATESIGNTOOL) +#define MPT_WITH_MFC +#endif // !MPT_BUILD_WINESUPPORT && !MPT_BUILD_UPDATESIGNTOOL +#endif // MPT_OS_WINDOWS + +// OpenMPT-only dependencies +#define MPT_WITH_ANCIENT +#if !defined(MPT_BUILD_RETRO) && !MPT_COMPILER_CLANG && !MPT_MSVC_BEFORE(2019,0) +// disabled for VS2017 because of multiple initialization of inline variables +// https://developercommunity.visualstudio.com/t/static-inline-variable-gets-destroyed-multiple-tim/297876 +#define MPT_WITH_ASIO +#endif +#if defined(MPT_BUILD_RETRO) +#define MPT_WITH_DIRECTSOUND +#endif +#define MPT_WITH_DMO +#define MPT_WITH_LAME +#define MPT_WITH_LHASA +#define MPT_WITH_MINIZIP +#define MPT_WITH_NLOHMANNJSON +#define MPT_WITH_OPUS +#define MPT_WITH_OPUSENC +#define MPT_WITH_OPUSFILE +#define MPT_WITH_PORTAUDIO +//#define MPT_WITH_PULSEAUDIO +//#define MPT_WITH_PULSEAUDIOSIMPLE +#define MPT_WITH_RTAUDIO +#define MPT_WITH_SMBPITCHSHIFT +#define MPT_WITH_UNRAR +#define MPT_WITH_VORBISENC +#define MPT_WITH_VST + +// OpenMPT and libopenmpt dependencies (not for openmp123, player plugins or examples) +//#define MPT_WITH_DL +#define MPT_WITH_FLAC +//#define MPT_WITH_LTDL +#if MPT_OS_WINDOWS +#if (_WIN32_WINNT >= 0x0601) +#define MPT_WITH_MEDIAFOUNDATION +#endif +#endif +//#define MPT_WITH_MINIMP3 +//#define MPT_WITH_MINIZ +#define MPT_WITH_MPG123 +#define MPT_WITH_OGG +//#define MPT_WITH_STBVORBIS +#define MPT_WITH_VORBIS +#define MPT_WITH_VORBISFILE +#if MPT_OS_WINDOWS +#if (_WIN32_WINNT >= 0x0A00) +#define MPT_WITH_WINDOWS10 +#endif +#endif +#define MPT_WITH_ZLIB + +#endif // MODPLUG_TRACKER + +#if defined(LIBOPENMPT_BUILD) + +// OpenMPT and libopenmpt dependencies (not for openmp123, player plugins or examples) +#if defined(LIBOPENMPT_BUILD_FULL) && defined(LIBOPENMPT_BUILD_SMALL) +#error "only one of LIBOPENMPT_BUILD_FULL or LIBOPENMPT_BUILD_SMALL can be defined" +#endif // LIBOPENMPT_BUILD_FULL && LIBOPENMPT_BUILD_SMALL + +#if defined(LIBOPENMPT_BUILD_SMALL) + +//#define MPT_WITH_DL +//#define MPT_WITH_FLAC +//#define MPT_WITH_LTDL +//#define MPT_WITH_MEDIAFOUNDATION +#define MPT_WITH_MINIMP3 +#define MPT_WITH_MINIZ +//#define MPT_WITH_MPG123 +//#define MPT_WITH_OGG +#define MPT_WITH_STBVORBIS +//#define MPT_WITH_VORBIS +//#define MPT_WITH_VORBISFILE +//#define MPT_WITH_ZLIB + +#else // !LIBOPENMPT_BUILD_SMALL + +//#define MPT_WITH_DL +//#define MPT_WITH_FLAC +//#define MPT_WITH_LTDL +//#define MPT_WITH_MEDIAFOUNDATION +//#define MPT_WITH_MINIMP3 +//#define MPT_WITH_MINIZ +#define MPT_WITH_MPG123 +#define MPT_WITH_OGG +//#define MPT_WITH_STBVORBIS +#define MPT_WITH_VORBIS +#define MPT_WITH_VORBISFILE +#define MPT_WITH_ZLIB + +#endif // LIBOPENMPT_BUILD_SMALL + +#endif // LIBOPENMPT_BUILD + +#endif // MPT_BUILD_MSVC + + +#if defined(MPT_BUILD_XCODE) + +#if defined(MODPLUG_TRACKER) + +// n/a + +#endif // MODPLUG_TRACKER + +#if defined(LIBOPENMPT_BUILD) + +//#define MPT_WITH_DL +//#define MPT_WITH_FLAC +//#define MPT_WITH_LTDL +//#define MPT_WITH_MEDIAFOUNDATION +//#define MPT_WITH_MINIMP3 +//#define MPT_WITH_MINIZ +#define MPT_WITH_MPG123 +#define MPT_WITH_OGG +//#define MPT_WITH_STBVORBIS +#define MPT_WITH_VORBIS +#define MPT_WITH_VORBISFILE +#define MPT_WITH_ZLIB + +#endif // LIBOPENMPT_BUILD + +#endif // MPT_BUILD_XCODE + + + +#if defined(MODPLUG_TRACKER) + +// Enable built-in test suite. +#if defined(MPT_BUILD_DEBUG) || defined(MPT_BUILD_CHECKED) +#define ENABLE_TESTS +#endif + +// Disable any file saving functionality (not really useful except for the player library) +//#define MODPLUG_NO_FILESAVE + +// Disable any debug logging +#if !defined(MPT_BUILD_DEBUG) && !defined(MPT_BUILD_CHECKED) && !defined(MPT_BUILD_WINESUPPORT) +#define MPT_LOG_GLOBAL_LEVEL_STATIC +#define MPT_LOG_GLOBAL_LEVEL 0 +#endif + +// Enable all individual logging macros and MPT_LOG calls +//#define MPT_ALL_LOGGING + +// Disable all runtime asserts +#if !defined(MPT_BUILD_DEBUG) && !defined(MPT_BUILD_CHECKED) && !defined(MPT_BUILD_WINESUPPORT) +#define NO_ASSERTS +#endif + +// Enable global ComponentManager +#define MPT_COMPONENT_MANAGER 1 + +// Support for externally linked samples e.g. in MPTM files +#define MPT_EXTERNAL_SAMPLES + +// Support mpt::ChartsetLocale +#define MPT_ENABLE_CHARSET_LOCALE + +// Use architecture-specific intrinsics +#define MPT_ENABLE_ARCH_INTRINSICS + +#if !defined(MPT_BUILD_RETRO) +#define MPT_ENABLE_UPDATE +#endif // !MPT_BUILD_RETRO + +// Disable unarchiving support +//#define NO_ARCHIVE_SUPPORT + +// Disable the built-in reverb effect +//#define NO_REVERB + +// Disable built-in miscellaneous DSP effects (surround, mega bass, noise reduction) +//#define NO_DSP + +// Disable the built-in equalizer. +//#define NO_EQ + +// Disable the built-in automatic gain control +//#define NO_AGC + +// (HACK) Define to build without any plugin support +//#define NO_PLUGINS + +#endif // MODPLUG_TRACKER + + + +#if defined(LIBOPENMPT_BUILD) + +#if (defined(_DEBUG) || defined(DEBUG)) && !defined(MPT_BUILD_DEBUG) +#define MPT_BUILD_DEBUG +#endif + +#if defined(LIBOPENMPT_BUILD_TEST) +#define ENABLE_TESTS +#else +#define MODPLUG_NO_FILESAVE +#endif +#if defined(MPT_BUILD_ANALZYED) || defined(MPT_BUILD_DEBUG) || defined(MPT_BUILD_CHECKED) || defined(ENABLE_TESTS) +// enable asserts +#else +#define NO_ASSERTS +#endif +//#define MPT_ALL_LOGGING +#define MPT_COMPONENT_MANAGER 0 +//#define MPT_EXTERNAL_SAMPLES +#if defined(ENABLE_TESTS) || defined(MPT_BUILD_HACK_ARCHIVE_SUPPORT) +#define MPT_ENABLE_CHARSET_LOCALE +#else +//#define MPT_ENABLE_CHARSET_LOCALE +#endif +// Do not use architecture-specifid intrinsics in library builds. There is just about no codepath which would use it anyway. +//#define MPT_ENABLE_ARCH_INTRINSICS +#if defined(MPT_BUILD_HACK_ARCHIVE_SUPPORT) +//#define NO_ARCHIVE_SUPPORT +#else +#define NO_ARCHIVE_SUPPORT +#endif +//#define NO_REVERB +#define NO_DSP +#define NO_EQ +#define NO_AGC +//#define NO_PLUGINS + +#endif // LIBOPENMPT_BUILD + + + +#if MPT_OS_WINDOWS + + #ifndef MPT_ENABLE_CHARSET_LOCALE + #define MPT_ENABLE_CHARSET_LOCALE + #endif + +#elif MPT_OS_LINUX + +#elif MPT_OS_ANDROID + +#elif MPT_OS_EMSCRIPTEN + +#elif MPT_OS_MACOSX_OR_IOS + +#elif MPT_OS_DJGPP + +#endif + + + +#if (MPT_COMPILER_MSVC && !defined(MPT_USTRING_MODE_UTF8_FORCE)) || defined(MODPLUG_TRACKER) + + // Use wide strings for MSVC because this is the native encoding on + // microsoft platforms. + + // mpt::ToWString, mpt::wfmt, ConvertStrTo<std::wstring> + // Required by the tracker to ease interfacing with WinAPI. + // Required by MPT_USTRING_MODE_WIDE to ease type tunneling in mpt::format. + #define MPT_WSTRING_FORMAT 1 + +#else + + #define MPT_WSTRING_FORMAT 0 + +#endif + +#if (MPT_COMPILER_MSVC && !defined(MPT_USTRING_MODE_UTF8_FORCE)) || MPT_OS_WINDOWS || MPT_WSTRING_FORMAT + + // mpt::ToWide + // Required on Windows by mpt::PathString. + // Required by MPT_USTRING_MODE_WIDE as they share the conversion functions. + // Required by MPT_WSTRING_FORMAT because of std::string<->std::wstring conversion in mpt::ToAString and mpt::ToWString. + #define MPT_WSTRING_CONVERT 1 + +#else + + #define MPT_WSTRING_CONVERT 0 + +#endif + + + +// fixing stuff up + +#if defined(MPT_BUILD_ANALYZED) || defined(MPT_BUILD_CHECKED) +#ifdef NO_ASSERTS +#undef NO_ASSERTS // static or dynamic analyzers want assertions on +#endif +#endif + +#if defined(MPT_BUILD_FUZZER) +#ifndef MPT_FUZZ_TRACKER +#define MPT_FUZZ_TRACKER +#endif +#endif + +#if defined(MPT_ENABLE_ARCH_INTRINSICS) +#if MPT_COMPILER_MSVC && defined(_M_IX86) + +#define MPT_ENABLE_ARCH_X86 + +#define MPT_ENABLE_ARCH_INTRINSICS_SSE +#define MPT_ENABLE_ARCH_INTRINSICS_SSE2 + +#elif MPT_COMPILER_MSVC && defined(_M_X64) + +#define MPT_ENABLE_ARCH_AMD64 + +#define MPT_ENABLE_ARCH_INTRINSICS_SSE +#define MPT_ENABLE_ARCH_INTRINSICS_SSE2 + +#endif // arch +#endif // MPT_ENABLE_ARCH_INTRINSICS + +#if defined(ENABLE_TESTS) && defined(MODPLUG_NO_FILESAVE) +#undef MODPLUG_NO_FILESAVE // tests recommend file saving +#endif + +#if defined(MPT_WITH_ZLIB) && defined(MPT_WITH_MINIZ) +// Only one deflate implementation should be used. Prefer zlib. +#undef MPT_WITH_MINIZ +#endif + +#if !MPT_OS_WINDOWS && defined(MPT_WITH_MEDIAFOUNDATION) +#undef MPT_WITH_MEDIAFOUNDATION // MediaFoundation requires Windows +#endif + +#if !MPT_COMPILER_MSVC && !MPT_COMPILER_CLANG && defined(MPT_WITH_MEDIAFOUNDATION) +#undef MPT_WITH_MEDIAFOUNDATION // MediaFoundation requires MSVC or Clang due to ATL (no MinGW support) +#endif + +#if (defined(MPT_WITH_MPG123) || defined(MPT_WITH_MINIMP3)) && !defined(MPT_ENABLE_MP3_SAMPLES) +#define MPT_ENABLE_MP3_SAMPLES +#endif + +#if defined(ENABLE_TESTS) +#define MPT_ENABLE_FILEIO // Test suite requires PathString for file loading. +#endif + +#if defined(MODPLUG_TRACKER) && !defined(MPT_ENABLE_FILEIO) +#define MPT_ENABLE_FILEIO // Tracker requires disk file io +#endif + +#if defined(MPT_EXTERNAL_SAMPLES) && !defined(MPT_ENABLE_FILEIO) +#define MPT_ENABLE_FILEIO // External samples require disk file io +#endif + +#if defined(NO_PLUGINS) +// Any plugin type requires NO_PLUGINS to not be defined. +#if defined(MPT_WITH_VST) +#undef MPT_WITH_VST +#endif +#endif + + + +#if defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT) && !defined(MPT_BUILD_WINESUPPORT_WRAPPER) +#ifndef MPT_NO_NAMESPACE +#define MPT_NO_NAMESPACE +#endif +#endif + +#if defined(MPT_NO_NAMESPACE) + +#ifdef OPENMPT_NAMESPACE +#undef OPENMPT_NAMESPACE +#endif +#define OPENMPT_NAMESPACE + +#ifdef OPENMPT_NAMESPACE_BEGIN +#undef OPENMPT_NAMESPACE_BEGIN +#endif +#define OPENMPT_NAMESPACE_BEGIN + +#ifdef OPENMPT_NAMESPACE_END +#undef OPENMPT_NAMESPACE_END +#endif +#define OPENMPT_NAMESPACE_END + +#else + +#ifndef OPENMPT_NAMESPACE +#define OPENMPT_NAMESPACE OpenMPT +#endif + +#ifndef OPENMPT_NAMESPACE_BEGIN +#define OPENMPT_NAMESPACE_BEGIN namespace OPENMPT_NAMESPACE { +#endif +#ifndef OPENMPT_NAMESPACE_END +#define OPENMPT_NAMESPACE_END } +#endif + +#endif + + + +// platform configuration + +#ifdef MPT_WITH_MFC +//#define MPT_MFC_FULL // use full MFC, including MFC controls +#define _CSTRING_DISABLE_NARROW_WIDE_CONVERSION +#endif // MPT_WITH_MFC + +#if defined(MODPLUG_TRACKER) +#if MPT_OS_WINDOWS +#if !defined(MPT_BUILD_WINESUPPORT) +#ifndef MPT_MFC_FULL +#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS // Do not include support for MFC controls in dialogs (reduces binary bloat; remove this #define if you want to use MFC controls) +#endif // !MPT_MFC_FULL +#endif // !MPT_BUILD_WINESUPPORT +#endif // MPT_OS_WINDOWS +#endif // MODPLUG_TRACKER + +#if MPT_OS_WINDOWS + +#define WIN32_LEAN_AND_MEAN + +// windows.h excludes +#define NOMEMMGR // GMEM_*, LMEM_*, GHND, LHND, associated routines +#ifndef NOMINMAX +#define NOMINMAX // Macros min(a,b) and max(a,b) +#endif +#define NOSERVICE // All Service Controller routines, SERVICE_ equates, etc. +#define NOCOMM // COMM driver routines +#define NOKANJI // Kanji support stuff. +#define NOPROFILER // Profiler interface. +#define NOMCX // Modem Configuration Extensions + +// mmsystem.h excludes +#define MMNODRV +//#define MMNOSOUND +//#define MMNOWAVE +//#define MMNOMIDI +#define MMNOAUX +#define MMNOMIXER +//#define MMNOTIMER +#define MMNOJOY +#define MMNOMCI +//#define MMNOMMIO +//#define MMNOMMSYSTEM + +// mmreg.h excludes +#define NOMMIDS +//#define NONEWWAVE +#define NONEWRIFF +#define NOJPEGDIB +#define NONEWIC +#define NOBITMAP + +#endif // MPT_OS_WINDOWS + + + +// stdlib configuration + +#if MPT_COMPILER_CLANG +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif + +#define __STDC_CONSTANT_MACROS +#define __STDC_FORMAT_MACROS +#define __STDC_LIMIT_MACROS + +#define _USE_MATH_DEFINES + +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 64 +#endif + +#if MPT_COMPILER_CLANG +#pragma clang diagnostic pop +#endif + + + +// compiler configuration + +#if MPT_COMPILER_MSVC + +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers + +#pragma warning(default:4800) // Implicit conversion from 'int' to bool. Possible information loss + +#pragma warning(disable:4355) // 'this' : used in base member initializer list + +// happens for immutable classes (i.e. classes containing const members) +#pragma warning(disable:4512) // assignment operator could not be generated + +#pragma warning(error:4309) // Treat "truncation of constant value"-warning as error. +#pragma warning(error:4463) // Treat overflow; assigning value to bit-field that can only hold values from low_value to high_value"-warning as error. + +#ifdef MPT_BUILD_ANALYZED +// Disable Visual Studio static analyzer warnings that generate too many false positives in VS2010. +//#pragma warning(disable:6246) +//#pragma warning(disable:6262) +#pragma warning(disable:6297) // 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value. +#pragma warning(disable:6326) // Potential comparison of a constant with another constant +//#pragma warning(disable:6385) +//#pragma warning(disable:6386) +#endif // MPT_BUILD_ANALYZED + +#endif // MPT_COMPILER_MSVC + +#if MPT_COMPILER_CLANG + +#if defined(MPT_BUILD_MSVC) +#pragma clang diagnostic warning "-Wimplicit-fallthrough" +#endif // MPT_BUILD_MSVC + +#if defined(MODPLUG_TRACKER) +#pragma clang diagnostic ignored "-Wunused-local-typedef" +#endif // MODPLUG_TRACKER + +#endif // MPT_COMPILER_CLANG + + + + + +// standard library quirks + + + + + +// third-party library configuration + +#if MPT_OS_WINDOWS +#ifndef UNICODE +#define MPT_CHECK_WINDOWS_IGNORE_WARNING_NO_UNICODE +#endif // !UNICODE +#endif // MPT_OS_WINDOWS + +#ifdef MPT_WITH_ANCIENT +#ifdef MPT_BUILD_MSVC_SHARED +#define ANCIENT_API_DECLSPEC_DLLIMPORT +#endif +#endif + +#ifdef MPT_WITH_FLAC +#ifdef MPT_BUILD_MSVC_STATIC +#define FLAC__NO_DLL +#endif +#endif + +#ifdef MPT_WITH_SMBPITCHSHIFT +#ifdef MPT_BUILD_MSVC_SHARED +#define SMBPITCHSHIFT_USE_DLL +#endif +#endif + +#ifdef MPT_WITH_STBVORBIS +#define STB_VORBIS_HEADER_ONLY +#ifndef STB_VORBIS_NO_PULLDATA_API +#define STB_VORBIS_NO_PULLDATA_API +#endif +#ifndef STB_VORBIS_NO_STDIO +#define STB_VORBIS_NO_STDIO +#endif +#endif + +#ifdef MPT_WITH_VORBISFILE +#ifndef OV_EXCLUDE_STATIC_CALLBACKS +#define OV_EXCLUDE_STATIC_CALLBACKS +#endif +#endif + +#ifdef MPT_WITH_ZLIB +#ifdef MPT_BUILD_MSVC_SHARED +#define ZLIB_DLL +#endif +#endif + + + +#ifdef __cplusplus + +#include "mpt/base/namespace.hpp" + +OPENMPT_NAMESPACE_BEGIN + +namespace mpt { + +#ifndef MPT_NO_NAMESPACE +using namespace ::mpt; +#endif + +} // namespace mpt + +OPENMPT_NAMESPACE_END + +#endif |