diff options
-rw-r--r-- | .cmake.conf | 1 | ||||
-rw-r--r-- | CMakeLists.txt | 71 | ||||
-rw-r--r-- | cmake/FindGn.cmake | 23 | ||||
-rw-r--r-- | cmake/FindNinja.cmake | 31 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 57 | ||||
-rw-r--r-- | src/gn/CMakeLists.txt | 36 | ||||
-rw-r--r-- | src/ninja/CMakeLists.txt | 37 |
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 +) + |