GNU-CXX.cmake 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. include(Compiler/GNU)
  2. __compiler_gnu(CXX)
  3. __compiler_gnu_cxx_standards(CXX)
  4. if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
  5. AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
  6. AND CMAKE_DEPFILE_FLAGS_CXX)
  7. # dependencies are computed by the compiler itself
  8. set(CMAKE_CXX_DEPFILE_FORMAT gcc)
  9. set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
  10. endif()
  11. set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
  12. if (WIN32)
  13. if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.6)
  14. set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fno-keep-inline-dllexport")
  15. endif()
  16. else()
  17. if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
  18. set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
  19. endif()
  20. endif()
  21. __compiler_check_default_language_standard(CXX 3.4 98 6.0 14 11.1 17)
  22. if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0)
  23. string(CONCAT CMAKE_CXX_SCANDEP_SOURCE
  24. "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E -x c++ <SOURCE>"
  25. " -MT <DYNDEP_FILE> -MD -MF <DEP_FILE>"
  26. " -fmodules-ts -fdeps-file=<DYNDEP_FILE> -fdeps-target=<OBJECT> -fdeps-format=p1689r5"
  27. " -o <PREPROCESSED_SOURCE>")
  28. set(CMAKE_CXX_MODULE_MAP_FORMAT "gcc")
  29. string(CONCAT CMAKE_CXX_MODULE_MAP_FLAG
  30. # Turn on modules.
  31. "-fmodules-ts"
  32. # Read the module mapper file.
  33. " -fmodule-mapper=<MODULE_MAP_FILE>"
  34. # Make sure dependency tracking is enabled (missing from `try_*`).
  35. " -MD"
  36. # Suppress `CXX_MODULES +=` from generated depfile snippets.
  37. " -fdeps-format=p1689r5"
  38. # Force C++ as a language.
  39. " -x c++")
  40. set(CMAKE_CXX_MODULE_BMI_ONLY_FLAG "-fmodule-only")
  41. endif()