2020-05-01 08:32:12 +02:00
|
|
|
include(CMakeDependentOption)
|
2020-12-13 14:35:30 +01:00
|
|
|
include(CheckCXXCompilerFlag)
|
2020-12-13 16:12:15 +01:00
|
|
|
include(GNUWarnings)
|
2020-05-01 08:32:12 +02:00
|
|
|
|
2020-03-14 22:55:03 +01:00
|
|
|
set(CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard to be used")
|
|
|
|
|
set(CMAKE_C_STANDARD 99 CACHE STRING "C standard to be used")
|
2019-11-25 16:10:30 +01:00
|
|
|
|
|
|
|
|
# Export the compile_commands.json file
|
2020-12-14 07:49:02 +01:00
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
2019-11-25 16:10:30 +01:00
|
|
|
|
|
|
|
|
# Only install what's explicitely said
|
2020-12-14 07:49:02 +01:00
|
|
|
set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY true)
|
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
|
|
|
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
2019-11-25 16:10:30 +01:00
|
|
|
|
2021-04-08 01:11:06 +02:00
|
|
|
# Set C++ compatibility level
|
|
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND CMAKE_CXX_STANDARD LESS 17)
|
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
2021-04-08 04:13:57 +02:00
|
|
|
elseif((SFIZZ_LV2_UI OR SFIZZ_VST OR SFIZZ_AU OR SFIZZ_VST2) AND CMAKE_CXX_STANDARD LESS 14)
|
2021-04-08 01:11:06 +02:00
|
|
|
# if the UI is part of the build, make it 14
|
|
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
|
|
|
endif()
|
|
|
|
|
|
2021-04-07 04:25:08 +02:00
|
|
|
# Process sources as UTF-8
|
|
|
|
|
if(MSVC)
|
|
|
|
|
add_compile_options("/utf-8")
|
|
|
|
|
endif()
|
|
|
|
|
|
2020-03-06 14:37:25 +01:00
|
|
|
# Set Windows compatibility level to 7
|
2020-12-14 07:49:02 +01:00
|
|
|
if(WIN32)
|
2020-03-06 14:37:25 +01:00
|
|
|
add_compile_definitions(_WIN32_WINNT=0x601)
|
2020-01-31 18:25:51 +01:00
|
|
|
endif()
|
|
|
|
|
|
2020-09-05 07:03:57 +02:00
|
|
|
# Set macOS compatibility level
|
2020-12-14 07:49:02 +01:00
|
|
|
if(APPLE)
|
2020-09-05 07:03:57 +02:00
|
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9")
|
|
|
|
|
endif()
|
|
|
|
|
|
2020-08-29 04:54:18 +02:00
|
|
|
# Do not define macros `min` and `max`
|
2020-12-14 07:49:02 +01:00
|
|
|
if(WIN32)
|
2020-08-29 04:54:18 +02:00
|
|
|
add_compile_definitions(NOMINMAX)
|
|
|
|
|
endif()
|
|
|
|
|
|
2020-04-01 18:42:41 +02:00
|
|
|
# The variable CMAKE_SYSTEM_PROCESSOR is incorrect on Visual studio...
|
|
|
|
|
# see https://gitlab.kitware.com/cmake/cmake/issues/15170
|
|
|
|
|
|
2020-12-14 07:49:02 +01:00
|
|
|
if(NOT SFIZZ_SYSTEM_PROCESSOR)
|
2020-04-02 16:53:55 +02:00
|
|
|
if(MSVC)
|
|
|
|
|
set(SFIZZ_SYSTEM_PROCESSOR "${MSVC_CXX_ARCHITECTURE_ID}")
|
|
|
|
|
else()
|
|
|
|
|
set(SFIZZ_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
|
|
endif()
|
2020-04-01 18:42:41 +02:00
|
|
|
endif()
|
|
|
|
|
|
2019-11-25 16:10:30 +01:00
|
|
|
# Add required flags for the builds
|
2020-12-14 07:49:02 +01:00
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
2020-12-13 16:12:15 +01:00
|
|
|
gw_warn(-Wall -Wextra -Wno-multichar -Werror=return-type)
|
2020-12-14 07:49:02 +01:00
|
|
|
if(SFIZZ_SYSTEM_PROCESSOR MATCHES "^(i.86|x86_64)$")
|
2020-04-01 18:42:41 +02:00
|
|
|
add_compile_options(-msse2)
|
2020-09-18 22:04:13 +01:00
|
|
|
elseif(SFIZZ_SYSTEM_PROCESSOR MATCHES "^(arm.*)$")
|
2020-09-20 15:06:01 +01:00
|
|
|
add_compile_options(-mfpu=neon)
|
2020-12-14 07:49:02 +01:00
|
|
|
if(NOT ANDROID)
|
2020-10-12 21:47:48 +09:00
|
|
|
add_compile_options(-mfloat-abi=hard)
|
|
|
|
|
endif()
|
2020-04-01 18:42:41 +02:00
|
|
|
endif()
|
2020-12-14 07:49:02 +01:00
|
|
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
2020-01-05 00:14:25 +01:00
|
|
|
add_compile_options(/Zc:__cplusplus)
|
2020-01-19 00:22:16 +01:00
|
|
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
2019-11-25 16:10:30 +01:00
|
|
|
endif()
|
|
|
|
|
|
2020-09-02 00:36:49 +02:00
|
|
|
function(sfizz_enable_fast_math NAME)
|
2020-12-14 07:49:02 +01:00
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
2020-09-02 00:36:49 +02:00
|
|
|
target_compile_options("${NAME}" PRIVATE "-ffast-math")
|
2020-11-27 00:08:08 +01:00
|
|
|
elseif(MSVC)
|
|
|
|
|
target_compile_options("${NAME}" PRIVATE "/fp:fast")
|
2020-09-02 00:36:49 +02:00
|
|
|
endif()
|
|
|
|
|
endfunction()
|
|
|
|
|
|
2020-05-01 08:32:12 +02:00
|
|
|
# If we build with Clang, optionally use libc++. Enabled by default on Apple OS.
|
|
|
|
|
cmake_dependent_option(USE_LIBCPP "Use libc++ with clang" "${APPLE}"
|
|
|
|
|
"CMAKE_CXX_COMPILER_ID MATCHES Clang" OFF)
|
2020-12-14 07:49:02 +01:00
|
|
|
if(USE_LIBCPP)
|
2020-05-01 08:32:12 +02:00
|
|
|
add_compile_options(-stdlib=libc++)
|
|
|
|
|
# Presumably need the above for linking too, maybe other options missing as well
|
|
|
|
|
add_link_options(-stdlib=libc++) # New command on CMake master, not in 3.12 release
|
|
|
|
|
add_link_options(-lc++abi) # New command on CMake master, not in 3.12 release
|
2020-03-11 15:44:03 +01:00
|
|
|
endif()
|
|
|
|
|
|
2020-01-19 01:10:42 +01:00
|
|
|
# Don't show build information when building a different project
|
2020-12-14 07:49:02 +01:00
|
|
|
function(show_build_info_if_needed)
|
|
|
|
|
if(CMAKE_PROJECT_NAME STREQUAL "sfizz")
|
|
|
|
|
message(STATUS "
|
2020-01-19 01:10:42 +01:00
|
|
|
Project name: ${PROJECT_NAME}
|
|
|
|
|
Build type: ${CMAKE_BUILD_TYPE}
|
2020-04-02 16:30:37 +02:00
|
|
|
Build processor: ${SFIZZ_SYSTEM_PROCESSOR}
|
2020-01-19 01:10:42 +01:00
|
|
|
Build using LTO: ${ENABLE_LTO}
|
|
|
|
|
Build as shared library: ${SFIZZ_SHARED}
|
|
|
|
|
Build JACK stand-alone client: ${SFIZZ_JACK}
|
2021-02-04 20:43:55 +01:00
|
|
|
Build render client: ${SFIZZ_RENDER}
|
2020-01-19 01:10:42 +01:00
|
|
|
Build LV2 plug-in: ${SFIZZ_LV2}
|
2020-08-29 04:54:18 +02:00
|
|
|
Build LV2 user interface: ${SFIZZ_LV2_UI}
|
2020-03-14 21:08:39 +01:00
|
|
|
Build VST plug-in: ${SFIZZ_VST}
|
2020-05-13 04:10:16 -07:00
|
|
|
Build AU plug-in: ${SFIZZ_AU}
|
2020-01-19 01:10:42 +01:00
|
|
|
Build benchmarks: ${SFIZZ_BENCHMARKS}
|
|
|
|
|
Build tests: ${SFIZZ_TESTS}
|
2021-02-04 20:43:55 +01:00
|
|
|
Build demos: ${SFIZZ_DEMOS}
|
|
|
|
|
Build devtools: ${SFIZZ_DEVTOOLS}
|
2020-10-07 16:42:25 +02:00
|
|
|
Use sndfile: ${SFIZZ_USE_SNDFILE}
|
2020-02-26 16:10:35 +01:00
|
|
|
Use vcpkg: ${SFIZZ_USE_VCPKG}
|
2020-08-29 04:54:18 +02:00
|
|
|
Statically link dependencies: ${SFIZZ_STATIC_DEPENDENCIES}
|
2020-05-01 08:32:12 +02:00
|
|
|
Use clang libc++: ${USE_LIBCPP}
|
2020-05-19 23:42:10 +02:00
|
|
|
Release asserts: ${SFIZZ_RELEASE_ASSERTS}
|
2020-01-19 01:10:42 +01:00
|
|
|
|
|
|
|
|
Install prefix: ${CMAKE_INSTALL_PREFIX}
|
|
|
|
|
LV2 destination directory: ${LV2PLUGIN_INSTALL_DIR}
|
|
|
|
|
|
|
|
|
|
Compiler CXX debug flags: ${CMAKE_CXX_FLAGS_DEBUG}
|
|
|
|
|
Compiler CXX release flags: ${CMAKE_CXX_FLAGS_RELEASE}
|
|
|
|
|
Compiler CXX min size flags: ${CMAKE_CXX_FLAGS_MINSIZEREL}
|
|
|
|
|
")
|
|
|
|
|
endif()
|
|
|
|
|
endfunction()
|