The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
5.7KB

  1. # ==============================================================================
  2. #
  3. # This file is part of the JUCE library.
  4. # Copyright (c) 2022 - Raw Material Software Limited
  5. #
  6. # JUCE is an open source library subject to commercial or open-source
  7. # licensing.
  8. #
  9. # By using JUCE, you agree to the terms of both the JUCE 7 End-User License
  10. # Agreement and JUCE Privacy Policy.
  11. #
  12. # End User License Agreement: www.juce.com/juce-7-licence
  13. # Privacy Policy: www.juce.com/juce-privacy-policy
  14. #
  15. # Or: You may also use this code under the terms of the GPL v3 (see
  16. # www.gnu.org/licenses).
  17. #
  18. # JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
  19. # EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
  20. # DISCLAIMED.
  21. #
  22. # ==============================================================================
  23. add_library(juce_recommended_warning_flags INTERFACE)
  24. add_library(juce::juce_recommended_warning_flags ALIAS juce_recommended_warning_flags)
  25. function(_juce_get_debug_config_genex result)
  26. get_property(debug_configs GLOBAL PROPERTY DEBUG_CONFIGURATIONS)
  27. if(NOT debug_configs)
  28. set(debug_configs Debug)
  29. endif()
  30. list(TRANSFORM debug_configs REPLACE [[^.+$]] [[$<CONFIG:\0>]])
  31. list(JOIN debug_configs "," debug_configs)
  32. # $<CONFIG> doesn't accept multiple configurations until CMake 3.19
  33. set(${result} "$<OR:${debug_configs}>" PARENT_SCOPE)
  34. endfunction()
  35. # ==================================================================================================
  36. if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC"))
  37. target_compile_options(juce_recommended_warning_flags INTERFACE "/W4")
  38. elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
  39. target_compile_options(juce_recommended_warning_flags INTERFACE
  40. -Wall
  41. -Wshadow-all
  42. -Wshorten-64-to-32
  43. -Wstrict-aliasing
  44. -Wuninitialized
  45. -Wunused-parameter
  46. -Wconversion
  47. -Wsign-compare
  48. -Wint-conversion
  49. -Wconditional-uninitialized
  50. -Wconstant-conversion
  51. -Wsign-conversion
  52. -Wbool-conversion
  53. -Wextra-semi
  54. -Wunreachable-code
  55. -Wcast-align
  56. -Wshift-sign-overflow
  57. -Wmissing-prototypes
  58. -Wnullable-to-nonnull-conversion
  59. -Wno-ignored-qualifiers
  60. -Wswitch-enum
  61. -Wpedantic
  62. -Wdeprecated
  63. -Wfloat-equal
  64. -Wmissing-field-initializers
  65. $<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>:
  66. -Wzero-as-null-pointer-constant
  67. -Wunused-private-field
  68. -Woverloaded-virtual
  69. -Wreorder
  70. -Winconsistent-missing-destructor-override>
  71. $<$<OR:$<COMPILE_LANGUAGE:OBJC>,$<COMPILE_LANGUAGE:OBJCXX>>:
  72. -Wunguarded-availability
  73. -Wunguarded-availability-new>)
  74. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  75. target_compile_options(juce_recommended_warning_flags INTERFACE
  76. -Wall
  77. -Wextra
  78. -Wpedantic
  79. -Wstrict-aliasing
  80. -Wuninitialized
  81. -Wunused-parameter
  82. -Wsign-compare
  83. -Wsign-conversion
  84. -Wunreachable-code
  85. -Wcast-align
  86. -Wno-implicit-fallthrough
  87. -Wno-maybe-uninitialized
  88. -Wno-ignored-qualifiers
  89. -Wswitch-enum
  90. -Wredundant-decls
  91. -Wno-strict-overflow
  92. -Wshadow
  93. -Wfloat-equal
  94. -Wmissing-field-initializers
  95. $<$<COMPILE_LANGUAGE:CXX>:
  96. -Woverloaded-virtual
  97. -Wreorder
  98. -Wzero-as-null-pointer-constant>)
  99. endif()
  100. # ==================================================================================================
  101. add_library(juce_recommended_config_flags INTERFACE)
  102. add_library(juce::juce_recommended_config_flags ALIAS juce_recommended_config_flags)
  103. if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC"))
  104. _juce_get_debug_config_genex(debug_config)
  105. target_compile_options(juce_recommended_config_flags INTERFACE
  106. $<IF:${debug_config},/Od /Zi,/Ox> $<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:/MP> /EHsc)
  107. elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  108. OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
  109. OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
  110. _juce_get_debug_config_genex(debug_config)
  111. target_compile_options(juce_recommended_config_flags INTERFACE
  112. $<${debug_config}:-g -O0>
  113. $<$<CONFIG:Release>:-O3>)
  114. endif()
  115. # ==================================================================================================
  116. add_library(juce_recommended_lto_flags INTERFACE)
  117. add_library(juce::juce_recommended_lto_flags ALIAS juce_recommended_lto_flags)
  118. if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC"))
  119. target_compile_options(juce_recommended_lto_flags INTERFACE
  120. $<$<CONFIG:Release>:$<IF:$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">,-GL,-flto>>)
  121. target_link_libraries(juce_recommended_lto_flags INTERFACE
  122. $<$<CONFIG:Release>:$<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:-LTCG>>)
  123. elseif((NOT MINGW) AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  124. OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
  125. OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")))
  126. target_compile_options(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:-flto>)
  127. target_link_libraries(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:-flto>)
  128. # Xcode 15.0 requires this flag to avoid a compiler bug
  129. target_link_libraries(juce_recommended_lto_flags INTERFACE
  130. $<$<CONFIG:Release>:$<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","AppleClang">:-Wl,-weak_reference_mismatches,weak>>)
  131. endif()