aya-cef-subprocess/cef_cmake/CMakeLists.txt

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()