diff --git a/meson.build b/meson.build index b98b1fb15..7fd29bdf5 100644 --- a/meson.build +++ b/meson.build @@ -129,6 +129,20 @@ endif cxx = meson.get_compiler('cpp') + +# clangd breaks when GCC is using precompiled headers lmao +# https://git.lix.systems/lix-project/lix/issues/374 +should_pch = get_option('enable-pch-std') +summary('PCH C++ stdlib', should_pch, bool_yn : true) +if should_pch + # Unlike basically everything else that takes a file, Meson requires the arguments to + # cpp_pch : to be strings and doesn't accept files(). So absolute path it is. + cpp_pch = [meson.project_source_root() / 'src/pch/precompiled-headers.hh'] +else + cpp_pch = [] +endif + + # Translate some historical and Mesony CPU names to Lixy CPU names. # FIXME(Qyriad): the 32-bit x86 code is not tested right now, because cross compilation for Lix # to those architectures is currently broken for other reasons, namely: diff --git a/meson.options b/meson.options index 6b13fa8a0..fc2050809 100644 --- a/meson.options +++ b/meson.options @@ -64,3 +64,7 @@ option('internal-api-docs', type : 'feature', value : 'auto', option('profile-dir', type : 'string', value : 'etc/profile.d', description : 'the path to install shell profile files', ) + +option('enable-pch-std', type : 'boolean', value : true, + description : 'whether to use precompiled headers for C++\'s standard library (breaks clangd if you\'re using GCC)', +) diff --git a/src/libcmd/meson.build b/src/libcmd/meson.build index 4dc0714c8..3d92f36a4 100644 --- a/src/libcmd/meson.build +++ b/src/libcmd/meson.build @@ -54,7 +54,7 @@ libcmd = library( nlohmann_json, lix_doc ], - cpp_pch : ['../pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, install : true, # FIXME(Qyriad): is this right? install_rpath : libdir, diff --git a/src/libexpr/meson.build b/src/libexpr/meson.build index e60a85b5d..080fdb443 100644 --- a/src/libexpr/meson.build +++ b/src/libexpr/meson.build @@ -145,7 +145,7 @@ libexpr = library( include_directories : [ '../libmain', ], - cpp_pch : ['../pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, install : true, # FIXME(Qyriad): is this right? install_rpath : libdir, diff --git a/src/libfetchers/meson.build b/src/libfetchers/meson.build index ee38b6cda..b66d0b9f9 100644 --- a/src/libfetchers/meson.build +++ b/src/libfetchers/meson.build @@ -30,7 +30,7 @@ libfetchers = library( liblixutil, nlohmann_json, ], - cpp_pch : ['../pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, install : true, # FIXME(Qyriad): is this right? install_rpath : libdir, diff --git a/src/libmain/meson.build b/src/libmain/meson.build index 075aa83b2..a7cce287c 100644 --- a/src/libmain/meson.build +++ b/src/libmain/meson.build @@ -20,7 +20,7 @@ libmain = library( liblixutil, liblixstore, ], - cpp_pch : ['../pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, install : true, # FIXME(Qyriad): is this right? install_rpath : libdir, diff --git a/src/libstore/meson.build b/src/libstore/meson.build index 7a129d22c..fa363bd19 100644 --- a/src/libstore/meson.build +++ b/src/libstore/meson.build @@ -220,7 +220,7 @@ libstore = library( nlohmann_json, ], cpp_args : cpp_args, - cpp_pch : ['../pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, install : true, # FIXME(Qyriad): is this right? install_rpath : libdir, diff --git a/src/libutil/meson.build b/src/libutil/meson.build index 8c3377e76..f6d14a11b 100644 --- a/src/libutil/meson.build +++ b/src/libutil/meson.build @@ -129,7 +129,7 @@ libutil = library( openssl, nlohmann_json, ], - cpp_pch : ['../pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, implicit_include_directories : true, install : true, ) diff --git a/src/nix/meson.build b/src/nix/meson.build index 8115a3d08..22f148fcb 100644 --- a/src/nix/meson.build +++ b/src/nix/meson.build @@ -89,7 +89,7 @@ nix = executable( boehm, nlohmann_json, ], - cpp_pch : ['../pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, install : true, # FIXME(Qyriad): is this right? install_rpath : libdir, diff --git a/tests/unit/meson.build b/tests/unit/meson.build index 06aff4626..0d3f00ba5 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -68,7 +68,7 @@ libutil_tester = executable( liblixutil_test_support, nlohmann_json, ], - cpp_pch : ['../../src/pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, ) test( @@ -103,7 +103,7 @@ libstore_test_support = library( include_directories : include_directories( 'libstore-support', ), - cpp_pch : ['../../src/pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, ) liblixstore_test_support = declare_dependency( include_directories : include_directories('libstore-support'), @@ -137,7 +137,7 @@ libstore_tester = executable( gtest, nlohmann_json, ], - cpp_pch : ['../../src/pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, ) test( @@ -169,7 +169,7 @@ libexpr_test_support = library( include_directories : include_directories( 'libexpr-support', ), - cpp_pch : ['../../src/pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, ) liblixexpr_test_support = declare_dependency( include_directories : include_directories('libexpr-support'), @@ -203,7 +203,7 @@ libexpr_tester = executable( gtest, nlohmann_json, ], - cpp_pch : ['../../src/pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, ) test( @@ -230,7 +230,7 @@ libcmd_tester = executable( gtest, boost, ], - cpp_pch : ['../../src/pch/precompiled-headers.hh'], + cpp_pch : cpp_pch, ) test(