Allow external CEF folder with CMake build

This commit is contained in:
Tobias Taschner 2018-02-17 23:26:57 +01:00
parent 4ee5b50401
commit e4c03f6857
No known key found for this signature in database
GPG key ID: AE6ECD71294F87FD
4 changed files with 105 additions and 50 deletions

View file

@ -11,42 +11,72 @@ include(../../source_groups.cmake)
include(cef_version_info.cmake)
ExternalProject_Add(
cef
URL ${CEF_URL}
URL_HASH SHA1=${CEF_SHA1}
PATCH_COMMAND
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/fixup_cef.cmake
CMAKE_ARGS -DUSE_ATL=OFF -DUSE_SANDBOX=OFF
BUILD_COMMAND
${CMAKE_COMMAND} --build . --target libcef_dll_wrapper --config $<CONFIG>
INSTALL_COMMAND ""
)
find_path(CEF_ROOT
NAMES cef_paths.gypi
HINTS
$ENV{CEF_ROOT}
${wxSOURCE_DIR}/3rdparty/cef
DOC "CEF Binary Root directory"
)
ExternalProject_Get_property(cef SOURCE_DIR)
ExternalProject_Get_property(cef BINARY_DIR)
add_library(libcef_dll_wrapper STATIC IMPORTED GLOBAL)
get_property(HAVE_MULTI_CONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(HAVE_MULTI_CONFIG_GENERATOR)
set_target_properties(libcef_dll_wrapper PROPERTIES
IMPORTED_LOCATION_DEBUG ${BINARY_DIR}/libcef_dll_wrapper/Debug/libcef_dll_wrapper${CMAKE_STATIC_LIBRARY_SUFFIX}
IMPORTED_LOCATION_RELEASE ${BINARY_DIR}/libcef_dll_wrapper/Release/libcef_dll_wrapper${CMAKE_STATIC_LIBRARY_SUFFIX}
if(NOT CEF_ROOT)
message("Downloading CEF binary distribution...")
set(CEF_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/cef-download)
set(CEF_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/cef-source)
set(CEF_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/cef-build)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cef_download.cmake.in
${CEF_DOWNLOAD_DIR}/CMakeLists.txt
)
else()
set_target_properties(libcef_dll_wrapper PROPERTIES
IMPORTED_LOCATION ${BINARY_DIR}/libcef_dll_wrapper/libcef_dll_wrapper${CMAKE_STATIC_LIBRARY_SUFFIX}
execute_process(
COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CEF_DOWNLOAD_DIR}
)
if(result)
message(FATAL_ERROR "CMake step for cef failed: ${result}")
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CEF_DOWNLOAD_DIR}
)
if(result)
message(FATAL_ERROR "Build step for cef failed: ${result}")
endif()
set(CEF_ROOT ${CEF_SOURCE_DIR} CACHE PATH "CEF Binary Root directory" FORCE)
endif()
add_library(libcef STATIC IMPORTED GLOBAL)
# CEF settings
set(USE_ATL OFF) # Disable usage of ATL in CEF
set(USE_SANDBOX OFF) # Disable usage of sandbox on windows
add_subdirectory(${CEF_ROOT} cef EXCLUDE_FROM_ALL)
set_target_properties(libcef_dll_wrapper PROPERTIES FOLDER "Third Party Libraries")
if (MSVC)
# Modify CEF compiler options to match VC runtime
get_target_property(cef_compile_options libcef_dll_wrapper COMPILE_OPTIONS)
string(REGEX REPLACE "/MTd?" "" cef_compile_options ${cef_compile_options})
set_target_properties(libcef_dll_wrapper PROPERTIES COMPILE_OPTIONS ${cef_compile_options})
endif()
add_library(libcef SHARED IMPORTED GLOBAL)
if(APPLE)
set_target_properties(libcef PROPERTIES
IMPORTED_LOCATION_DEBUG "${SOURCE_DIR}/Debug/Chromium Embedded Framework.framework/Chromium Embedded Framework"
IMPORTED_LOCATION_RELEASE "${SOURCE_DIR}/Release/Chromium Embedded Framework.framework/Chromium Embedded Framework"
IMPORTED_LOCATION_DEBUG "${CEF_ROOT}/Debug/Chromium Embedded Framework.framework/Chromium Embedded Framework"
IMPORTED_LOCATION_RELEASE "${CEF_ROOT}/Release/Chromium Embedded Framework.framework/Chromium Embedded Framework"
)
else()
set_target_properties(libcef PROPERTIES
IMPORTED_LOCATION_DEBUG ${SOURCE_DIR}/Debug/libcef${CMAKE_LINK_LIBRARY_SUFFIX}
IMPORTED_LOCATION_RELEASE ${SOURCE_DIR}/Release/libcef${CMAKE_LINK_LIBRARY_SUFFIX}
IMPORTED_LOCATION_DEBUG ${CEF_ROOT}/Debug/libcef${CMAKE_SHARED_LIBRARY_SUFFIX}
IMPORTED_IMPLIB_DEBUG ${CEF_ROOT}/Debug/libcef${CMAKE_IMPORT_LIBRARY_SUFFIX}
IMPORTED_LOCATION_RELEASE ${CEF_ROOT}/Release/libcef${CMAKE_SHARED_LIBRARY_SUFFIX}
IMPORTED_IMPLIB_RELEASE ${CEF_ROOT}/Release/libcef${CMAKE_IMPORT_LIBRARY_SUFFIX}
)
endif()
@ -56,8 +86,18 @@ if(APPLE)
endif()
wx_add_library(webview_chromium ${WEBVIEW_CHROMIUM_FILES})
wx_lib_include_directories(webview_chromium PRIVATE ${SOURCE_DIR})
wx_lib_include_directories(webview_chromium PRIVATE ${CEF_ROOT})
wx_lib_link_libraries(webview_chromium PUBLIC webview PRIVATE libcef libcef_dll_wrapper)
add_dependencies(webview_chromium cef)
if(APPLE AND wxBUILD_SHARED)
add_custom_command(
TARGET webview_chromium
POST_BUILD
# Copy the CEF framework into the Frameworks directory.
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CEF_ROOT}/$<CONFIG>/Chromium Embedded Framework.framework"
"$<TARGET_FILE_DIR:webview_chromium>/Frameworks/Chromium Embedded Framework.framework"
)
endif()
wx_finalize_lib(webview)

View file

@ -0,0 +1,25 @@
#############################################################################
# Name: build/cmake/lib/webview_chromium/cef_download.cmake.in
# Purpose: CMakeLists.txt template to download CEF
# Author: Tobias Taschner
# Created: 2018-02-19
# Copyright: (c) 2018 wxWidgets development team
# Licence: wxWindows licence
#############################################################################
cmake_minimum_required(VERSION 2.8.12)
project(cef-download NONE)
include(ExternalProject)
ExternalProject_Add(cef
URL ${CEF_URL}
URL_HASH SHA1=${CEF_SHA1}
SOURCE_DIR "${CEF_SOURCE_DIR}"
BINARY_DIR "${CEF_BUILD_DIR}"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)

View file

@ -1,16 +0,0 @@
#############################################################################
# Name: build/cmake/lib/webview/fixup_cef.cmake
# Purpose: CMake script to up patch CEF
# Author: Tobias Taschner
# Created: 2018-02-03
# Copyright: (c) 2018 wxWidgets development team
# Licence: wxWindows licence
#############################################################################
# This script modifies CEF cmake files to allow different VC runtime settings
set(var_file cmake/cef_variables.cmake)
file(READ ${var_file} var_file_contents)
string(REGEX REPLACE "/MTd?" "" new_file_contents ${var_file_contents})
file(WRITE "${var_file}" ${new_file_contents})

View file

@ -12,7 +12,6 @@ wx_add_sample(webview LIBRARIES webview stc adv NAME webviewsample)
if(wxUSE_WEBVIEW_CHROMIUM)
wx_add_sample(webview LIBRARIES webview_chromium stc adv NAME webviewsample_chromium)
target_compile_definitions(webviewsample_chromium PRIVATE -DwxWEBVIEW_SAMPLE_CHROMIUM)
ExternalProject_Get_property(cef SOURCE_DIR)
if(WIN32)
add_custom_command(
TARGET webviewsample_chromium
@ -24,17 +23,17 @@ if(wxUSE_WEBVIEW_CHROMIUM)
"-outputresource:$<TARGET_FILE:webviewsample_chromium>;#1"
# Copy CEF libraries
COMMAND
${CMAKE_COMMAND} -E copy_directory ${SOURCE_DIR}/$<CONFIG> $<TARGET_FILE_DIR:webviewsample_chromium>
${CMAKE_COMMAND} -E copy_directory ${CEF_ROOT}/$<CONFIG> $<TARGET_FILE_DIR:webviewsample_chromium>
# Copy CEF resources
COMMAND
${CMAKE_COMMAND} -E copy_directory ${SOURCE_DIR}/Resources $<TARGET_FILE_DIR:webviewsample_chromium>
${CMAKE_COMMAND} -E copy_directory ${CEF_ROOT}/Resources $<TARGET_FILE_DIR:webviewsample_chromium>
COMMENT "Prepare executable for runtime..."
)
elseif(APPLE)
# Define helper bundle
set(CEF_HELPER_OUTPUT_NAME "webviewsample_chromium Helper")
add_executable(webviewsample_chromium_helper MACOSX_BUNDLE ${wxSOURCE_DIR}/samples/webview/cef_process_helper.cpp)
target_include_directories(webviewsample_chromium_helper PRIVATE ${SOURCE_DIR})
target_include_directories(webviewsample_chromium_helper PRIVATE ${CEF_ROOT})
target_link_libraries(webviewsample_chromium_helper libcef libcef_dll_wrapper)
set_target_properties(webviewsample_chromium_helper PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${wxSOURCE_DIR}/samples/webview/cef_helper_info.plist.in
@ -43,6 +42,13 @@ if(wxUSE_WEBVIEW_CHROMIUM)
OUTPUT_NAME ${CEF_HELPER_OUTPUT_NAME}
)
if(NOT wxBUILD_SHARED)
set_target_properties(webviewsample_chromium PROPERTIES
INSTALL_RPATH "@executable_path/.."
BUILD_WITH_INSTALL_RPATH TRUE
)
endif()
add_dependencies(webviewsample_chromium webviewsample_chromium_helper)
add_custom_command(
@ -55,7 +61,7 @@ if(wxUSE_WEBVIEW_CHROMIUM)
"$<TARGET_FILE_DIR:webviewsample_chromium>/../Frameworks/${CEF_HELPER_OUTPUT_NAME}.app"
# Copy the CEF framework into the Frameworks directory.
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${SOURCE_DIR}/$<CONFIG>/Chromium Embedded Framework.framework"
"${CEF_ROOT}/$<CONFIG>/Chromium Embedded Framework.framework"
"$<TARGET_FILE_DIR:webviewsample_chromium>/../Frameworks/Chromium Embedded Framework.framework"
)
endif()