From 3bc47f0f407e57dccb9013dabaf1a56d8e6c6575 Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Tue, 11 May 2021 10:18:18 +0200 Subject: Add support for gn version Check the version before using gn, since some systems can have already gn installed. In case of cross builds gn is installed into host qt and can simply end up in /usr/bin path of x86_64 sysroot in case of yocto builds, meaning it will be picked up by the host system path. Moreover, findGn.cmake is also going to be installed and should not just look for non existing builds paths. One can also avoid pointless recompilations of gn for every single clean build. Gn can be easily installed by simply building the "gn" project: cmake path/to/qtwebengine/src/gn cmake --build . --parallel cmake --install . Note setting DCMAKE_INSTALL_PREFIX and/or DESTDIR can install gn to desired location. Change-Id: Ie8f989c838dad2e6e7e346a4f6a861e187ec037f Reviewed-by: Allan Sandfeld Jensen --- CMakeLists.txt | 2 +- cmake/FindGn.cmake | 25 ++++++++++++++++++++++--- configure.cmake | 2 +- src/core/CMakeLists.txt | 2 +- src/gn/CMakeLists.txt | 14 ++++++++++---- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1281ef59b..fb1050109 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,7 @@ if(NOT Ninja_FOUND) CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_PREFIX_PATH:PATH= -) + ) endif() ### GN diff --git a/cmake/FindGn.cmake b/cmake/FindGn.cmake index dfbe5b363..12a90778c 100644 --- a/cmake/FindGn.cmake +++ b/cmake/FindGn.cmake @@ -3,13 +3,32 @@ if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR) endif() set(CMAKE_PROGRAM_PATH ${WEBENGINE_ROOT_BUILD_DIR}/install/bin) + find_program(Gn_EXECUTABLE NAMES gn) +if(Gn_EXECUTABLE) + execute_process( + COMMAND ${Gn_EXECUTABLE} --version + OUTPUT_VARIABLE Gn_VERSION + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif() + +string(REGEX MATCHALL "([1-9]\.[0-9]\.[0-9])\.qtwebengine\.qt\.io.*" Gn_QT_VERSION "${Gn_VERSION}") +if("${Gn_QT_VERSION}") + set(Gn_VERSION "${Gn_QT_VERSION}") +endif() + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args( - Gn - REQUIRED_VARS Gn_EXECUTABLE) +find_package_handle_standard_args(Gn + FOUND_VAR + Gn_FOUND + VERSION_VAR + Gn_VERSION + REQUIRED_VARS + Gn_EXECUTABLE +) if(Gn_FOUND AND NOT TARGET Gn::gn) add_executable(Gn::gn IMPORTED) diff --git a/configure.cmake b/configure.cmake index fa8e6b9b0..539cdb907 100644 --- a/configure.cmake +++ b/configure.cmake @@ -3,7 +3,7 @@ #### Libraries find_package(Ninja 1.7.2) -find_package(Gn) +find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT) find_package(Python2 2.7.5) find_package(GPerf) find_package(BISON) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 5017a552b..2a545f5b2 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -16,7 +16,7 @@ assertRunAsTopLevelBuild(TRUE) add_subdirectory(api) find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) -find_package(Gn REQUIRED) +find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT REQUIRED) find_package(Ninja 1.7.2 REQUIRED) find_package(Python2 2.7.5 REQUIRED) find_package(Nodejs 12.0) diff --git a/src/gn/CMakeLists.txt b/src/gn/CMakeLists.txt index 9a11184c3..4d25debb9 100644 --- a/src/gn/CMakeLists.txt +++ b/src/gn/CMakeLists.txt @@ -7,9 +7,15 @@ project(Gn LANGUAGES CXX C ) -set(GN_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/gn) +if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) + get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." REALPATH) +endif() + +include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf) + +set(GN_SOURCE_DIR ${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty/gn) set(GN_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBENGINE_ROOT_SOURCE_DIR}/cmake") find_package(Python2 REQUIRED) find_package(Ninja 1.7.2 REQUIRED) @@ -30,6 +36,7 @@ add_custom_command( --cc ${CMAKE_C_COMPILER} --cxx ${CMAKE_CXX_COMPILER} --ld ${CMAKE_CXX_COMPILER} + --qt-version "${QT_REPO_MODULE_VERSION}.qtwebengine.qt.io" $<$:--isysroot> $<$:${CMAKE_OSX_SYSROOT}> COMMAND Ninja::ninja -C ${GN_BINARY_DIR}/$ ${GN_EXECUTABLE} @@ -38,7 +45,6 @@ add_custom_command( COMMAND_EXPAND_LISTS ) add_custom_target(Gn ALL DEPENDS ${GN_EXECUTABLE}) -install(FILES ${GN_BINARY_DIR}/$/${GN_EXECUTABLE} - PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE +install(PROGRAMS ${GN_BINARY_DIR}/$/${GN_EXECUTABLE} DESTINATION bin ) -- cgit v1.2.3