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.

102 lines
5.1KB

  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 -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing
  41. -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare
  42. -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion
  43. -Wsign-conversion -Wbool-conversion -Wextra-semi -Wunreachable-code
  44. -Wcast-align -Wshift-sign-overflow -Wmissing-prototypes
  45. -Wnullable-to-nonnull-conversion -Wno-ignored-qualifiers -Wswitch-enum
  46. -Wpedantic -Wdeprecated -Wfloat-equal
  47. $<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>:
  48. -Wzero-as-null-pointer-constant -Wunused-private-field
  49. -Woverloaded-virtual -Wreorder
  50. -Winconsistent-missing-destructor-override>
  51. $<$<OR:$<COMPILE_LANGUAGE:OBJC>,$<COMPILE_LANGUAGE:OBJCXX>>:
  52. -Wunguarded-availability -Wunguarded-availability-new>)
  53. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  54. target_compile_options(juce_recommended_warning_flags INTERFACE
  55. -Wall -Wextra -Wpedantic -Wstrict-aliasing -Wuninitialized
  56. -Wunused-parameter -Wsign-compare -Wsign-conversion -Wunreachable-code
  57. -Wcast-align -Wno-implicit-fallthrough -Wno-maybe-uninitialized
  58. -Wno-ignored-qualifiers -Wswitch-enum
  59. -Wredundant-decls -Wno-strict-overflow -Wshadow -Wfloat-equal
  60. $<$<COMPILE_LANGUAGE:CXX>:
  61. -Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant>)
  62. endif()
  63. # ==================================================================================================
  64. add_library(juce_recommended_config_flags INTERFACE)
  65. add_library(juce::juce_recommended_config_flags ALIAS juce_recommended_config_flags)
  66. if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC"))
  67. _juce_get_debug_config_genex(debug_config)
  68. target_compile_options(juce_recommended_config_flags INTERFACE
  69. $<IF:${debug_config},/Od /Zi,/Ox> $<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:/MP> /EHsc)
  70. elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  71. OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
  72. OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
  73. _juce_get_debug_config_genex(debug_config)
  74. target_compile_options(juce_recommended_config_flags INTERFACE
  75. $<${debug_config}:-g -O0>
  76. $<$<CONFIG:Release>:-O3>)
  77. endif()
  78. # ==================================================================================================
  79. add_library(juce_recommended_lto_flags INTERFACE)
  80. add_library(juce::juce_recommended_lto_flags ALIAS juce_recommended_lto_flags)
  81. if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC"))
  82. target_compile_options(juce_recommended_lto_flags INTERFACE
  83. $<$<CONFIG:Release>:$<IF:$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">,-GL,-flto>>)
  84. target_link_libraries(juce_recommended_lto_flags INTERFACE
  85. $<$<CONFIG:Release>:$<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:-LTCG>>)
  86. elseif((NOT MINGW) AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  87. OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
  88. OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")))
  89. target_compile_options(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:-flto>)
  90. target_link_libraries(juce_recommended_lto_flags INTERFACE $<$<CONFIG:Release>:-flto>)
  91. endif()