DownloadCEF.cmake 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # Copyright (c) 2016 The Chromium Embedded Framework Authors. All rights
  2. # reserved. Use of this source code is governed by a BSD-style license that
  3. # can be found in the LICENSE file.
  4. # Download the CEF binary distribution for |platform| and |version| to
  5. # |download_dir|. The |CEF_ROOT| variable will be set in global scope pointing
  6. # to the extracted location.
  7. # Visit https://cef-builds.spotifycdn.com/index.html for the list of
  8. # supported platforms and versions.
  9. function(DownloadCEF platform version download_dir)
  10. # Specify the binary distribution type and download directory.
  11. set(CEF_DISTRIBUTION "cef_binary_${version}_${platform}")
  12. set(CEF_DOWNLOAD_DIR "${download_dir}")
  13. # The location where we expect the extracted binary distribution.
  14. set(CEF_ROOT "${CEF_DOWNLOAD_DIR}/${CEF_DISTRIBUTION}" CACHE INTERNAL "CEF_ROOT")
  15. # Download and/or extract the binary distribution if necessary.
  16. if(NOT IS_DIRECTORY "${CEF_ROOT}")
  17. set(CEF_DOWNLOAD_FILENAME "${CEF_DISTRIBUTION}.tar.bz2")
  18. set(CEF_DOWNLOAD_PATH "${CEF_DOWNLOAD_DIR}/${CEF_DOWNLOAD_FILENAME}")
  19. if(NOT EXISTS "${CEF_DOWNLOAD_PATH}")
  20. set(CEF_DOWNLOAD_URL "https://cef-builds.spotifycdn.com/${CEF_DOWNLOAD_FILENAME}")
  21. string(REPLACE "+" "%2B" CEF_DOWNLOAD_URL_ESCAPED ${CEF_DOWNLOAD_URL})
  22. # Download the SHA1 hash for the binary distribution.
  23. message(STATUS "Downloading ${CEF_DOWNLOAD_PATH}.sha1 from ${CEF_DOWNLOAD_URL_ESCAPED}...")
  24. file(DOWNLOAD "${CEF_DOWNLOAD_URL_ESCAPED}.sha1" "${CEF_DOWNLOAD_PATH}.sha1")
  25. file(READ "${CEF_DOWNLOAD_PATH}.sha1" CEF_SHA1)
  26. # Download the binary distribution and verify the hash.
  27. message(STATUS "Downloading ${CEF_DOWNLOAD_PATH}...")
  28. file(
  29. DOWNLOAD "${CEF_DOWNLOAD_URL_ESCAPED}" "${CEF_DOWNLOAD_PATH}"
  30. EXPECTED_HASH SHA1=${CEF_SHA1}
  31. SHOW_PROGRESS
  32. )
  33. endif()
  34. # Extract the binary distribution.
  35. message(STATUS "Extracting ${CEF_DOWNLOAD_PATH}...")
  36. execute_process(
  37. COMMAND ${CMAKE_COMMAND} -E tar xzf "${CEF_DOWNLOAD_DIR}/${CEF_DOWNLOAD_FILENAME}"
  38. WORKING_DIRECTORY ${CEF_DOWNLOAD_DIR}
  39. )
  40. endif()
  41. endfunction()
  42. # Set common target properties. Use SET_LIBRARY_TARGET_PROPERTIES() or
  43. # SET_EXECUTABLE_TARGET_PROPERTIES() instead of calling this macro directly.
  44. macro(REPLACED_SET_COMMON_TARGET_PROPERTIES target)
  45. # Compile flags. (MODIFIED FOR C/C++ SEPARATION)
  46. target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:C>:${CEF_COMPILER_FLAGS}>)
  47. target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${CEF_CXX_COMPILER_FLAGS}>)
  48. target_compile_options(${target} PRIVATE $<$<CONFIG:Debug>:${CEF_COMPILER_FLAGS_DEBUG} ${CEF_CXX_COMPILER_FLAGS_DEBUG}>)
  49. target_compile_options(${target} PRIVATE $<$<CONFIG:Release>:${CEF_COMPILER_FLAGS_RELEASE} ${CEF_CXX_COMPILER_FLAGS_RELEASE}>)
  50. # Compile definitions.
  51. target_compile_definitions(${target} PRIVATE ${CEF_COMPILER_DEFINES})
  52. target_compile_definitions(${target} PRIVATE $<$<CONFIG:Debug>:${CEF_COMPILER_DEFINES_DEBUG}>)
  53. target_compile_definitions(${target} PRIVATE $<$<CONFIG:Release>:${CEF_COMPILER_DEFINES_RELEASE}>)
  54. # Include directories.
  55. target_include_directories(${target} PRIVATE ${CEF_INCLUDE_PATH})
  56. # Linker flags.
  57. if(CEF_LINKER_FLAGS)
  58. string(REPLACE ";" " " _flags_str "${CEF_LINKER_FLAGS}")
  59. set_property(TARGET ${target} PROPERTY LINK_FLAGS ${_flags_str})
  60. endif()
  61. if(CEF_LINKER_FLAGS_DEBUG)
  62. string(REPLACE ";" " " _flags_str "${CEF_LINKER_FLAGS_DEBUG}")
  63. set_property(TARGET ${target} PROPERTY LINK_FLAGS_DEBUG ${_flags_str})
  64. endif()
  65. if(CEF_LINKER_FLAGS_RELEASE)
  66. string(REPLACE ";" " " _flags_str "${CEF_LINKER_FLAGS_RELEASE}")
  67. set_property(TARGET ${target} PROPERTY LINK_FLAGS_RELEASE ${_flags_str})
  68. endif()
  69. if(OS_MAC)
  70. # Set Xcode target properties.
  71. set_target_properties(${target} PROPERTIES
  72. XCODE_ATTRIBUTE_ALWAYS_SEARCH_USER_PATHS NO
  73. XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "gnu++11" # -std=gnu++11
  74. XCODE_ATTRIBUTE_CLANG_LINK_OBJC_RUNTIME NO # -fno-objc-link-runtime
  75. XCODE_ATTRIBUTE_CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS YES # -Wobjc-missing-property-synthesis
  76. XCODE_ATTRIBUTE_COPY_PHASE_STRIP NO
  77. XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING[variant=Release] YES # -Wl,-dead_strip
  78. XCODE_ATTRIBUTE_GCC_C_LANGUAGE_STANDARD "c99" # -std=c99
  79. XCODE_ATTRIBUTE_GCC_CW_ASM_SYNTAX NO # No -fasm-blocks
  80. XCODE_ATTRIBUTE_GCC_DYNAMIC_NO_PIC NO
  81. XCODE_ATTRIBUTE_GCC_ENABLE_CPP_EXCEPTIONS NO # -fno-exceptions
  82. XCODE_ATTRIBUTE_GCC_ENABLE_CPP_RTTI NO # -fno-rtti
  83. XCODE_ATTRIBUTE_GCC_ENABLE_PASCAL_STRINGS NO # No -mpascal-strings
  84. XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN YES # -fvisibility-inlines-hidden
  85. XCODE_ATTRIBUTE_GCC_OBJC_CALL_CXX_CDTORS YES # -fobjc-call-cxx-cdtors
  86. XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES # -fvisibility=hidden
  87. XCODE_ATTRIBUTE_GCC_THREADSAFE_STATICS NO # -fno-threadsafe-statics
  88. XCODE_ATTRIBUTE_GCC_TREAT_WARNINGS_AS_ERRORS YES # -Werror
  89. XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0"
  90. XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_NEWLINE YES # -Wnewline-eof
  91. XCODE_ATTRIBUTE_USE_HEADERMAP NO
  92. OSX_ARCHITECTURES_DEBUG "${CMAKE_OSX_ARCHITECTURES}"
  93. OSX_ARCHITECTURES_RELEASE "${CMAKE_OSX_ARCHITECTURES}"
  94. )
  95. endif()
  96. endmacro()
  97. # Set executable-specific properties.
  98. macro(REPLACED_SET_EXECUTABLE_TARGET_PROPERTIES target)
  99. REPLACED_SET_COMMON_TARGET_PROPERTIES(${target})
  100. # Executable linker flags.
  101. if(CEF_EXE_LINKER_FLAGS)
  102. string(REPLACE ";" " " _flags_str "${CEF_EXE_LINKER_FLAGS}")
  103. set_property(TARGET ${target} PROPERTY LINK_FLAGS ${_flags_str})
  104. endif()
  105. if(CEF_EXE_LINKER_FLAGS_DEBUG)
  106. string(REPLACE ";" " " _flags_str "${CEF_EXE_LINKER_FLAGS_DEBUG}")
  107. set_property(TARGET ${target} PROPERTY LINK_FLAGS_DEBUG ${_flags_str})
  108. endif()
  109. if(CEF_EXE_LINKER_FLAGS_RELEASE)
  110. string(REPLACE ";" " " _flags_str "${CEF_EXE_LINKER_FLAGS_RELEASE}")
  111. set_property(TARGET ${target} PROPERTY LINK_FLAGS_RELEASE ${_flags_str})
  112. endif()
  113. endmacro()