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.

87 lines
4.5KB

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