build: greatly speed up build times using pch

This commit is contained in:
outfoxxed committed 2024-03-11 18:18:55 -07:00
1 parent 3480707e99
commit c44041653c
10 files changed
+51 -8

No files matched your search

+23 -1
View File
@@ -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)
+2
View File
@@ -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.
+2 -2
View File
@@ -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" ./.;
+1 -1
Submodule docs updated: 2d0b15bbd5...b4587482d7.
+1 -1
View File
@@ -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; [
+1
View File
@@ -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)
+4
View File
@@ -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()
+13 -3
View File
@@ -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)
+1
View File
@@ -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)