diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 730ee00..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,322 +0,0 @@ -# Copyright (c) 2016 The Chromium Embedded Framework Authors. All rights -# reserved. Use of this source code is governed by a BSD-style license that -# can be found in the LICENSE file. - -# OVERVIEW -# -# CMake is a cross-platform open-source build system that can generate project -# files in many different formats. It can be downloaded from -# http://www.cmake.org or installed via a platform package manager. -# -# CMake-generated project formats that have been tested with JCEF include: -# -# Linux: Ninja, Unix Makefiles -# MacOS: Ninja, Xcode 8+ (x86_64) or Xcode 12.2+ (ARM64) -# Windows: Ninja, Visual Studio 2015+ -# -# Ninja is a cross-platform open-source tool for running fast builds using -# pre-installed platform toolchains (GNU, clang, Xcode or MSVC). It can be -# downloaded from http://martine.github.io/ninja/ or installed via a platform -# package manager. -# -# BUILD REQUIREMENTS -# -# The below requirements must be met to build JCEF. -# -# - CMake version 2.8.12.1 or newer. -# -# - Linux requirements: -# Currently supported distributions include Debian Wheezy, Ubuntu Precise, and -# related. Ubuntu 18.04 64-bit is recommended. Newer versions will likely also -# work but may not have been tested. -# Required packages include: -# build-essential -# -# - MacOS requirements: -# Xcode 8 or newer building on MacOS 10.11 (El Capitan) or newer for x86_64. -# Xcode 12.2 or newer building on MacOS 10.15.4 (Catalina) or newer for ARM64. -# Only 64-bit builds are supported. The Xcode command-line tools must also be -# installed. -# -# - Windows requirements: -# Visual Studio 2015 Update 2 or newer building on Windows 7 or newer. Visual -# Studio 2019 and Windows 10 64-bit are recommended. -# -# BUILD EXAMPLES -# -# The below commands will generate project files and create a Debug build of all -# JCEF native targets using CMake and the platform toolchain. -# -# Start by creating and entering the CMake build output directory. The -#`jcef_build` directory name is required by other JCEF tooling (specifically the -# tools/make_distrib.[bat|sh] and tools/run.[bat|sh] scripts) and should not be -# changed. -# > cd path/to/java-cef/src -# > mkdir jcef_build && cd jcef_build -# -# To perform a Linux build using a 32-bit CEF binary distribution on a 32-bit -# Linux platform or a 64-bit CEF binary distribution on a 64-bit Linux platform: -# Using Unix Makefiles: -# > cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug .. -# > make -j4 -# -# Using Ninja: -# > cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug .. -# > ninja -# -# To perform a MacOS build using a 64-bit CEF binary distribution: -# Using the Xcode IDE: -# > cmake -G "Xcode" -DPROJECT_ARCH="x86_64" .. -# Open jcef.xcodeproj in Xcode and select Product > Build. -# -# Using Ninja: -# > cmake -G "Ninja" -DPROJECT_ARCH="x86_64" -DCMAKE_BUILD_TYPE=Debug .. -# > ninja -# -# To perform a MacOS build using an ARM64 CEF binary distribution: -# Using the Xcode IDE: -# > cmake -G "Xcode" -DPROJECT_ARCH="arm64" .. -# Open jcef.xcodeproj in Xcode and select Product > Build. -# -# Using Ninja: -# > cmake -G "Ninja" -DPROJECT_ARCH="arm64" -DCMAKE_BUILD_TYPE=Debug .. -# > ninja -# -# To perform a Windows build using a 32-bit CEF binary distribution: -# Using the Visual Studio 2019 IDE: -# > cmake -G "Visual Studio 16" -A Win32 .. -# Open jcef.sln in Visual Studio and select Build > Build Solution. -# -# Using Ninja with Visual Studio 2019 command-line tools: -# (this path may be different depending on your Visual Studio installation) -# > "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat" -# > cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug .. -# > ninja -# -# To perform a Windows build using a 64-bit CEF binary distribution: -# Using the Visual Studio 2019 IDE: -# > cmake -G "Visual Studio 16" -A x64 .. -# Open jcef.sln in Visual Studio and select Build > Build Solution. -# -# Using Ninja with Visual Studio 2019 command-line tools: -# (this path may be different depending on your Visual Studio installation) -# > "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat" -# > cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug .. -# > ninja - -# -# Shared configuration. -# - -cmake_minimum_required(VERSION 2.8.12.1) - -# Only generate Debug and Release configuration types. -set(CMAKE_CONFIGURATION_TYPES Debug Release) - -# Project name. -project(jcef) - -# Use folders in the resulting project files. -set_property(GLOBAL PROPERTY OS_FOLDERS ON) - - -# -# CEF configuration. -# - -# Specify the CEF distribution version. -if(NOT DEFINED CEF_VERSION) - set(CEF_VERSION "95.7.14+g9f72f35+chromium-95.0.4638.69") -endif() - -# Determine the platform. -if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - if("${PROJECT_ARCH}" STREQUAL "arm64") - set(CEF_PLATFORM "macosarm64") - else() - set(CEF_PLATFORM "macosx64") - endif() -elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") - if("${PROJECT_ARCH}" STREQUAL "amd64") - set(CEF_PLATFORM "linux64") - elseif("${PROJECT_ARCH}" STREQUAL "arm64") - set(CEF_PLATFORM "linuxarm64") - elseif("${PROJECT_ARCH}" STREQUAL "arm/v6") - set(CEF_PLATFORM "linuxarm") - else() - set(CEF_PLATFORM "linux32") - endif() -elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") - if(MSVC) - include(CheckSymbolExists) - - # MSVC predefines _M_ARM64 for compilations that target ARM64 - # and _M_AMD64 for compilations that target x86_64. - check_symbol_exists("_M_ARM64" "" CEF_PLATFORM_WINARM64) - check_symbol_exists("_M_AMD64" "" CEF_PLATFORM_WIN64) - - # We also should set PROJECT_ARCH explicitly because FindCEF.cmake deduces it incorrectly for - # cross-compilation cases. - if(CEF_PLATFORM_WINARM64) - set(CEF_PLATFORM "windowsarm64") - set(PROJECT_ARCH "arm64") - elseif(CEF_PLATFORM_WIN64) - set(CEF_PLATFORM "windows64") - set(PROJECT_ARCH "x86_64") - else() - set(CEF_PLATFORM "windows32") - set(PROJECT_ARCH "x86") - endif() - else() - message(FATAL_ERROR "Building JCEF for Windows using non-MSVC compiler is not supported.") - endif() -endif() - -# Add this project's cmake/ directory to the module path. -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - -# Download and extract the CEF binary distribution (executes DownloadCEF.cmake). -include(DownloadCEF) -DownloadCEF("${CEF_PLATFORM}" "${CEF_VERSION}" "${CMAKE_SOURCE_DIR}/third_party/cef") - -# Add the CEF binary distribution's cmake/ directory to the module path. -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CEF_ROOT}/cmake") - -# Load the CEF configuration (executes FindCEF.cmake). -find_package(CEF REQUIRED) - - -# -# Python configuration. -# - -# Support specification of the Python executable path via the command-line. -if(DEFINED ENV{PYTHON_EXECUTABLE}) - file(TO_CMAKE_PATH "$ENV{PYTHON_EXECUTABLE}" PYTHON_EXECUTABLE) -endif() - -if(NOT PYTHON_EXECUTABLE) - unset(PYTHON_EXECUTABLE) - - # Find the python interpreter. - find_package(PythonInterp) - - if(NOT ${PYTHONINTERP_FOUND}) - message(FATAL_ERROR "A Python installation is required. Set the " - "PYTHON_EXECUTABLE environment variable to explicitly " - "specify the Python executable path.") - endif() -endif() - -message(STATUS "Using Python: ${PYTHON_EXECUTABLE}") - - -# -# Java configuration. -# - -# Minimum required Java version. -set(JDK_MIN_VERSION 1.7) - -set(JAVA_FATAL_ERROR "A Java installation is required. Set the JAVA_HOME " - "environment variable to explicitly specify the Java " - "installation directory.") - -# Find the Java Native Interface (JNI) installation. -find_package(JNI ${JDK_MIN_VERSION}) -if(NOT ${JNI_FOUND}) - message(FATAL_ERROR ${JAVA_FATAL_ERROR}) -endif() - -if(OS_MACOSX) - # OS X stores the Java binaries separately from the JNI includes/libraries. - # Find the Java development installation. - find_package(Java ${JDK_MIN_VERSION} COMPONENTS Development) - - if(NOT ${Java_FOUND}) - message(FATAL_ERROR ${JAVA_FATAL_ERROR}) - endif() - - # Determine the root path for the Java installation. - # Remove "bin/javac" from the path. - get_filename_component(JAVA_DIR ${Java_JAVAC_EXECUTABLE} DIRECTORY) - get_filename_component(JAVA_DIR ${JAVA_DIR} DIRECTORY) -else() - # Determine the root path for the Java installation. - # Remove "include" from the path. - get_filename_component(JAVA_DIR ${JAVA_INCLUDE_PATH} DIRECTORY) -endif() - - -# -# Post-configuration actions. -# - -# Generate the JCEF version header. -message(STATUS "Generating native/jcef_version.h file...") -execute_process( - COMMAND "${PYTHON_EXECUTABLE}" - "tools/make_version_header.py" - "--header" - "native/jcef_version.h" - "--cef-path" - "${CEF_ROOT}" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE EXECUTE_RV - ) -if(NOT EXECUTE_RV STREQUAL "0") - message(FATAL_ERROR "Execution failed with unexpected result: ${EXECUTE_RV}") -endif() - -# Copy the CEF README.txt file to the cmake build directory for use by the -# make_readme.py script. -file(COPY "${CEF_ROOT}/README.txt" DESTINATION "${CMAKE_BINARY_DIR}") - -# Download clang-format from Google Storage. -if(OS_WINDOWS) - set(GS_PLATFORM "win32") - set(GS_HASHPATH "win/clang-format.exe.sha1") -elseif(OS_MACOSX) - set(GS_PLATFORM "darwin") - set(GS_HASHPATH "mac/clang-format.sha1") -elseif(OS_LINUX) - set(GS_PLATFORM "linux*") - set(GS_HASHPATH "linux64/clang-format.sha1") -endif() - -message(STATUS "Downloading clang-format from Google Storage...") -execute_process( - COMMAND "${PYTHON_EXECUTABLE}" - "tools/buildtools/download_from_google_storage.py" - "--no_resume" - "--platform=${GS_PLATFORM}" - "--no_auth" - "--bucket" "chromium-clang-format" - "-s" "tools/buildtools/${GS_HASHPATH}" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE EXECUTE_RV - ) -if(NOT EXECUTE_RV STREQUAL "0") - message(FATAL_ERROR "Execution failed with unexpected result: ${EXECUTE_RV}") -endif() - - -# -# Include target subdirectories. -# - -add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper) -add_subdirectory(native) - - -# -# Display configuration settings. -# - -PRINT_CEF_CONFIG() - -message(STATUS "*** JCEF CONFIGURATION SETTINGS ***") -message(STATUS "Python executable: ${PYTHON_EXECUTABLE}") -message(STATUS "Java directory: ${JAVA_DIR}") -message(STATUS "JNI libraries: ${JNI_LIBRARIES}") -message(STATUS "JNI include directories: ${JNI_INCLUDE_DIRS}") diff --git a/DockerfileLinux b/DockerfileLinux index e4e82aa..846e879 100644 --- a/DockerfileLinux +++ b/DockerfileLinux @@ -18,6 +18,10 @@ COPY out/linux* /prebuild #Copy additional natives COPY natives /natives +#Copy cmake patching script +COPY scripts/patch_cmake.py . +COPY patch/CMakeLists.txt.patch . + #Copy and launch run script COPY scripts/run_linux.sh . RUN chmod +x run_linux.sh diff --git a/DockerfileWindows b/DockerfileWindows index 655a2be..6ac59fb 100644 --- a/DockerfileWindows +++ b/DockerfileWindows @@ -2,6 +2,10 @@ FROM friwidev/jcefdocker:windows-latest WORKDIR C:/ +#Copy cmake patching script +COPY scripts/patch_cmake.py . +COPY patch/CMakeLists.txt.patch . + #Copy and launch run script COPY scripts/run_windows.bat . ENTRYPOINT ["run_windows.bat"] diff --git a/patch/CMakeLists.txt.patch b/patch/CMakeLists.txt.patch new file mode 100644 index 0000000..18187f7 --- /dev/null +++ b/patch/CMakeLists.txt.patch @@ -0,0 +1,44 @@ +# Determine the platform. +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") + if("${PROJECT_ARCH}" STREQUAL "arm64") + set(CEF_PLATFORM "macosarm64") + else() + set(CEF_PLATFORM "macosx64") + endif() +elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + if("${PROJECT_ARCH}" STREQUAL "amd64") + set(CEF_PLATFORM "linux64") + elseif("${PROJECT_ARCH}" STREQUAL "arm64") + set(CEF_PLATFORM "linuxarm64") + elseif("${PROJECT_ARCH}" STREQUAL "arm/v6") + set(CEF_PLATFORM "linuxarm") + else() + set(CEF_PLATFORM "linux32") + endif() +elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") + #Stolen from Jetbrains jcef repository for the arm64 windows build + if(MSVC) + include(CheckSymbolExists) + + # MSVC predefines _M_ARM64 for compilations that target ARM64 + # and _M_AMD64 for compilations that target x86_64. + check_symbol_exists("_M_ARM64" "" CEF_PLATFORM_WINARM64) + check_symbol_exists("_M_AMD64" "" CEF_PLATFORM_WIN64) + + # We also should set PROJECT_ARCH explicitly because FindCEF.cmake deduces it incorrectly for + # cross-compilation cases. + if(CEF_PLATFORM_WINARM64) + set(CEF_PLATFORM "windowsarm64") + set(PROJECT_ARCH "arm64") + elseif(CEF_PLATFORM_WIN64) + set(CEF_PLATFORM "windows64") + set(PROJECT_ARCH "x86_64") + else() + set(CEF_PLATFORM "windows32") + set(PROJECT_ARCH "x86") + endif() + else() + message(FATAL_ERROR "Building JCEF for Windows using non-MSVC compiler is not supported.") + endif() +endif() + diff --git a/scripts/patch_cmake.py b/scripts/patch_cmake.py new file mode 100644 index 0000000..2d92d04 --- /dev/null +++ b/scripts/patch_cmake.py @@ -0,0 +1,34 @@ +#Small script to patch CMakeLists.txt files with custom build options +#Will replace file contents between two markers ("Determine the platform" +#and "Add this project's cmake") +#Usage: python patch_cmake.py + +import sys + +input = sys.argv[1] +patch = sys.argv[2] + +print("Patching "+input+" to accept further build architectures...") + +f = open(input, "r") +p = open(patch, "r") +result = "" +inpatch = False +for x in f: + if x.startswith("# Determine the platform"): + inpatch = True + for y in p: + result += y + elif x.startswith("# Add this project's cmake"): + inpatch = False + if inpatch == False: + result += x + +f.close() +p.close() + +f = open(input, "w") +f.write(result) +f.close() + +print("Done.") diff --git a/scripts/run_linux.sh b/scripts/run_linux.sh index 61472a1..4d6d671 100644 --- a/scripts/run_linux.sh +++ b/scripts/run_linux.sh @@ -23,14 +23,14 @@ if [ ! -f "/jcef/README.md" ]; then git clone ${REPO} /jcef cd /jcef git checkout ${REF} - #Temporary CMakeLists patching - beautify in the future - rm CMakeLists.txt - curl -o CMakeLists.txt https://raw.githubusercontent.com/jcefmaven/jcefbuild/master/CMakeLists.txt else echo "Found existing files to build" cd /jcef fi +#CMakeLists patching +python3 /builder/patch_cmake.py CMakeLists.txt /builder/CMakeLists.txt.patch + # Create and enter the `jcef_build` directory. # The `jcef_build` directory name is required by other JCEF tooling # and should not be changed. diff --git a/scripts/run_windows.bat b/scripts/run_windows.bat index 6475b48..536833c 100644 --- a/scripts/run_windows.bat +++ b/scripts/run_windows.bat @@ -12,9 +12,8 @@ if exist "jcef\README.md" (echo "Found existing files to build" && cd jcef) ^ else (echo "Did not find files to build - cloning..." && GOTO :CLONE) :BUILD -:: Temporary CMakeLists patching - beautify in the future -del /f CMakeLists.txt -curl -o CMakeLists.txt https://raw.githubusercontent.com/jcefmaven/jcefbuild/master/CMakeLists.txt +:: CMakeLists patching +python3 C:/patch_cmake.py CMakeLists.txt C:/CMakeLists.txt.patch :: Prepare build dir mkdir jcef_build && cd jcef_build