AtomicWebView.cmake 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. # Copyright (c) 2014 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. # Determine the platform.
  5. if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
  6. set(OS_MACOSX 1)
  7. set(OS_POSIX 1)
  8. elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
  9. set(OS_LINUX 1)
  10. set(OS_POSIX 1)
  11. elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
  12. set(OS_WINDOWS 1)
  13. endif()
  14. if(OS_MACOSX)
  15. set(CEF_STANDARD_LIBS "-lpthread" "-framework Cocoa" "-framework AppKit")
  16. set(CEF_LIBTYPE SHARED)
  17. # using release
  18. #set(CEF_BINARY_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/MacOSX/$<CONFIGURATION>")
  19. set(CEF_BINARY_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/MacOSX/Release")
  20. set(CEF_BINARY_DIR_RELEASE "${CMAKE_SOURCE_DIR}/Submodules/CEF/MacOSX/Release")
  21. set(CEF_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/Chromium Embedded Framework.framework/Chromium Embedded Framework")
  22. # using release
  23. set(CEF_BINARY_DIR_DEBUG "${CMAKE_SOURCE_DIR}/Submodules/CEF/MacOSX/Release")
  24. set(CEF_LIB_DEBUG "${CEF_BINARY_DIR_DEBUG}/Chromium Embedded Framework.framework/Chromium Embedded Framework")
  25. endif()
  26. if(OS_WINDOWS)
  27. if (ATOMIC_PROJECT_ARCH STREQUAL "x86")
  28. set(CEF_BINARY_DIR_RELEASE "${CMAKE_SOURCE_DIR}/Submodules/CEF/Windows/32bit/Release")
  29. set(CEF_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/libcef.lib")
  30. set(CEF_BINARY_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/Windows/32bit/Release")
  31. set(CEF_RESOURCE_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/Windows/32bit/Resources")
  32. else()
  33. set(CEF_BINARY_DIR_RELEASE "${CMAKE_SOURCE_DIR}/Submodules/CEF/Windows/64bit/Release")
  34. set(CEF_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/libcef.lib")
  35. set(CEF_BINARY_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/Windows/64bit/Release")
  36. set(CEF_RESOURCE_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/Windows/64bit/Resources")
  37. endif()
  38. endif()
  39. if(OS_LINUX)
  40. set(CEF_BINARY_DIR_RELEASE "${CMAKE_SOURCE_DIR}/Submodules/CEF/Linux/Release")
  41. set(CEF_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/libcef.so")
  42. set(CEF_BINARY_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/Linux/Release")
  43. set(CEF_RESOURCE_DIR "${CMAKE_SOURCE_DIR}/Submodules/CEF/Linux/Resources")
  44. endif()
  45. #
  46. # Shared macros.
  47. #
  48. # Append platform specific sources to a list of sources.
  49. macro(APPEND_PLATFORM_SOURCES name_of_list)
  50. if(OS_LINUX AND ${name_of_list}_LINUX)
  51. list(APPEND ${name_of_list} ${${name_of_list}_LINUX})
  52. endif()
  53. if(OS_POSIX AND ${name_of_list}_POSIX)
  54. list(APPEND ${name_of_list} ${${name_of_list}_POSIX})
  55. endif()
  56. if(OS_WINDOWS AND ${name_of_list}_WINDOWS)
  57. list(APPEND ${name_of_list} ${${name_of_list}_WINDOWS})
  58. endif()
  59. if(OS_MACOSX AND ${name_of_list}_MACOSX)
  60. list(APPEND ${name_of_list} ${${name_of_list}_MACOSX})
  61. endif()
  62. endmacro()
  63. # Add a logical target that can be used to link the specified libraries into an
  64. # executable target.
  65. macro(ADD_LOGICAL_TARGET target debug_lib release_lib)
  66. add_library(${target} ${CEF_LIBTYPE} IMPORTED)
  67. set_target_properties(${target} PROPERTIES
  68. IMPORTED_LOCATION "${release_lib}"
  69. IMPORTED_LOCATION_DEBUG "${debug_lib}"
  70. IMPORTED_LOCATION_RELEASE "${release_lib}"
  71. )
  72. endmacro()
  73. # Determine the target output directory based on platform and generator.
  74. macro(SET_CEF_TARGET_OUT_DIR)
  75. if(${CMAKE_GENERATOR} STREQUAL "Ninja")
  76. # Ninja does not create a subdirectory named after the configuration.
  77. set(CEF_TARGET_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  78. elseif(OS_LINUX)
  79. set(CEF_TARGET_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
  80. else()
  81. # ATOMIC: Unix Makefiles not creating Debug/Release?
  82. if(${CMAKE_GENERATOR} STREQUAL "Xcode" OR ${CMAKE_GENERATOR} STREQUAL "Visual Studio 14 2015" OR ${CMAKE_GENERATOR} STREQUAL "Visual Studio 14 2015 Win64")
  83. set(CEF_TARGET_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>")
  84. else()
  85. set(CEF_TARGET_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  86. endif()
  87. endif()
  88. endmacro()
  89. # Copy a list of files from one directory to another. Relative files paths are maintained.
  90. macro(COPY_FILES target file_list source_dir target_dir)
  91. foreach(FILENAME ${file_list})
  92. set(source_file ${source_dir}/${FILENAME})
  93. set(target_file ${target_dir}/${FILENAME})
  94. if(IS_DIRECTORY ${source_file})
  95. add_custom_command(
  96. TARGET ${target}
  97. POST_BUILD
  98. COMMAND ${CMAKE_COMMAND} -E copy_directory "${source_file}" "${target_file}"
  99. VERBATIM
  100. )
  101. else()
  102. add_custom_command(
  103. TARGET ${target}
  104. POST_BUILD
  105. COMMAND ${CMAKE_COMMAND} -E copy_if_different "${source_file}" "${target_file}"
  106. VERBATIM
  107. )
  108. endif()
  109. endforeach()
  110. endmacro()
  111. # Rename a directory replacing the target if it already exists.
  112. macro(RENAME_DIRECTORY target source_dir target_dir)
  113. add_custom_command(
  114. TARGET ${target}
  115. POST_BUILD
  116. # Remove the target directory if it already exists.
  117. COMMAND ${CMAKE_COMMAND} -E remove_directory "${target_dir}"
  118. # Rename the source directory to target directory.
  119. COMMAND ${CMAKE_COMMAND} -E rename "${source_dir}" "${target_dir}"
  120. VERBATIM
  121. )
  122. endmacro()
  123. #
  124. # Linux macros.
  125. #
  126. if(OS_LINUX)
  127. # Use pkg-config to find Linux libraries and update compiler/linker variables.
  128. macro(FIND_LINUX_LIBRARIES libraries)
  129. # Read pkg-config info into variables.
  130. execute_process(COMMAND pkg-config --cflags ${libraries} OUTPUT_VARIABLE FLL_CFLAGS)
  131. execute_process(COMMAND pkg-config --libs-only-L --libs-only-other ${libraries} OUTPUT_VARIABLE FLL_LDFLAGS)
  132. execute_process(COMMAND pkg-config --libs-only-l ${libraries} OUTPUT_VARIABLE FLL_LIBS)
  133. # Strip leading and trailing whitepspace.
  134. STRING(STRIP "${FLL_CFLAGS}" FLL_CFLAGS)
  135. STRING(STRIP "${FLL_LDFLAGS}" FLL_LDFLAGS)
  136. STRING(STRIP "${FLL_LIBS}" FLL_LIBS)
  137. # Update the variables.
  138. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLL_CFLAGS}")
  139. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLL_CFLAGS}")
  140. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLL_LDFLAGS}")
  141. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLL_LDFLAGS}")
  142. set(CEF_STANDARD_LIBS "${CEF_STANDARD_LIBS} ${FLL_LIBS}")
  143. endmacro()
  144. # Set SUID permissions on the specified executable.
  145. macro(SET_LINUX_SUID_PERMISSIONS target executable)
  146. add_custom_command(
  147. TARGET ${target}
  148. POST_BUILD
  149. COMMAND ${CMAKE_COMMAND} -E echo ""
  150. COMMAND ${CMAKE_COMMAND} -E echo "*** Run the following command manually to set SUID permissions ***"
  151. COMMAND ${CMAKE_COMMAND} -E echo "EXE=\"${executable}\" && sudo -- chown root:root $EXE && sudo -- chmod 4755 $EXE"
  152. COMMAND ${CMAKE_COMMAND} -E echo ""
  153. VERBATIM
  154. )
  155. endmacro()
  156. endif(OS_LINUX)
  157. #
  158. # Mac OS X macros.
  159. #
  160. if(OS_MACOSX)
  161. # Set Xcode target properties.
  162. function(SET_XCODE_TARGET_PROPERTIES target)
  163. set_target_properties(${target} PROPERTIES
  164. XCODE_ATTRIBUTE_ALWAYS_SEARCH_USER_PATHS NO
  165. XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "gnu++11" # -std=gnu++11
  166. XCODE_ATTRIBUTE_CLANG_LINK_OBJC_RUNTIME NO # -fno-objc-link-runtime
  167. XCODE_ATTRIBUTE_CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS YES # -Wobjc-missing-property-synthesis
  168. XCODE_ATTRIBUTE_COPY_PHASE_STRIP NO
  169. XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING[variant=Release] YES # -Wl,-dead_strip
  170. XCODE_ATTRIBUTE_GCC_C_LANGUAGE_STANDARD "c99" # -std=c99
  171. XCODE_ATTRIBUTE_GCC_CW_ASM_SYNTAX NO # No -fasm-blocks
  172. XCODE_ATTRIBUTE_GCC_DYNAMIC_NO_PIC NO
  173. XCODE_ATTRIBUTE_GCC_ENABLE_CPP_EXCEPTIONS NO # -fno-exceptions
  174. XCODE_ATTRIBUTE_GCC_ENABLE_CPP_RTTI NO # -fno-rtti
  175. XCODE_ATTRIBUTE_GCC_ENABLE_PASCAL_STRINGS NO # No -mpascal-strings
  176. XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN YES # -fvisibility-inlines-hidden
  177. XCODE_ATTRIBUTE_GCC_OBJC_CALL_CXX_CDTORS YES # -fobjc-call-cxx-cdtors
  178. XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES # -fvisibility=hidden
  179. XCODE_ATTRIBUTE_GCC_THREADSAFE_STATICS NO # -fno-threadsafe-statics
  180. XCODE_ATTRIBUTE_GCC_TREAT_WARNINGS_AS_ERRORS YES # -Werror
  181. XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0"
  182. XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_NEWLINE YES # -Wnewline-eof
  183. XCODE_ATTRIBUTE_USE_HEADERMAP NO
  184. OSX_ARCHITECTURES_DEBUG "${CMAKE_OSX_ARCHITECTURES}"
  185. OSX_ARCHITECTURES_RELEASE "${CMAKE_OSX_ARCHITECTURES}"
  186. )
  187. endfunction()
  188. # Override default add_library function.
  189. function(cef_add_library name)
  190. add_library(${name} ${ARGN})
  191. SET_XCODE_TARGET_PROPERTIES(${name})
  192. endfunction()
  193. # Override default add_executable function.
  194. function(cef_add_executable name)
  195. add_executable(${name} ${ARGN})
  196. SET_XCODE_TARGET_PROPERTIES(${name})
  197. endfunction()
  198. # Fix the framework link in the helper executable.
  199. macro(FIX_MACOSX_HELPER_FRAMEWORK_LINK target app_path)
  200. add_custom_command(TARGET ${target}
  201. POST_BUILD
  202. COMMAND install_name_tool -change "@executable_path/Chromium Embedded Framework"
  203. "@executable_path/../../../../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework"
  204. "${app_path}/Contents/MacOS/${target}"
  205. VERBATIM
  206. )
  207. endmacro()
  208. # Fix the framework link in the main executable.
  209. macro(FIX_MACOSX_MAIN_FRAMEWORK_LINK target app_path)
  210. add_custom_command(TARGET ${target}
  211. POST_BUILD
  212. COMMAND install_name_tool -change "@executable_path/Chromium Embedded Framework"
  213. "@executable_path/../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework"
  214. "${app_path}/Contents/MacOS/${target}"
  215. VERBATIM
  216. )
  217. endmacro()
  218. # Make the other helper app bundles.
  219. macro(MAKE_MACOSX_HELPERS target app_path)
  220. add_custom_command(TARGET ${target}
  221. POST_BUILD
  222. # The exported variables need to be set for generators other than Xcode.
  223. COMMAND export BUILT_PRODUCTS_DIR=${app_path} &&
  224. export CONTENTS_FOLDER_PATH=/Contents &&
  225. ${CMAKE_SOURCE_DIR}/Submodules/CEF/MacOSX/tools/make_more_helpers.sh "Frameworks" "${target}"
  226. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  227. VERBATIM
  228. )
  229. endmacro()
  230. # Manually process and copy over resource files.
  231. macro(COPY_MACOSX_RESOURCES resource_list prefix_list target source_dir app_path)
  232. foreach(FILENAME ${resource_list})
  233. # Remove one or more prefixes from the source paths.
  234. set(TARGET_FILENAME "${FILENAME}")
  235. foreach(PREFIX ${prefix_list})
  236. string(REGEX REPLACE "^.*${PREFIX}" "" TARGET_FILENAME ${TARGET_FILENAME})
  237. endforeach()
  238. # Determine the absolute source and target paths.
  239. set(TARGET_PATH "${app_path}/Contents/Resources/${TARGET_FILENAME}")
  240. if(IS_ABSOLUTE ${FILENAME})
  241. set(SOURCE_PATH ${FILENAME})
  242. else()
  243. set(SOURCE_PATH "${source_dir}/${FILENAME}")
  244. endif()
  245. if(${FILENAME} MATCHES ".xib$")
  246. # Change the target file extension.
  247. string(REGEX REPLACE ".xib$" ".nib" TARGET_PATH ${TARGET_PATH})
  248. get_filename_component(TARGET_DIRECTORY ${TARGET_PATH} PATH)
  249. add_custom_command(
  250. TARGET ${target}
  251. POST_BUILD
  252. # Create the target directory.
  253. COMMAND ${CMAKE_COMMAND} -E make_directory "${TARGET_DIRECTORY}"
  254. # Compile the XIB file to a NIB.
  255. COMMAND /usr/bin/ibtool --output-format binary1 --compile "${TARGET_PATH}" "${SOURCE_PATH}"
  256. VERBATIM
  257. )
  258. elseif(NOT ${TARGET_FILENAME} STREQUAL "Info.plist")
  259. # Copy the file as-is.
  260. add_custom_command(
  261. TARGET ${target}
  262. POST_BUILD
  263. COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_PATH}" "${TARGET_PATH}"
  264. VERBATIM
  265. )
  266. endif()
  267. endforeach()
  268. endmacro()
  269. endif(OS_MACOSX)
  270. #
  271. # Windows macros.
  272. #
  273. if(OS_WINDOWS)
  274. # Add custom manifest files to an executable target.
  275. macro(ADD_WINDOWS_MANIFEST manifest_path target)
  276. add_custom_command(
  277. TARGET ${target}
  278. POST_BUILD
  279. COMMAND "mt.exe" -nologo
  280. -manifest \"${manifest_path}/${target}.exe.manifest\" \"${manifest_path}/compatibility.manifest\"
  281. -outputresource:"${CEF_TARGET_OUT_DIR}/${target}.exe"\;\#1
  282. COMMENT "Adding manifest..."
  283. )
  284. endmacro()
  285. # List of CEF binary files.
  286. set(CEF_BINARY_FILES
  287. d3dcompiler_43.dll
  288. d3dcompiler_47.dll
  289. libcef.dll
  290. libEGL.dll
  291. libGLESv2.dll
  292. natives_blob.bin
  293. snapshot_blob.bin
  294. )
  295. if(ATOMIC_PROJECT_ARCH STREQUAL "x86")
  296. #Only used on 32-bit platforms.
  297. set(CEF_BINARY_FILES
  298. ${CEF_BINARY_FILES}
  299. wow_helper.exe
  300. )
  301. endif()
  302. # List of CEF resource files.
  303. set(CEF_RESOURCE_FILES
  304. cef.pak
  305. cef_100_percent.pak
  306. cef_200_percent.pak
  307. cef_extensions.pak
  308. devtools_resources.pak
  309. icudtl.dat
  310. locales
  311. )
  312. endif(OS_WINDOWS)