2025-10-22 09:20:23 +02:00

167 lines
6.7 KiB
CMake

# ==============================================================================
#
# This file is part of the JUCE framework.
# Copyright (c) Raw Material Software Limited
#
# JUCE is an open source framework subject to commercial or open source
# licensing.
#
# By downloading, installing, or using the JUCE framework, or combining the
# JUCE framework with any other source code, object code, content or any other
# copyrightable work, you agree to the terms of the JUCE End User Licence
# Agreement, and all incorporated terms including the JUCE Privacy Policy and
# the JUCE Website Terms of Service, as applicable, which will bind you. If you
# do not agree to the terms of these agreements, we will not license the JUCE
# framework to you, and you must discontinue the installation or download
# process and cease use of the JUCE framework.
#
# JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
# JUCE Privacy Policy: https://juce.com/juce-privacy-policy
# JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
#
# Or:
#
# You may also use this code under the terms of the AGPLv3:
# https://www.gnu.org/licenses/agpl-3.0.en.html
#
# THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
# WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
# MERCHANTABILITY OR FITNESS FOR A PARTICULAR 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
-Wno-multichar
-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,/Ox> $<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:/MP> /EHsc)
set(needs_debug_flag TRUE)
if(POLICY CMP0141)
set(policy_state)
cmake_policy(GET CMP0141 policy_state)
if("${policy_state}" STREQUAL "NEW")
set(needs_debug_flag FALSE)
endif()
endif()
if(needs_debug_flag)
target_compile_options(juce_recommended_config_flags INTERFACE $<${debug_config}:/Z7>)
endif()
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((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>)
# Xcode 15.0 requires this flag to avoid a compiler bug
target_link_libraries(juce_recommended_lto_flags INTERFACE
$<$<CONFIG:Release>:$<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","AppleClang">:-Wl,-weak_reference_mismatches,weak>>)
endif()