forked from quickshell/quickshell
build: greatly speed up build times using pch
This commit is contained in:
parent
3480707e99
commit
c44041653c
|
@ -1,5 +1,5 @@
|
|||
cmake_minimum_required(VERSION 3.20)
|
||||
project(quickshell VERSION "0.1.0")
|
||||
project(quickshell VERSION "0.1.0" LANGUAGES CXX C)
|
||||
|
||||
set(QT_MIN_VERSION "6.6.0")
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
|
@ -65,6 +65,28 @@ find_package(Qt6 REQUIRED COMPONENTS ${QT_FPDEPS})
|
|||
qt_standard_project_setup(REQUIRES 6.6)
|
||||
set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/qml_modules)
|
||||
|
||||
file(GENERATE
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pchstub.cpp
|
||||
CONTENT ""
|
||||
)
|
||||
|
||||
add_library(qt-pch ${CMAKE_CURRENT_BINARY_DIR}/pchstub.cpp)
|
||||
target_link_libraries(qt-pch PRIVATE ${QT_DEPS})
|
||||
target_precompile_headers(qt-pch PUBLIC
|
||||
<memory>
|
||||
<qobject.h>
|
||||
<qqmlengine.h>
|
||||
<qlist.h>
|
||||
<qcolor.h>
|
||||
<qquickitem.h>
|
||||
<qevent.h>
|
||||
)
|
||||
|
||||
function (qs_pch target)
|
||||
target_precompile_headers(${target} REUSE_FROM qt-pch)
|
||||
target_link_libraries(${target} PRIVATE ${QT_DEPS}) # required for gcc to accept the pch on plugin targets
|
||||
endfunction()
|
||||
|
||||
add_subdirectory(src/core)
|
||||
add_subdirectory(src/io)
|
||||
|
||||
|
|
|
@ -47,6 +47,8 @@ This repo has a nix flake you can use to install the package directly:
|
|||
Quickshell's binary is available at `quickshell.packages.<system>.default` to be added to
|
||||
lists such as `environment.systemPackages` or `home.packages`.
|
||||
|
||||
Note: by default this package is built with clang as it is significantly faster.
|
||||
|
||||
## Manual
|
||||
|
||||
If not using nix, you'll have to build from source.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
nix-gitignore,
|
||||
pkgs,
|
||||
keepDebugInfo,
|
||||
stdenv ? (keepDebugInfo pkgs.stdenv),
|
||||
buildStdenv ? pkgs.clang17Stdenv,
|
||||
|
||||
cmake,
|
||||
ninja,
|
||||
|
@ -23,7 +23,7 @@
|
|||
else "unknown"),
|
||||
debug ? false,
|
||||
enableWayland ? true,
|
||||
}: stdenv.mkDerivation {
|
||||
}: buildStdenv.mkDerivation {
|
||||
pname = "quickshell${lib.optionalString debug "-debug"}";
|
||||
version = "0.1.0";
|
||||
src = nix-gitignore.gitignoreSource "/docs\n/examples\n" ./.;
|
||||
|
|
2
docs
2
docs
|
@ -1 +1 @@
|
|||
Subproject commit 2d0b15bbd52ea61bd79880b89fae0a589010d1f3
|
||||
Subproject commit b4587482d7835818e78f8a84b29057b88c35c567
|
|
@ -10,7 +10,7 @@
|
|||
rev = "1f062cc198d1112d13e5128fa1f2ee3dbffe613b";
|
||||
sha256 = "kbt0Zc1qHE5fhqBkKz8iue+B+ZANjF1AR/RdgmX1r0I=";
|
||||
}) { inherit pkgs; };
|
||||
in pkgs.mkShell {
|
||||
in pkgs.mkShell.override { stdenv = quickshell.stdenv; } {
|
||||
inputsFrom = [ quickshell ];
|
||||
|
||||
nativeBuildInputs = with pkgs; [
|
||||
|
|
|
@ -22,6 +22,7 @@ set_source_files_properties(main.cpp PROPERTIES COMPILE_DEFINITIONS GIT_REVISION
|
|||
qt_add_qml_module(quickshell URI Quickshell VERSION 0.1)
|
||||
|
||||
target_link_libraries(quickshell PRIVATE ${QT_DEPS})
|
||||
qs_pch(quickshell)
|
||||
|
||||
if (BUILD_TESTING)
|
||||
add_subdirectory(test)
|
||||
|
|
|
@ -16,6 +16,10 @@ target_link_libraries(quickshell-io-init PRIVATE ${QT_DEPS})
|
|||
|
||||
target_link_libraries(quickshell PRIVATE quickshell-ioplugin quickshell-io-init)
|
||||
|
||||
qs_pch(quickshell-io)
|
||||
qs_pch(quickshell-ioplugin)
|
||||
qs_pch(quickshell-io-init)
|
||||
|
||||
if (BUILD_TESTING)
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
|
|
@ -37,9 +37,15 @@ function (wl_proto target name path)
|
|||
execute_process(COMMAND ${qtwaylandscanner} client-header ${path} OUTPUT_FILE ${PROTO_BUILD_PATH}/qwayland-${name}.h)
|
||||
execute_process(COMMAND ${qtwaylandscanner} client-code ${path} OUTPUT_FILE ${PROTO_BUILD_PATH}/qwayland-${name}.cpp)
|
||||
|
||||
target_sources(${target} PRIVATE ${PROTO_BUILD_PATH}/wayland-${name}.c)
|
||||
target_sources(${target} PRIVATE ${PROTO_BUILD_PATH}/qwayland-${name}.cpp)
|
||||
target_include_directories(${target} PRIVATE ${PROTO_BUILD_PATH})
|
||||
add_library(wl-proto-${name}
|
||||
${PROTO_BUILD_PATH}/wayland-${name}.c
|
||||
${PROTO_BUILD_PATH}/qwayland-${name}.cpp
|
||||
)
|
||||
|
||||
target_include_directories(wl-proto-${name} INTERFACE ${PROTO_BUILD_PATH})
|
||||
target_link_libraries(wl-proto-${name} Qt6::WaylandClient Qt6::WaylandClientPrivate)
|
||||
|
||||
target_link_libraries(${target} PRIVATE wl-proto-${name})
|
||||
endfunction()
|
||||
|
||||
# -----
|
||||
|
@ -65,4 +71,8 @@ endif()
|
|||
target_link_libraries(quickshell-wayland PRIVATE ${QT_DEPS})
|
||||
target_link_libraries(quickshell-wayland-init PRIVATE ${QT_DEPS})
|
||||
|
||||
qs_pch(quickshell-wayland)
|
||||
qs_pch(quickshell-waylandplugin)
|
||||
qs_pch(quickshell-wayland-init)
|
||||
|
||||
target_link_libraries(quickshell PRIVATE quickshell-waylandplugin quickshell-wayland-init)
|
||||
|
|
|
@ -8,5 +8,6 @@ qt_add_library(quickshell-wayland-sessionlock STATIC
|
|||
|
||||
wl_proto(quickshell-wayland-sessionlock ext-session-lock-v1 "${WAYLAND_PROTOCOLS}/staging/ext-session-lock/ext-session-lock-v1.xml")
|
||||
target_link_libraries(quickshell-wayland-sessionlock PRIVATE ${QT_DEPS} wayland-client)
|
||||
qs_pch(quickshell-wayland-sessionlock)
|
||||
|
||||
target_link_libraries(quickshell-wayland PRIVATE quickshell-wayland-sessionlock)
|
||||
|
|
|
@ -9,4 +9,7 @@ qt_add_qml_module(quickshell-wayland-layershell URI Quickshell.Wayland._WlrLayer
|
|||
wl_proto(quickshell-wayland-layershell wlr-layer-shell-unstable-v1 "${CMAKE_CURRENT_SOURCE_DIR}/wlr-layer-shell-unstable-v1.xml")
|
||||
target_link_libraries(quickshell-wayland-layershell PRIVATE ${QT_DEPS} wayland-client)
|
||||
|
||||
qs_pch(quickshell-wayland-layershell)
|
||||
qs_pch(quickshell-wayland-layershellplugin)
|
||||
|
||||
target_link_libraries(quickshell-wayland PRIVATE quickshell-wayland-layershellplugin)
|
||||
|
|
Loading…
Reference in a new issue