From e6d25114a6521ed86a809483f251d71ddf221232 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 31 Jan 2020 18:25:51 +0100 Subject: [PATCH 1/3] Make the build sytem MinGW-compatible --- benchmarks/CMakeLists.txt | 15 +++++-------- cmake/SfizzConfig.cmake | 31 +++++++++++++++------------ cmake/SfizzSIMDSourceFilesCheck.cmake | 2 +- src/CMakeLists.txt | 6 ++---- src/sfizz/Debug.h | 2 ++ 5 files changed, 27 insertions(+), 29 deletions(-) diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 891e7743..cd888984 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -96,8 +96,7 @@ target_include_directories(bm_pointerIterationOrOffsets PRIVATE ../src/sfizz ../ if (NOT WIN32) add_executable(bm_resample BM_resample.cpp ${BENCHMARK_SIMD_SOURCES}) - target_link_libraries(bm_resample PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main samplerate) - sfizz_link_libsndfile(bm_resample) + target_link_libraries(bm_resample PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main samplerate sfizz-sndfile) target_include_directories(bm_resample PRIVATE ../src/sfizz ../src/external) endif() @@ -106,23 +105,19 @@ target_link_libraries(bm_envelopes PRIVATE absl::span absl::algorithm benchmark: target_include_directories(bm_envelopes PRIVATE ../src/sfizz ../src/external) add_executable(bm_wavfile BM_wavfile.cpp ${BENCHMARK_SIMD_SOURCES}) -target_link_libraries(bm_wavfile PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main) -sfizz_link_libsndfile(bm_wavfile) +target_link_libraries(bm_wavfile PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main sfizz-sndfile) target_include_directories(bm_wavfile PRIVATE ../src/sfizz ../src/external) add_executable(bm_flacfile BM_flacfile.cpp ${BENCHMARK_SIMD_SOURCES}) -target_link_libraries(bm_flacfile PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main) -sfizz_link_libsndfile(bm_flacfile) +target_link_libraries(bm_flacfile PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main sfizz-sndfile) target_include_directories(bm_flacfile PRIVATE ../src/sfizz ../src/external) add_executable(bm_readChunk BM_readChunk.cpp ${BENCHMARK_SIMD_SOURCES}) -target_link_libraries(bm_readChunk PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main) -sfizz_link_libsndfile(bm_readChunk) +target_link_libraries(bm_readChunk PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main sfizz-sndfile) target_include_directories(bm_readChunk PRIVATE ../src/sfizz ../src/external) add_executable(bm_resampleChunk BM_resampleChunk.cpp ${BENCHMARK_SIMD_SOURCES}) -target_link_libraries(bm_resampleChunk PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main) -sfizz_link_libsndfile(bm_resampleChunk) +target_link_libraries(bm_resampleChunk PRIVATE absl::span absl::algorithm benchmark::benchmark benchmark::benchmark_main sfizz-sndfile) target_include_directories(bm_resampleChunk PRIVATE ../src/sfizz ../src/external) add_custom_target(sfizz_benchmarks) diff --git a/cmake/SfizzConfig.cmake b/cmake/SfizzConfig.cmake index afa43821..8dba5719 100644 --- a/cmake/SfizzConfig.cmake +++ b/cmake/SfizzConfig.cmake @@ -12,34 +12,37 @@ set (CMAKE_POSITION_INDEPENDENT_CODE ON) set (CMAKE_CXX_VISIBILITY_PRESET hidden) set (CMAKE_VISIBILITY_INLINES_HIDDEN ON) +# Set Windows compatibility level to Vista +if (WIN32) + add_compile_definitions(_WIN32_WINNT=0x600) +endif() + # Add required flags for the builds -if (UNIX) +if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") add_compile_options(-Wall) add_compile_options(-Wextra) add_compile_options(-ffast-math) add_compile_options(-fno-omit-frame-pointer) # For debugging purposes -endif() - -if (WIN32) +elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") set(CMAKE_CXX_STANDARD 17) add_compile_options(/Zc:__cplusplus) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() -if (WIN32 OR SFIZZ_USE_VCPKG) +add_library(sfizz-sndfile INTERFACE) + +if (SFIZZ_USE_VCPKG OR CMAKE_CXX_COMPILER_ID MATCHES "MSVC") find_package(LibSndFile REQUIRED) find_path(SNDFILE_INCLUDE_DIR sndfile.hh) + target_include_directories(sfizz-sndfile INTERFACE "${SNDFILE_INCLUDE_DIR}") + target_link_libraries(sfizz-sndfile INTERFACE sndfile-static) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(SNDFILE "sndfile" REQUIRED) + target_include_directories(sfizz-sndfile INTERFACE ${SNDFILE_INCLUDE_DIRS}) + target_link_libraries(sfizz-sndfile INTERFACE ${SNDFILE_LIBRARIES}) endif() -function(SFIZZ_LINK_LIBSNDFILE TARGET) - if (WIN32 OR SFIZZ_USE_VCPKG) - target_link_libraries (${TARGET} PRIVATE sndfile-static) - target_include_directories(${TARGET} PUBLIC ${SNDFILE_INCLUDE_DIR}) - else() - target_link_libraries(${TARGET} PRIVATE sndfile) - endif() -endfunction(SFIZZ_LINK_LIBSNDFILE) - # If we build with Clang use libc++ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT ANDROID) set(USE_LIBCPP ON CACHE BOOL "Use libc++ with clang") diff --git a/cmake/SfizzSIMDSourceFilesCheck.cmake b/cmake/SfizzSIMDSourceFilesCheck.cmake index 188159fc..be5212da 100644 --- a/cmake/SfizzSIMDSourceFilesCheck.cmake +++ b/cmake/SfizzSIMDSourceFilesCheck.cmake @@ -12,7 +12,7 @@ if (HAVE_X86INTRIN_H AND UNIX) add_compile_options (-DHAVE_X86INTRIN_H) set (SFIZZ_SIMD_SOURCES sfizz/SIMDSSE.cpp) elseif (HAVE_INTRIN_H AND WIN32) - add_compile_options (/DHAVE_INTRIN_H) + add_compile_options (-DHAVE_INTRIN_H) set (SFIZZ_SIMD_SOURCES sfizz/SIMDSSE.cpp) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") add_compile_options (-DHAVE_ARM_NEON_H) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1306e016..66708d72 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -25,8 +25,7 @@ target_sources(sfizz_static PRIVATE ${SFIZZ_SOURCES} sfizz/sfizz_wrapper.cpp) target_include_directories (sfizz_static PUBLIC .) target_include_directories (sfizz_static PUBLIC external) target_link_libraries (sfizz_static PUBLIC absl::strings absl::span) -target_link_libraries (sfizz_static PRIVATE sfizz_parser absl::flat_hash_map Threads::Threads) -sfizz_link_libsndfile(sfizz_static) +target_link_libraries (sfizz_static PRIVATE sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile) add_library (sfizz::parser ALIAS sfizz_parser) add_library (sfizz::sfizz ALIAS sfizz_static) @@ -40,11 +39,10 @@ if (SFIZZ_SHARED) target_sources(sfizz_shared PRIVATE ${SFIZZ_SOURCES} sfizz/sfizz_wrapper.cpp sfizz/sfizz.cpp) target_include_directories (sfizz_shared PRIVATE .) target_include_directories (sfizz_static PRIVATE external) - target_link_libraries (sfizz_shared PRIVATE absl::strings absl::span sfizz_parser absl::flat_hash_map Threads::Threads) + target_link_libraries (sfizz_shared PRIVATE absl::strings absl::span sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile) target_compile_definitions(sfizz_shared PRIVATE SFIZZ_EXPORT_SYMBOLS) set_target_properties (sfizz_shared PROPERTIES OUTPUT_NAME sfizz PUBLIC_HEADER "sfizz.h;sfizz.hpp") set_property (TARGET sfizz_shared PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR}) - sfizz_link_libsndfile(sfizz_shared) sfizz_enable_lto_if_needed(sfizz_shared) configure_file (${PROJECT_SOURCE_DIR}/scripts/sfizz.pc.in sfizz.pc @ONLY) if (UNIX) diff --git a/src/sfizz/Debug.h b/src/sfizz/Debug.h index 2e766fd4..6ef5a8b7 100644 --- a/src/sfizz/Debug.h +++ b/src/sfizz/Debug.h @@ -27,7 +27,9 @@ #endif #elif (_WIN32 || _WIN64) +#ifdef _MSC_VER #pragma intrinsic(__debugbreak) +#endif #define ASSERTFALSE \ { \ std::cerr << "Assert failed at " << __FILE__ << ":" << __LINE__ << '\n'; \ From d4abf9bedb5e8d2f314b025bde1e16962580cad6 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 31 Jan 2020 18:58:35 +0100 Subject: [PATCH 2/3] Allow it to build on 32-bit --- cmake/SfizzConfig.cmake | 5 +++++ src/external/atomic_queue/defs.h | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/SfizzConfig.cmake b/cmake/SfizzConfig.cmake index 8dba5719..7b7d1a37 100644 --- a/cmake/SfizzConfig.cmake +++ b/cmake/SfizzConfig.cmake @@ -28,6 +28,11 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") add_compile_options(/Zc:__cplusplus) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() +if (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") + if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + add_compile_options(-msse2) + endif() +endif() add_library(sfizz-sndfile INTERFACE) diff --git a/src/external/atomic_queue/defs.h b/src/external/atomic_queue/defs.h index 0207032c..1f721f6c 100644 --- a/src/external/atomic_queue/defs.h +++ b/src/external/atomic_queue/defs.h @@ -6,7 +6,8 @@ #include -#if defined(__x86_64__) || defined(_M_X64) +#if defined(__x86_64__) || defined(_M_X64) || \ + defined(__i386__) || defined(_M_IX86) #include namespace atomic_queue { constexpr int CACHE_LINE_SIZE = 64; From c24a16cce7189414ccdf644d105997cd40b49725 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 31 Jan 2020 19:02:04 +0100 Subject: [PATCH 3/3] Search JACK with pkg-config so it can fail early if missing --- clients/CMakeLists.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/clients/CMakeLists.txt b/clients/CMakeLists.txt index f62098d7..6eb78e2a 100644 --- a/clients/CMakeLists.txt +++ b/clients/CMakeLists.txt @@ -1,11 +1,10 @@ project (sfizz) -if (APPLE) - include_directories (SYSTEM /usr/local/opt/jack/include) - link_directories (/usr/local/opt/jack/lib) -endif() +find_package(PkgConfig REQUIRED) +pkg_check_modules(JACK "jack" REQUIRED) add_executable (sfizz_jack jack_client.cpp) -target_link_libraries (sfizz_jack sfizz::sfizz jack absl::flags_parse) +target_include_directories (sfizz_jack PRIVATE ${JACK_INCLUDE_DIRS}) +target_link_libraries (sfizz_jack PRIVATE sfizz::sfizz jack absl::flags_parse ${JACK_LIBRARIES}) sfizz_enable_lto_if_needed (sfizz_jack) install (TARGETS sfizz_jack DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)