mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
138 lines
5.5 KiB
CMake
138 lines
5.5 KiB
CMake
# ==============================================================================
|
|
#
|
|
# This file is part of the JUCE library.
|
|
# Copyright (c) 2022 - Raw Material Software Limited
|
|
#
|
|
# JUCE is an open source library subject to commercial or open-source
|
|
# licensing.
|
|
#
|
|
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
|
# Agreement and JUCE Privacy Policy.
|
|
#
|
|
# End User License Agreement: www.juce.com/juce-7-licence
|
|
# Privacy Policy: www.juce.com/juce-privacy-policy
|
|
#
|
|
# Or: You may also use this code under the terms of the GPL v3 (see
|
|
# www.gnu.org/licenses).
|
|
#
|
|
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
|
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
|
# DISCLAIMED.
|
|
#
|
|
# ==============================================================================
|
|
|
|
add_library(juce_recommended_warning_flags INTERFACE)
|
|
add_library(juce::juce_recommended_warning_flags ALIAS juce_recommended_warning_flags)
|
|
|
|
function(_juce_get_debug_config_genex result)
|
|
get_property(debug_configs GLOBAL PROPERTY DEBUG_CONFIGURATIONS)
|
|
if(NOT debug_configs)
|
|
set(debug_configs Debug)
|
|
endif()
|
|
list(TRANSFORM debug_configs REPLACE [[^.+$]] [[$<CONFIG:\0>]])
|
|
list(JOIN debug_configs "," debug_configs)
|
|
# $<CONFIG> doesn't accept multiple configurations until CMake 3.19
|
|
set(${result} "$<OR:${debug_configs}>" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# ==================================================================================================
|
|
|
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_FRONTEND_VARIANT 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
|
|
-Wconstant-conversion
|
|
-Wsign-conversion
|
|
-Wbool-conversion
|
|
-Wextra-semi
|
|
-Wunreachable-code
|
|
-Wcast-align
|
|
-Wshift-sign-overflow
|
|
-Wmissing-prototypes
|
|
-Wnullable-to-nonnull-conversion
|
|
-Wno-ignored-qualifiers
|
|
-Wswitch-enum
|
|
-Wpedantic
|
|
-Wdeprecated
|
|
-Wfloat-equal
|
|
-Wmissing-field-initializers
|
|
$<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>:
|
|
-Wzero-as-null-pointer-constant
|
|
-Wunused-private-field
|
|
-Woverloaded-virtual
|
|
-Wreorder
|
|
-Winconsistent-missing-destructor-override>
|
|
$<$<OR:$<COMPILE_LANGUAGE:OBJC>,$<COMPILE_LANGUAGE:OBJCXX>>:
|
|
-Wunguarded-availability
|
|
-Wunguarded-availability-new>)
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
target_compile_options(juce_recommended_warning_flags INTERFACE
|
|
-Wall
|
|
-Wextra
|
|
-Wpedantic
|
|
-Wstrict-aliasing
|
|
-Wuninitialized
|
|
-Wunused-parameter
|
|
-Wsign-compare
|
|
-Wsign-conversion
|
|
-Wunreachable-code
|
|
-Wcast-align
|
|
-Wno-implicit-fallthrough
|
|
-Wno-maybe-uninitialized
|
|
-Wno-ignored-qualifiers
|
|
-Wswitch-enum
|
|
-Wredundant-decls
|
|
-Wno-strict-overflow
|
|
-Wshadow
|
|
-Wfloat-equal
|
|
-Wmissing-field-initializers
|
|
$<$<COMPILE_LANGUAGE:CXX>:
|
|
-Woverloaded-virtual
|
|
-Wreorder
|
|
-Wzero-as-null-pointer-constant>)
|
|
endif()
|
|
|
|
# ==================================================================================================
|
|
|
|
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_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC"))
|
|
_juce_get_debug_config_genex(debug_config)
|
|
target_compile_options(juce_recommended_config_flags INTERFACE
|
|
$<IF:${debug_config},/Od /Zi,/Ox> $<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:/MP> /EHsc)
|
|
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
|
OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
|
|
_juce_get_debug_config_genex(debug_config)
|
|
target_compile_options(juce_recommended_config_flags INTERFACE
|
|
$<${debug_config}:-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_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC"))
|
|
target_compile_options(juce_recommended_lto_flags INTERFACE
|
|
$<$<CONFIG:Release>:$<IF:$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">,-GL,-flto>>)
|
|
target_link_libraries(juce_recommended_lto_flags INTERFACE
|
|
$<$<CONFIG:Release>:$<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:-LTCG>>)
|
|
elseif((NOT MINGW) AND ((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()
|