From 48cdce9a790b6ba7384a36d5b4a6ffadc21a89bd Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 28 Nov 2017 11:00:11 +0100 Subject: [PATCH] Fix compilation with MinGW versions without threads support Older versions of MinGW don't provide std::mutex or std::thread --- .gitmodules | 3 +++ cmake/build_win32.sh | 2 +- plugins/vst_base/RemoteVstPlugin.cpp | 7 ++++++- .../vst_base/RemoteVstPlugin/CMakeLists.txt | 21 +++++++++++++++++++ src/3rdparty/mingw-std-threads | 1 + 5 files changed, 32 insertions(+), 2 deletions(-) create mode 160000 src/3rdparty/mingw-std-threads diff --git a/.gitmodules b/.gitmodules index 94530a197..3f4859b56 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,3 +28,6 @@ [submodule "src/3rdparty/weakjack/weakjack"] path = src/3rdparty/weakjack/weakjack url = https://github.com/x42/weakjack.git +[submodule "src/3rdparty/mingw-std-threads"] + path = src/3rdparty/mingw-std-threads + url = https://github.com/meganz/mingw-std-threads.git diff --git a/cmake/build_win32.sh b/cmake/build_win32.sh index 6fbf5287b..33cd8ecce 100755 --- a/cmake/build_win32.sh +++ b/cmake/build_win32.sh @@ -37,4 +37,4 @@ fi CMAKE_OPTS="-DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS" # shellcheck disable=SC2086 -cmake "$DIR/.." -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN" -DCMAKE_MODULE_PATH="$DIR/../cmake/modules/" $CMAKE_OPTS +cmake "$DIR/.." -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN" $CMAKE_OPTS diff --git a/plugins/vst_base/RemoteVstPlugin.cpp b/plugins/vst_base/RemoteVstPlugin.cpp index db5c99e8f..6110cb253 100644 --- a/plugins/vst_base/RemoteVstPlugin.cpp +++ b/plugins/vst_base/RemoteVstPlugin.cpp @@ -59,7 +59,12 @@ #define USE_WS_PREFIX #include -#include +#ifdef USE_MINGW_THREADS_REPLACEMENT +# include +#else +# include +#endif + #include #include #include diff --git a/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt b/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt index 9c43f436c..59dfd1282 100644 --- a/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt +++ b/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt @@ -4,9 +4,11 @@ project(RemoteVstPlugin set(CMAKE_CXX_STANDARD 11) include(CheckCXXPreprocessor) +include(CheckCXXSourceCompiles) CHECK_CXX_DEFINE(IS_WIN "_WIN32") CHECK_CXX_DEFINE(IS_WIN64 "_WIN64") +CHECK_CXX_DEFINE(IS_MINGW "__MINGW32__") if(NOT IS_WIN) message(FATAL_ERROR "Toolchain used does not target windows.") @@ -35,6 +37,25 @@ if(WIN32) target_link_libraries(${EXE_NAME} Qt5::Core) endif() +if(IS_MINGW) + SET(CMAKE_REQUIRED_FLAGS "-std=c++11") + + CHECK_CXX_SOURCE_COMPILES(" + #include + int main(int argc, const char* argv[]) { + std::mutex m; + return 0; + } + " HAS_STD_MUTEX) + + if(NOT HAS_STD_MUTEX) + target_include_directories(${EXE_NAME} PRIVATE + "${CMAKE_SOURCE_DIR}/src/3rdparty/mingw-std-threads") + target_compile_definitions(${EXE_NAME} PRIVATE + -DUSE_MINGW_THREADS_REPLACEMENT) + endif() +endif() + IF(STRIP) ADD_CUSTOM_COMMAND(TARGET RemoteVstPlugin32 POST_BUILD COMMAND "${STRIP}" "$") ENDIF() diff --git a/src/3rdparty/mingw-std-threads b/src/3rdparty/mingw-std-threads new file mode 160000 index 000000000..10665829d --- /dev/null +++ b/src/3rdparty/mingw-std-threads @@ -0,0 +1 @@ +Subproject commit 10665829daaedc28629e5e9b014fe498c20d73f2