summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.cmake.conf1
-rw-r--r--CMakeLists.txt71
-rw-r--r--cmake/FindGn.cmake23
-rw-r--r--cmake/FindNinja.cmake31
-rw-r--r--src/core/CMakeLists.txt57
-rw-r--r--src/gn/CMakeLists.txt36
-rw-r--r--src/ninja/CMakeLists.txt37
7 files changed, 256 insertions, 0 deletions
diff --git a/.cmake.conf b/.cmake.conf
new file mode 100644
index 000000000..930548045
--- /dev/null
+++ b/.cmake.conf
@@ -0,0 +1 @@
+set(QT_REPO_MODULE_VERSION "6.0.0")
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 000000000..42c4faa7d
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,71 @@
+cmake_minimum_required(VERSION 3.18.0)
+
+include(.cmake.conf)
+include(ExternalProject)
+
+project(QtWebEngineSuperBuild
+ VERSION "${QT_REPO_MODULE_VERSION}"
+ DESCRIPTION "Qt WebEngine Libraries"
+ HOMEPAGE_URL "https://qt.io/"
+ LANGUAGES CXX C
+)
+
+find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
+
+set(installDir ${CMAKE_CURRENT_BINARY_DIR}/install)
+
+### NINJA
+
+if(NOT Ninja_FOUND)
+ externalproject_add(ninja
+ SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/ninja
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/ninja
+ INSTALL_DIR ${installDir}
+ PREFIX ninja
+ USES_TERMINAL_BUILD ON
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+ -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR>
+)
+endif()
+
+### GN
+
+if(NOT Gn_FOUND)
+ externalproject_add(gn
+ SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/gn
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gn
+ INSTALL_DIR ${installDir}
+ PREFIX gn
+ USES_TERMINAL_BUILD ON
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+ -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR>
+ -DWEBENGINE_ROOT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}
+)
+endif()
+
+# on windows source path can be specified without hard drive letter,
+# however we need that for gn use REALPATH
+get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" REALPATH)
+
+externalproject_add(libs
+ SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/core
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/core
+ INSTALL_DIR ${installDir}
+ PREFIX libs
+ USES_TERMINAL_CONFIGURE ON
+ USES_TERMINAL_BUILD ON
+ CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DWEBENGINE_ROOT_BUILD_PATH=${CMAKE_CURRENT_BINARY_DIR}
+ -DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}
+)
+
+if(NOT Gn_FOUND)
+ externalproject_add_stepdependencies(libs install gn)
+endif()
+
+if(NOT Ninja_FOUND)
+ externalproject_add_stepdependencies(gn install ninja)
+endif()
+
diff --git a/cmake/FindGn.cmake b/cmake/FindGn.cmake
new file mode 100644
index 000000000..dfbe5b363
--- /dev/null
+++ b/cmake/FindGn.cmake
@@ -0,0 +1,23 @@
+if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR)
+ set(WEBENGINE_ROOT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/../..)
+endif()
+
+set(CMAKE_PROGRAM_PATH ${WEBENGINE_ROOT_BUILD_DIR}/install/bin)
+find_program(Gn_EXECUTABLE NAMES gn)
+
+include(FindPackageHandleStandardArgs)
+
+find_package_handle_standard_args(
+ Gn
+ REQUIRED_VARS Gn_EXECUTABLE)
+
+if(Gn_FOUND AND NOT TARGET Gn::gn)
+ add_executable(Gn::gn IMPORTED)
+ set_property(TARGET Gn::gn PROPERTY IMPORTED_LOCATION ${Gn_EXECUTABLE})
+endif()
+
+include(FeatureSummary)
+set_package_properties(Gn PROPERTIES
+ URL "https://gn.googlesource.com/gn/"
+ DESCRIPTION "Meta-build system"
+)
diff --git a/cmake/FindNinja.cmake b/cmake/FindNinja.cmake
new file mode 100644
index 000000000..3615d58b9
--- /dev/null
+++ b/cmake/FindNinja.cmake
@@ -0,0 +1,31 @@
+if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR)
+ set(WEBENGINE_ROOT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/..)
+endif()
+
+set(CMAKE_PROGRAM_PATH ${WEBENGINE_ROOT_BUILD_DIR}/install/bin)
+find_program(Ninja_EXECUTABLE NAMES ninja ninja-build)
+
+if(Ninja_EXECUTABLE)
+ execute_process(
+ COMMAND ${Ninja_EXECUTABLE} --version
+ OUTPUT_VARIABLE Ninja_VERSION
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+ Ninja
+ REQUIRED_VARS Ninja_EXECUTABLE
+ VERSION_VAR Ninja_VERSION)
+
+if(Ninja_FOUND AND NOT TARGET Ninja::ninja)
+ add_executable(Ninja::ninja IMPORTED)
+ set_property(TARGET Ninja::ninja PROPERTY IMPORTED_LOCATION ${Ninja_EXECUTABLE})
+endif()
+
+include(FeatureSummary)
+set_package_properties(Ninja PROPERTIES
+ URL "https://ninja-build.org/"
+ DESCRIPTION "Build tool"
+)
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
new file mode 100644
index 000000000..e22d0230e
--- /dev/null
+++ b/src/core/CMakeLists.txt
@@ -0,0 +1,57 @@
+cmake_minimum_required(VERSION 3.18.0)
+
+project(QtWebEngineCore
+ VERSION "6.0.0"
+ DESCRIPTION "QtWebEngineCore"
+ HOMEPAGE_URL "https://doc.qt.io/qt-5/qtwebenginecore-module.html"
+ LANGUAGES CXX C)
+
+if (NOT DEFINED CMAKE_WEBENGINE_ROOT_BUILD_PATH)
+ get_filename_component(CMAKE_WEBENGINE_ROOT_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}/../.. ABSOLUTE)
+endif()
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/../../cmake")
+set(buildDir "${CMAKE_CURRENT_BINARY_DIR}/debug")
+
+find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
+find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Gui Widgets Network OpenGL OpenGLWidgets Quick Qml QuickTest Test)
+find_package(Gn REQUIRED)
+find_package(Ninja REQUIRED)
+find_package(Python2 REQUIRED)
+
+qt_build_repo_begin()
+
+get_target_property(gnCmd Gn::gn IMPORTED_LOCATION)
+
+set(gnArg help)
+
+message("configure with gn")
+execute_process(
+ COMMAND ${gnCmd} ${gnArg}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMAND_ECHO STDOUT
+ RESULT_VARIABLE gnResult
+ OUTPUT_VARIABLE gnOutput
+ ERROR_VARIABLE gnError
+ )
+
+if(NOT gnResult EQUAL 0)
+ message(FATAL_ERROR "Calling gn - FAILED ! \n${gnOutput}\n${gnError}")
+endif()
+
+add_custom_command(
+ OUTPUT QtWebEngineCore.stamp
+ WORKING_DIRECTORY ${buildDir}
+ COMMAND Ninja::ninja
+ $ENV{NINJAFLAGS}
+ -C ${buildDir}
+ ${CMAKE_PROJECT_NAME}
+ USES_TERMINAL
+ VERBATIM
+)
+add_custom_target(ninja ALL DEPENDS QtWebEngineCore.stamp)
+
+message("CMD: ${gn_cmd}\nARGS: ${gnArg}\nOUTPUT: ${gnOutput}")
+
+qt_build_repo_end()
+
diff --git a/src/gn/CMakeLists.txt b/src/gn/CMakeLists.txt
new file mode 100644
index 000000000..9e98e152b
--- /dev/null
+++ b/src/gn/CMakeLists.txt
@@ -0,0 +1,36 @@
+
+cmake_minimum_required(VERSION 3.18.0)
+
+project(Gn
+ DESCRIPTION "Meta-build system"
+ HOMEPAGE_URL "https://gn.googlesource.com/gn/"
+ LANGUAGES CXX C
+)
+
+set(GN_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/gn)
+set(GN_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gn)
+set(GN_EXECUTABLE ${GN_BINARY_DIR}/gn)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake")
+
+find_package(Python2 REQUIRED)
+find_package(Ninja 1.7.2 REQUIRED)
+
+file(MAKE_DIRECTORY ${GN_BINARY_DIR})
+add_custom_command(
+ OUTPUT ${GN_EXECUTABLE}
+ WORKING_DIRECTORY ${GN_BINARY_DIR}
+ COMMAND ${Python2_EXECUTABLE} ${GN_SOURCE_DIR}/build/gen.py
+ --no-last-commit-position
+ --out-path .
+ --cc ${CMAKE_C_COMPILER}
+ --cxx ${CMAKE_CXX_COMPILER}
+ --ld ${CMAKE_CXX_COMPILER}
+ COMMAND Ninja::ninja gn
+ VERBATIM
+ USES_TERMINAL
+ COMMAND_EXPAND_LISTS
+)
+add_custom_target(gn ALL DEPENDS ${GN_EXECUTABLE})
+install(FILES ${GN_EXECUTABLE}
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ DESTINATION bin)
diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt
new file mode 100644
index 000000000..1ac89df5a
--- /dev/null
+++ b/src/ninja/CMakeLists.txt
@@ -0,0 +1,37 @@
+
+cmake_minimum_required(VERSION 3.18.0)
+
+project(Ninja
+ DESCRIPTION "Ninja Build Tool"
+ HOMEPAGE_URL "https://ninja-build.org/"
+ LANGUAGES CXX C
+)
+
+set(NINJA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/ninja)
+set(NINJA_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
+find_package(Python2 REQUIRED)
+
+if(WIN32)
+ set(NINJA_EXECUTABLE ninja.exe)
+else()
+ set(NINJA_EXECUTABLE ninja)
+endif()
+
+file(MAKE_DIRECTORY ${NINJA_BINARY_DIR})
+
+add_custom_command(
+ OUTPUT ${NINJA_EXECUTABLE}
+ WORKING_DIRECTORY ${NINJA_BINARY_DIR}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${NINJA_BINARY_DIR}/$<CONFIG>
+ COMMAND ${CMAKE_COMMAND} -E chdir ${NINJA_BINARY_DIR}/$<CONFIG>
+ ${Python2_EXECUTABLE} ${NINJA_SOURCE_DIR}/configure.py --bootstrap
+ USES_TERMINAL
+ VERBATIM
+)
+add_custom_target(Ninja ALL DEPENDS ${NINJA_EXECUTABLE})
+install(FILES ${NINJA_BINARY_DIR}/$<CONFIG>/${NINJA_EXECUTABLE}
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ DESTINATION bin
+)
+