202 lines
7.5 KiB
CMake
202 lines
7.5 KiB
CMake
# CEF-CMake 1.0.0
|
|
# Copyright (c) 2019 Borislav Stanimirov
|
|
#
|
|
# Distributed under the MIT Software License
|
|
# See accompanying file LICENSE.txt or copy at
|
|
# http://opensource.org/licenses/MIT
|
|
#
|
|
if(NOT CEF_CMAKE_INCLUDED)
|
|
message(FATAL_ERROR "CEF-CMake: Configuration not included. You need to include `cef_cmake` in your root CMakeLists.txt file")
|
|
endif()
|
|
|
|
if(NOT CEF_VERSION)
|
|
set(CEF_VERSION 123.0.13+gfc703fb+chromium-123.0.6312.124)
|
|
message(STATUS "CEF-CMake: CEF_VERSION not specified. Defaulting to ${CEF_VERSION}")
|
|
endif()
|
|
|
|
if(NOT CEF_CMAKE_OUTPUT_DIR)
|
|
if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
|
|
message(SEND_ERROR "CEF-CMake: Neither CEF_CMAKE_OUTPUT_DIR nor CMAKE_RUNTIME_OUTPUT_DIRECTORY was specified. You need to specify one for the binary assets of CEF to be copied.")
|
|
endif()
|
|
# CEF_CMAKE_OUTPUT_DIR is used to copy the required shared libraries next to the executable
|
|
set(CEF_CMAKE_OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
|
message(STATUS "CEF-CMake: CEF_CMAKE_OUTPUT_DIR was not specified. Defaulting to CMAKE_RUNTIME_OUTPUT_DIRECTORY: ${CEF_CMAKE_OUTPUT_DIR}")
|
|
endif()
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
set(CURRENT_BUILD_TYPE "Debug")
|
|
else()
|
|
set(CURRENT_BUILD_TYPE "Release")
|
|
endif()
|
|
|
|
message(STATUS "Configured CURRENT_BUILD_TYPE as ${CURRENT_BUILD_TYPE}")
|
|
|
|
if(MSVC)
|
|
set(CEF_CMAKE_OUTPUT_DIR ${CEF_CMAKE_OUTPUT_DIR}/${CURRENT_BUILD_TYPE})
|
|
endif()
|
|
|
|
if(CEF_CMAKE_OS_LINUX)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(cefName cef_binary_${CEF_VERSION}_linux64)
|
|
else()
|
|
set(cefName cef_binary_${CEF_VERSION}_linux32)
|
|
endif()
|
|
elseif(CEF_CMAKE_OS_WINDOWS)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(cefName cef_binary_${CEF_VERSION}_windows64)
|
|
else()
|
|
set(cefName cef_binary_${CEF_VERSION}_windows32)
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "CEF-CMake: Download platform not supported yet")
|
|
endif()
|
|
|
|
set(cefArchiveURL https://cef-builds.spotifycdn.com/${cefName}.tar.bz2)
|
|
# fix the url as the version may contain pluses
|
|
string(REGEX REPLACE "\\+" "%2B" cefArchiveURL ${cefArchiveURL})
|
|
set(cefArchive ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}.tar.bz2)
|
|
|
|
if(NOT EXISTS ${cefArchive})
|
|
# download cef version
|
|
message(STATUS "CEF-CMake: Downloading CEF ${cefArchiveURL}")
|
|
file(DOWNLOAD ${cefArchiveURL} ${cefArchive}
|
|
SHOW_PROGRESS
|
|
)
|
|
|
|
# ... and extract
|
|
message(STATUS "CEF-CMake: Extracting ${cefArchive}")
|
|
execute_process(
|
|
COMMAND ${CMAKE_COMMAND} -E tar xzf ${cefArchive}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
)
|
|
endif()
|
|
|
|
set(srcs)
|
|
set(wdir ${cefName}/libcef_dll)
|
|
file(GLOB_RECURSE srcs "${wdir}/*.cc" "${wdir}/*.mm" "${wdir}/*.h" "${cefName}/include/*.h")
|
|
|
|
add_library(cefdll_wrapper STATIC ${srcs})
|
|
|
|
target_compile_definitions(cefdll_wrapper
|
|
PRIVATE
|
|
# Creating the CEF wrapper library. Do not define this for dependent targets.
|
|
-DWRAPPING_CEF_SHARED
|
|
PUBLIC
|
|
# Allow C++ programs to use stdint.h macros specified in the C99 standard that aren't
|
|
# in the C++ standard (e.g. UINT8_MAX, INT64_MIN, etc)
|
|
-D__STDC_CONSTANT_MACROS
|
|
-D__STDC_FORMAT_MACROS
|
|
)
|
|
|
|
target_include_directories(cefdll_wrapper
|
|
PUBLIC ${cefName}
|
|
INTERFACE include
|
|
)
|
|
|
|
add_custom_command(TARGET cefdll_wrapper POST_BUILD
|
|
COMMENT "cefdll_wrapper: Copying CEF resources"
|
|
COMMAND ${CMAKE_COMMAND} -E
|
|
make_directory ${CEF_CMAKE_OUTPUT_DIR}
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Resources/locales
|
|
${CEF_CMAKE_OUTPUT_DIR}/locales
|
|
#COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Resources/cef.pak
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Resources/cef_100_percent.pak
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Resources/cef_200_percent.pak
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Resources/cef_extensions.pak
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Resources/devtools_resources.pak
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Resources/icudtl.dat
|
|
# ${CEF_CMAKE_OUTPUT_DIR}
|
|
)
|
|
|
|
if(CEF_CMAKE_OS_LINUX)
|
|
target_link_libraries(cefdll_wrapper INTERFACE
|
|
X11
|
|
pthread
|
|
debug ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Debug/libcef.so
|
|
optimized ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Release/libcef.so
|
|
)
|
|
|
|
add_custom_command(TARGET cefdll_wrapper POST_BUILD
|
|
COMMENT "cefdll_wrapper: Copying CEF binaries"
|
|
COMMAND ${CMAKE_COMMAND} -E
|
|
make_directory ${CEF_CMAKE_OUTPUT_DIR}
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/chrome_elf.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/d3dcompiler_47.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/libEGL.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/libGLESv2.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/snapshot_blob.bin
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/vk_swiftshader.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/vulkan-1.dll
|
|
${CEF_CMAKE_OUTPUT_DIR}
|
|
)
|
|
|
|
|
|
if(CEF_USE_SANDBOX)
|
|
target_compile_definitions(cefdll_wrapper
|
|
PUBLIC -DCEF_USE_SANDBOX
|
|
)
|
|
endif()
|
|
|
|
elseif(CEF_CMAKE_OS_WINDOWS)
|
|
|
|
target_compile_definitions(cefdll_wrapper PUBLIC
|
|
-DNOMINMAX
|
|
-DWIN32_LEAN_AND_MEAN
|
|
-DUNICODE
|
|
-D_UNICODE
|
|
)
|
|
|
|
message(${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Release/)
|
|
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Release/)
|
|
|
|
target_link_libraries(cefdll_wrapper PUBLIC
|
|
comctl32.lib
|
|
rpcrt4.lib
|
|
shlwapi.lib
|
|
ws2_32.lib
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Release/libcef.lib
|
|
#debug ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Debug/libcef.lib
|
|
#optimized ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Release/libcef.lib
|
|
)
|
|
|
|
add_custom_command(TARGET cefdll_wrapper POST_BUILD
|
|
COMMENT "cefdll_wrapper: Copying CEF binaries"
|
|
COMMAND ${CMAKE_COMMAND} -E
|
|
make_directory ${CEF_CMAKE_OUTPUT_DIR}
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/chrome_elf.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/d3dcompiler_47.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/libEGL.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/libGLESv2.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/snapshot_blob.bin
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/vk_swiftshader.dll
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/${CURRENT_BUILD_TYPE}/vulkan-1.dll
|
|
${CEF_CMAKE_OUTPUT_DIR}
|
|
)
|
|
|
|
if(CEF_USE_SANDBOX)
|
|
target_compile_definitions(cefdll_wrapper
|
|
PUBLIC
|
|
-DCEF_USE_SANDBOX
|
|
-DPSAPI_VERSION=1
|
|
)
|
|
|
|
target_link_libraries(cefdll_wrapper PUBLIC
|
|
dbghelp.lib
|
|
psapi.lib
|
|
version.lib
|
|
wbemuuid.lib
|
|
winmm.lib
|
|
debug ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Debug/cef_sandbox.lib
|
|
optimized ${CMAKE_CURRENT_SOURCE_DIR}/${cefName}/Release/cef_sandbox.lib
|
|
)
|
|
endif()
|
|
|
|
else()
|
|
# TODO: Copy macos shared libraries
|
|
message(FATAL_ERROR "CEF-CMake: Build platform not supported yet")
|
|
endif()
|