summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-06-15 13:41:52 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-06-15 13:50:27 +0200
commit6fc09121378d78026f799a820ce689f2d30bb0c9 (patch)
tree000e06751da4f737498efd333ed22c344c46d60b
parent773414606079fa745d1c37fce49324ab6a09e972 (diff)
downloadredot-engine-6fc09121378d78026f799a820ce689f2d30bb0c9.tar.gz
minimp3: Add a .cpp file to simplify building the single-header implementation
Single-header libraries like this require passing a bunch of defines _once_ before including the header, but not multiple times. This can make it tricky in user code to know when to request the implementation, if the header needs to be included in multiple files. So properly compiling a .cpp file for the implementation solves this, and also enables us to properly disable warnings on thirdparty implementation code.
-rw-r--r--modules/minimp3/SCsub26
-rw-r--r--modules/minimp3/audio_stream_mp3.cpp5
-rw-r--r--thirdparty/README.md1
-rw-r--r--thirdparty/minimp3/minimp3_ex.cpp5
4 files changed, 26 insertions, 11 deletions
diff --git a/modules/minimp3/SCsub b/modules/minimp3/SCsub
index 20e3165f38..0f86ed5a88 100644
--- a/modules/minimp3/SCsub
+++ b/modules/minimp3/SCsub
@@ -5,13 +5,27 @@ Import("env_modules")
env_minimp3 = env_modules.Clone()
+# Thirdparty source files
+
+thirdparty_obj = []
+
thirdparty_dir = "#thirdparty/minimp3/"
+thirdparty_sources = [thirdparty_dir + "minimp3_ex.cpp"]
+
+env_minimp3.Prepend(CPPPATH=[thirdparty_dir])
+
+env_thirdparty = env_minimp3.Clone()
+env_thirdparty.disable_warnings()
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources)
+env.modules_sources += thirdparty_obj
-# Treat minimp3 headers as system headers to avoid raising warnings. Not supported on MSVC.
-if not env.msvc:
- env_minimp3.Append(CPPFLAGS=["-isystem", Dir(thirdparty_dir).path])
-else:
- env_minimp3.Prepend(CPPPATH=[thirdparty_dir])
# Godot source files
-env_minimp3.add_source_files(env.modules_sources, "*.cpp")
+
+module_obj = []
+
+env_minimp3.add_source_files(module_obj, "*.cpp")
+env.modules_sources += module_obj
+
+# Needed to force rebuilding the module files when the thirdparty library is updated.
+env.Depends(module_obj, thirdparty_obj)
diff --git a/modules/minimp3/audio_stream_mp3.cpp b/modules/minimp3/audio_stream_mp3.cpp
index 6af86a96dc..c63ec3cad0 100644
--- a/modules/minimp3/audio_stream_mp3.cpp
+++ b/modules/minimp3/audio_stream_mp3.cpp
@@ -28,11 +28,6 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
-#define MINIMP3_ONLY_MP3
-#define MINIMP3_FLOAT_OUTPUT
-#define MINIMP3_IMPLEMENTATION
-#define MINIMP3_NO_STDIO
-
#include "audio_stream_mp3.h"
#include "core/io/file_access.h"
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 0d5f3dd4c4..d34af58e8e 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -416,6 +416,7 @@ Files extracted from upstream repository:
Some changes have been made in order to fix Windows on ARM build errors, and
to solve some MSVC warnings. See the patches in the `patches` directory.
+`minimp3_ex.cpp` was created to simplify the use of the single header library.
## miniupnpc
diff --git a/thirdparty/minimp3/minimp3_ex.cpp b/thirdparty/minimp3/minimp3_ex.cpp
new file mode 100644
index 0000000000..49c083e4f1
--- /dev/null
+++ b/thirdparty/minimp3/minimp3_ex.cpp
@@ -0,0 +1,5 @@
+#define MINIMP3_IMPLEMENTATION
+#define MINIMP3_FLOAT_OUTPUT
+#define MINIMP3_ONLY_MP3
+#define MINIMP3_NO_STDIO
+#include "minimp3_ex.h"