mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-09 23:34:20 +00:00
CMake: Add targets for recommended flags
This commit is contained in:
parent
ec4cbdca1e
commit
eb01832c48
12 changed files with 184 additions and 17 deletions
|
|
@ -22,6 +22,8 @@ set_property(GLOBAL PROPERTY USE_FOLDERS YES)
|
|||
|
||||
include(extras/Build/CMake/JUCEUtils.cmake)
|
||||
|
||||
juce_disable_default_flags()
|
||||
|
||||
set_directory_properties(PROPERTIES
|
||||
JUCE_COMPANY_NAME "JUCE"
|
||||
JUCE_COMPANY_WEBSITE "juce.com"
|
||||
|
|
|
|||
|
|
@ -513,3 +513,40 @@ quick proof-of-concept demo apps with minimal set-up. For any use-case more comp
|
|||
proof-of-concept, you should prefer the `juce_add_gui_app`, `juce_add_plugin`, or
|
||||
`juce_add_console_app` functions, which provide more fine-grained control over the properties of
|
||||
your target.
|
||||
|
||||
### `juce_disable_default_flags`
|
||||
|
||||
```
|
||||
juce_disable_default_flags()
|
||||
```
|
||||
|
||||
This function sets the `CMAKE_<LANG>_FLAGS_<MODE>` to empty in the current directory and below,
|
||||
allowing alternative optimisation/debug flags to be supplied without conflicting with the
|
||||
CMake-supplied defaults.
|
||||
|
||||
### `juce::juce_recommended_warning_flags
|
||||
|
||||
```
|
||||
target_link_libraries(myTarget PRIVATE juce::juce_recommended_warning_flags)
|
||||
```
|
||||
|
||||
This is a target which can be linked to other targets using `target_link_libraries`, in order to
|
||||
enable the recommended JUCE warnings when building them.
|
||||
|
||||
### `juce::juce_recommended_config_flags
|
||||
|
||||
```
|
||||
target_link_libraries(myTarget PRIVATE juce::juce_recommended_config_flags)
|
||||
```
|
||||
|
||||
This is a target which can be linked to other targets using `target_link_libraries`, in order to
|
||||
enable the recommended JUCE optimisation and debug flags.
|
||||
|
||||
### `juce::juce_recommended_lto_flags
|
||||
|
||||
```
|
||||
target_link_libraries(myTarget PRIVATE juce::juce_recommended_lto_flags)
|
||||
```
|
||||
|
||||
This is a target which can be linked to other targets using `target_link_libraries`, in order to
|
||||
enable the recommended JUCE link time optimisation settings.
|
||||
|
|
|
|||
|
|
@ -23,7 +23,22 @@ function(_juce_add_pips)
|
|||
"${CMAKE_CURRENT_SOURCE_DIR}/*.h")
|
||||
|
||||
foreach(header IN ITEMS ${headers})
|
||||
juce_add_pip(${header})
|
||||
juce_add_pip(${header} added_target)
|
||||
target_link_libraries(${added_target} PRIVATE
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
||||
get_target_property(active_targets ${added_target} JUCE_ACTIVE_PLUGIN_TARGETS)
|
||||
|
||||
if(active_targets)
|
||||
foreach(plugin_target IN LISTS active_targets)
|
||||
target_link_libraries(${plugin_target} PRIVATE
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
endforeach()
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@ target_link_libraries(DemoRunner PRIVATE
|
|||
juce::juce_opengl
|
||||
juce::juce_osc
|
||||
juce::juce_product_unlocking
|
||||
juce::juce_video)
|
||||
juce::juce_video
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
||||
juce_add_bundle_resources_directory(DemoRunner ../Assets)
|
||||
|
|
|
|||
|
|
@ -24,4 +24,8 @@ target_sources(AudioPerformanceTest PRIVATE
|
|||
target_compile_definitions(AudioPerformanceTest PRIVATE
|
||||
JUCE_USE_CURL=0 JUCE_WEB_BROWSER=0)
|
||||
|
||||
target_link_libraries(AudioPerformanceTest PRIVATE juce::juce_audio_utils)
|
||||
target_link_libraries(AudioPerformanceTest PRIVATE
|
||||
juce::juce_audio_utils
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
|
|
@ -51,8 +51,9 @@ target_link_libraries(AudioPluginHost PRIVATE
|
|||
juce::juce_cryptography
|
||||
juce::juce_dsp
|
||||
juce::juce_opengl
|
||||
juce::juce_video)
|
||||
juce::juce_video
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
|
||||
juce_add_bundle_resources_directory(AudioPluginHost ../../examples/Assets)
|
||||
endif()
|
||||
juce_add_bundle_resources_directory(AudioPluginHost ../../examples/Assets)
|
||||
|
|
|
|||
|
|
@ -22,4 +22,8 @@ target_sources(BinaryBuilder PRIVATE Source/Main.cpp)
|
|||
|
||||
target_compile_definitions(BinaryBuilder PRIVATE JUCE_USE_CURL=0)
|
||||
|
||||
target_link_libraries(BinaryBuilder PRIVATE juce::juce_core)
|
||||
target_link_libraries(BinaryBuilder PRIVATE
|
||||
juce::juce_core
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
|
|
@ -1353,7 +1353,7 @@ function(_juce_get_iaa_type_code target out_var)
|
|||
endfunction()
|
||||
|
||||
function(_juce_configure_plugin_targets target)
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.15.0")
|
||||
if(CMAKE_VERSION VERSION_LESS "3.15.0")
|
||||
message(FATAL_ERROR "Plugin targets require CMake 3.15 or higher")
|
||||
endif()
|
||||
|
||||
|
|
@ -1466,7 +1466,7 @@ function(_juce_configure_plugin_targets target)
|
|||
endif()
|
||||
|
||||
if(TARGET ${target}_AUv3)
|
||||
target_link_options(${target}_AUv3 PUBLIC -fapplication-extension -e _NSExtensionMain)
|
||||
target_link_libraries(${target}_AUv3 PUBLIC -fapplication-extension "-e _NSExtensionMain")
|
||||
endif()
|
||||
|
||||
if((TARGET ${target}_AUv3) AND (TARGET ${target}_Standalone))
|
||||
|
|
@ -1480,7 +1480,7 @@ endfunction()
|
|||
|
||||
# ==================================================================================================
|
||||
|
||||
function(_juce_set_property_if_not_set target property)
|
||||
function(_juce_set_generic_property_if_not_set target property)
|
||||
list(LENGTH ARGN num_extra_args)
|
||||
|
||||
if(num_extra_args EQUAL 0)
|
||||
|
|
@ -1488,13 +1488,17 @@ function(_juce_set_property_if_not_set target property)
|
|||
endif()
|
||||
|
||||
set(existing_property)
|
||||
get_target_property(existing_property ${target} JUCE_${property})
|
||||
get_target_property(existing_property ${target} ${property})
|
||||
|
||||
if(${existing_property} STREQUAL "existing_property-NOTFOUND")
|
||||
set_target_properties(${target} PROPERTIES JUCE_${property} "${ARGN}")
|
||||
set_target_properties(${target} PROPERTIES ${property} "${ARGN}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(_juce_set_property_if_not_set target property)
|
||||
_juce_set_generic_property_if_not_set(${target} JUCE_${property} ${ARGN})
|
||||
endfunction()
|
||||
|
||||
function(_juce_make_valid_4cc out_var)
|
||||
string(RANDOM LENGTH 1 ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZ" head)
|
||||
string(RANDOM LENGTH 3 ALPHABET "abcdefghijklmnopqrstuvwxyz" tail)
|
||||
|
|
@ -1958,6 +1962,10 @@ function(juce_add_pip header)
|
|||
message(FATAL_ERROR "PIP kind must be either AudioProcessor, Component, or Console")
|
||||
endif()
|
||||
|
||||
if(NOT ARGV1 STREQUAL "")
|
||||
set("${ARGV1}" "${JUCE_PIP_NAME}" PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
# Generate Main.cpp
|
||||
_juce_get_metadata("${metadata_dict}" mainClass JUCE_PIP_MAIN_CLASS)
|
||||
get_target_property(juce_library_code ${JUCE_PIP_NAME} JUCE_GENERATED_SOURCES_DIRECTORY)
|
||||
|
|
@ -2082,3 +2090,83 @@ function(juce_set_vst2_sdk_path path)
|
|||
$<TARGET_PROPERTY:juce::juce_vst3_headers,INTERFACE_INCLUDE_DIRECTORIES>
|
||||
"${path}")
|
||||
endfunction()
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
function(juce_disable_default_flags)
|
||||
set(langs C CXX)
|
||||
set(modes DEBUG RELEASE RELWITHDEBINFO MINSIZEREL)
|
||||
|
||||
foreach(lang IN LISTS langs)
|
||||
foreach(mode IN LISTS modes)
|
||||
list(FILTER CMAKE_${lang}_FLAGS_${mode} INCLUDE REGEX "[/-]M[TD]d?")
|
||||
set(CMAKE_${lang}_FLAGS_${mode} "${CMAKE_${lang}_FLAGS_${mode}}" PARENT_SCOPE)
|
||||
endforeach()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
add_library(juce_recommended_warning_flags INTERFACE)
|
||||
add_library(juce::juce_recommended_warning_flags ALIAS juce_recommended_warning_flags)
|
||||
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC"))
|
||||
target_compile_options(juce_recommended_warning_flags INTERFACE "/W4")
|
||||
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
|
||||
target_compile_options(juce_recommended_warning_flags INTERFACE
|
||||
-Wall -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized
|
||||
-Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion
|
||||
-Wconditional-uninitialized -Woverloaded-virtual -Wreorder
|
||||
-Wconstant-conversion -Wsign-conversion -Wunused-private-field
|
||||
-Wbool-conversion -Wextra-semi -Wunreachable-code
|
||||
-Wzero-as-null-pointer-constant -Wcast-align
|
||||
-Winconsistent-missing-destructor-override -Wshift-sign-overflow
|
||||
-Wnullable-to-nonnull-conversion -Wno-missing-field-initializers
|
||||
-Wno-ignored-qualifiers -Wswitch-enum)
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
target_compile_options(juce_recommended_warning_flags INTERFACE
|
||||
-Wall -Wextra -Wstrict-aliasing -Wuninitialized -Wunused-parameter
|
||||
-Wsign-compare -Woverloaded-virtual -Wreorder -Wsign-conversion
|
||||
-Wunreachable-code -Wzero-as-null-pointer-constant -Wcast-align
|
||||
-Wno-implicit-fallthrough -Wno-maybe-uninitialized
|
||||
-Wno-missing-field-initializers -Wno-ignored-qualifiers -Wswitch-enum
|
||||
-Wswitch-default -Wredundant-decls)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.0.0")
|
||||
target_compile_options(juce_recommended_warning_flags INTERFACE "-Wno-strict-overflow")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
install(TARGETS juce_recommended_warning_flags EXPORT JUCE)
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
add_library(juce_recommended_config_flags INTERFACE)
|
||||
add_library(juce::juce_recommended_config_flags ALIAS juce_recommended_config_flags)
|
||||
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC"))
|
||||
target_compile_options(juce_recommended_config_flags INTERFACE
|
||||
$<$<CONFIG:Debug>:/Od /MP /EHsc>
|
||||
$<$<CONFIG:Release>:/Ox /MP /EHsc>)
|
||||
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||
OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
|
||||
target_compile_options(juce_recommended_config_flags INTERFACE
|
||||
$<$<CONFIG:Debug>:-g -O0>
|
||||
$<$<CONFIG:Release>:-O3>)
|
||||
endif()
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
add_library(juce_recommended_lto_flags INTERFACE)
|
||||
add_library(juce::juce_recommended_lto_flags ALIAS juce_recommended_lto_flags)
|
||||
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC"))
|
||||
target_compile_options(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:/GL>)
|
||||
target_link_libraries(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:-LTCG>)
|
||||
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||
OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
|
||||
target_compile_options(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:-flto>)
|
||||
target_link_libraries(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:-flto>)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -29,7 +29,11 @@ if(JUCE_BUILD_HELPER_TOOLS)
|
|||
JUCE_DISABLE_JUCE_VERSION_PRINTING=1
|
||||
JUCE_USE_CURL=0)
|
||||
|
||||
target_link_libraries(juceaide PRIVATE juce::juce_build_tools)
|
||||
target_link_libraries(juceaide PRIVATE
|
||||
juce::juce_build_tools
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
||||
export(TARGETS juceaide
|
||||
NAMESPACE juce_tools::
|
||||
|
|
|
|||
|
|
@ -27,4 +27,7 @@ target_link_libraries(NetworkGraphicsDemo PRIVATE
|
|||
juce::juce_audio_utils
|
||||
juce::juce_cryptography
|
||||
juce::juce_opengl
|
||||
juce::juce_osc)
|
||||
juce::juce_osc
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
|
|
@ -159,4 +159,7 @@ target_link_libraries(Projucer PRIVATE
|
|||
ProjucerData
|
||||
juce::juce_build_tools
|
||||
juce::juce_cryptography
|
||||
juce::juce_gui_extra)
|
||||
juce::juce_gui_extra
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
|
|
@ -33,4 +33,7 @@ target_link_libraries(UnitTestRunner PRIVATE
|
|||
juce::juce_opengl
|
||||
juce::juce_osc
|
||||
juce::juce_product_unlocking
|
||||
juce::juce_video)
|
||||
juce::juce_video
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue