WebKitHelpers.cmake 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. include(CMakeParseArguments)
  2. # Sets extra compile flags for a target, depending on the compiler being used.
  3. # Currently, only GCC is supported.
  4. macro(WEBKIT_SET_EXTRA_COMPILER_FLAGS _target)
  5. set(options ENABLE_WERROR IGNORECXX_WARNINGS)
  6. CMAKE_PARSE_ARGUMENTS("OPTION" "${options}" "" "" ${ARGN})
  7. if (CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  8. get_target_property(OLD_COMPILE_FLAGS ${_target} COMPILE_FLAGS)
  9. if (${OLD_COMPILE_FLAGS} STREQUAL "OLD_COMPILE_FLAGS-NOTFOUND")
  10. set(OLD_COMPILE_FLAGS "")
  11. endif ()
  12. include(TestCXXAcceptsFlag)
  13. CHECK_CXX_ACCEPTS_FLAG("-dumpversion" CMAKE_CXX_ACCEPTS_DUMPVERSION)
  14. if (CMAKE_CXX_ACCEPTS_DUMPVERSION)
  15. EXEC_PROGRAM(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE COMPILER_VERSION)
  16. else ()
  17. EXEC_PROGRAM("${CMAKE_CXX_COMPILER} -E -Wp,-dM - < /dev/null | grep '#define __VERSION__' | grep -E -o '[0-9]+\\.[0-9]+\\.?[0-9]+?'" OUTPUT_VARIABLE COMPILER_VERSION)
  18. endif ()
  19. # Disable some optimizations on buggy compiler versions
  20. # GCC 4.5.1 does not implement -ftree-sra correctly
  21. if (${COMPILER_VERSION} STREQUAL "4.5.1")
  22. set(OLD_COMPILE_FLAGS "-fno-tree-sra ${OLD_COMPILE_FLAGS}")
  23. endif ()
  24. if (NOT SHARED_CORE)
  25. set(OLD_COMPILE_FLAGS "-fvisibility=hidden ${OLD_COMPILE_FLAGS}")
  26. endif ()
  27. get_target_property(TARGET_TYPE ${_target} TYPE)
  28. if (${TARGET_TYPE} STREQUAL "STATIC_LIBRARY") # -fPIC is automatically added to shared libraries
  29. set(OLD_COMPILE_FLAGS "-fPIC ${OLD_COMPILE_FLAGS}")
  30. endif ()
  31. set(OLD_COMPILE_FLAGS "-fno-exceptions -fno-strict-aliasing ${OLD_COMPILE_FLAGS}")
  32. # Enable warnings by default
  33. if (NOT ${OPTION_IGNORECXX_WARNINGS})
  34. set(OLD_COMPILE_FLAGS "-Wall -Wextra -Wcast-align -Wformat-security -Wmissing-format-attribute -Wpointer-arith -Wundef -Wwrite-strings ${OLD_COMPILE_FLAGS}")
  35. endif ()
  36. # Enable errors on warning
  37. if (OPTION_ENABLE_WERROR)
  38. set(OLD_COMPILE_FLAGS "-Werror -Wno-error=unused-parameter ${OLD_COMPILE_FLAGS}")
  39. endif ()
  40. # Disable C++0x compat warnings for GCC >= 4.6.0 until we build
  41. # cleanly with that.
  42. if (NOT ${OPTION_IGNORECXX_WARNINGS} AND NOT ${COMPILER_VERSION} VERSION_LESS "4.6.0")
  43. set(OLD_COMPILE_FLAGS "${OLD_COMPILE_FLAGS} -Wno-c++0x-compat")
  44. endif ()
  45. if ("${_target}" MATCHES "WebKit2")
  46. set(OLD_COMPILE_FLAGS "${OLD_COMPILE_FLAGS} -std=c++0x")
  47. endif ()
  48. set_target_properties(${_target} PROPERTIES
  49. COMPILE_FLAGS "${OLD_COMPILE_FLAGS}")
  50. unset(OLD_COMPILE_FLAGS)
  51. endif ()
  52. endmacro()
  53. # Append the given flag to the target property.
  54. # Builds on top of get_target_property() and set_target_properties()
  55. macro(ADD_TARGET_PROPERTIES _target _property _flags)
  56. get_target_property(_tmp ${_target} ${_property})
  57. if (NOT _tmp)
  58. set(_tmp "")
  59. endif (NOT _tmp)
  60. foreach (f ${_flags})
  61. set(_tmp "${_tmp} ${f}")
  62. endforeach (f ${_flags})
  63. set_target_properties(${_target} PROPERTIES ${_property} ${_tmp})
  64. unset(_tmp)
  65. endmacro(ADD_TARGET_PROPERTIES _target _property _flags)
  66. # Append the given dependencies to the source file
  67. macro(ADD_SOURCE_DEPENDENCIES _source _deps)
  68. get_source_file_property(_tmp ${_source} OBJECT_DEPENDS)
  69. if (NOT _tmp)
  70. set(_tmp "")
  71. endif ()
  72. foreach (f ${_deps})
  73. list(APPEND _tmp "${f}")
  74. endforeach ()
  75. set_source_files_properties(${_source} PROPERTIES OBJECT_DEPENDS "${_tmp}")
  76. unset(_tmp)
  77. endmacro()
  78. # Append the given dependencies to the source file
  79. # This one consider the given dependencies are in ${DERIVED_SOURCES_WEBCORE_DIR}
  80. # and prepends this to every member of dependencies list
  81. macro(ADD_SOURCE_WEBCORE_DERIVED_DEPENDENCIES _source _deps)
  82. set(_tmp "")
  83. foreach (f ${_deps})
  84. list(APPEND _tmp "${DERIVED_SOURCES_WEBCORE_DIR}/${f}")
  85. endforeach ()
  86. ADD_SOURCE_DEPENDENCIES(${_source} ${_tmp})
  87. unset(_tmp)
  88. endmacro()