meson: merge libs

lix, where modularity is made up and the patterns don't matter. merging
everything to match actual behavior of the system makes using rust much
easier because we'll have only *one* library to link, not half a dozen.

Change-Id: Ie3cb1db659798511128716402497697320bd0484
This commit is contained in:
eldritch horrors
2026-01-30 17:29:51 +00:00
parent 2e0cc67ec8
commit 279926d215
12 changed files with 95 additions and 307 deletions
+2 -5
View File
@@ -2,14 +2,11 @@
# Explicitly link curl so it binds to Nix-store libcurl, not /usr/lib/libcurl.
if is_darwin
plugin_deps = [
liblixutil.partial_dependency(includes : true, compile_args : true),
liblixstore.partial_dependency(includes : true, compile_args : true),
liblixexpr.partial_dependency(includes : true, compile_args : true),
liblixfetchers.partial_dependency(includes : true, compile_args : true),
liblix.partial_dependency(includes : true, compile_args : true),
curl,
]
else
plugin_deps = [liblixutil, liblixstore, liblixexpr, liblixfetchers, curl]
plugin_deps = [liblix, curl]
endif
plugin_mtls_store = shared_module(
+2 -38
View File
@@ -1,4 +1,4 @@
libcmd_sources = files(
liblix_sources += files(
'built-path.cc',
'cmd-profiles.cc',
'command.cc',
@@ -32,44 +32,8 @@ libcmd_headers = files(
'repl.hh',
)
libcmd_generated_headers = [
liblix_generated_headers += [
gen_header.process('repl-overlays.nix', preserve_path_from: meson.current_source_dir()),
]
libcmd = library(
'lixcmd',
libcmd_generated_headers,
libcmd_sources,
dependencies : [
liblixutil,
liblixstore,
liblixfetchers,
liblixexpr,
liblixmain,
liblix_doc,
boehm,
editline,
kj,
lowdown,
ncurses,
nlohmann_json,
],
# '../..' for self references like "lix/libcmd/*.hh"
include_directories : [ '../..' ],
cpp_pch : cpp_pch,
install : true,
# FIXME(Qyriad): is this right?
install_rpath : libdir,
)
install_headers(libcmd_headers, subdir : 'lix/libcmd', preserve_path : true)
liblixcmd = declare_dependency(
include_directories : include_directories('../..'),
dependencies : [
liblixutil,
liblixstore,
kj,
],
link_with : libcmd,
)
+1 -1
View File
@@ -1,4 +1,4 @@
libexpr_generated_headers += custom_target(
liblix_generated_headers += custom_target(
command : [ 'bash', '-c', 'echo \'R"__NIX_STR(\' | cat - @INPUT@ && echo \')__NIX_STR"\'' ],
input : 'call-flake.nix',
output : '@PLAINNAME@.gen.hh',
+6 -47
View File
@@ -1,8 +1,8 @@
libexpr_generated_headers = [
liblix_generated_headers += [
gen_header.process('primops/derivation.nix', preserve_path_from : meson.current_source_dir()),
]
foreach header : [ 'imported-drv-to-derivation.nix', 'fetchurl.nix' ]
libexpr_generated_headers += custom_target(
liblix_generated_headers += custom_target(
command : [ 'bash', '-c', 'echo \'R"__NIX_STR(\' | cat - @INPUT@ && echo \')__NIX_STR"\'' ],
input : header,
output : '@PLAINNAME@.gen.hh',
@@ -33,7 +33,7 @@ libexpr_setting_definitions = files(
'settings/trace-verbose.md',
# keep-sorted end
)
libexpr_settings_header = custom_target(
liblix_generated_headers += custom_target(
command : [
python.full_path(),
'@SOURCE_ROOT@/lix/code-generation/build_settings.py',
@@ -173,7 +173,7 @@ builtins_gen = custom_target(
'builtins.md',
],
)
register_builtins_header = builtins_gen[0]
liblix_generated_headers += builtins_gen[0]
builtins_md = builtins_gen[1]
builtin_constant_definitions = files(
@@ -204,10 +204,10 @@ builtin_constants_gen = custom_target(
'builtin-constants.md',
],
)
register_builtin_constants_header = builtin_constants_gen[0]
liblix_generated_headers += builtin_constants_gen[0]
builtin_constants_md = builtin_constants_gen[1]
libexpr_sources = files(
liblix_sources += files(
# keep-sorted start
'attr-path.cc',
'attr-set.cc',
@@ -278,49 +278,8 @@ libexpr_headers = files(
# keep-sorted end
)
dependencies = [
liblixutil,
liblixstore,
liblixfetchers,
boehm,
boost,
kj,
nlohmann_json,
toml11,
]
libexpr = library(
'lixexpr',
libexpr_sources,
libexpr_settings_header,
libexpr_generated_headers,
register_builtins_header,
register_builtin_constants_header,
dependencies : dependencies,
# for shared.hh
include_directories : [
'../libmain',
],
cpp_pch : cpp_pch,
install : true,
# FIXME(Qyriad): is this right?
install_rpath : libdir,
)
install_headers(
libexpr_headers,
subdir : 'lix/libexpr',
preserve_path : true,
)
liblixexpr = declare_dependency(
include_directories : include_directories('../..'),
sources : libexpr_settings_header,
dependencies : [
liblixutil,
liblixfetchers,
boehm,
boost,
],
link_with : libexpr,
)
+2 -32
View File
@@ -1,4 +1,4 @@
libfetchers_sources = files(
liblix_sources += files(
'attrs.cc',
'cache.cc',
'fetch-settings.cc',
@@ -31,7 +31,7 @@ libfetchers_setting_definitions = files(
'settings/use-registries.md',
'settings/warn-dirty.md',
)
libfetchers_settings_header = custom_target(
liblix_generated_headers += custom_target(
command : [
python.full_path(),
'@SOURCE_ROOT@/lix/code-generation/build_settings.py',
@@ -46,34 +46,4 @@ libfetchers_settings_header = custom_target(
install_dir : includedir / 'lix/libfetchers',
)
dependencies = [
liblixstore,
liblixutil,
kj,
nlohmann_json,
]
libfetchers = library(
'lixfetchers',
libfetchers_settings_header,
libfetchers_sources,
dependencies : dependencies,
include_directories : [ '../..' ],
cpp_pch : cpp_pch,
install : true,
# FIXME(Qyriad): is this right?
install_rpath : libdir,
)
install_headers(libfetchers_headers, subdir : 'lix/libfetchers', preserve_path : true)
liblixfetchers = declare_dependency(
include_directories : include_directories('../..'),
sources : libfetchers_settings_header,
dependencies : [
liblixutil,
liblixstore,
kj,
],
link_with : libfetchers,
)
+1 -26
View File
@@ -1,4 +1,4 @@
libmain_sources = files(
liblix_sources += files(
'common-args.cc',
'crash-handler.cc',
'loggers.cc',
@@ -15,29 +15,4 @@ libmain_headers = files(
'shared.hh',
)
libmain = library(
'lixmain',
libmain_sources,
dependencies : [
liblixutil,
liblixstore,
liblixexpr,
boost,
kj,
],
include_directories : [ '../..' ],
cpp_pch : cpp_pch,
install : true,
# FIXME(Qyriad): is this right?
install_rpath : libdir,
)
install_headers(libmain_headers, subdir : 'lix/libmain', preserve_path : true)
liblixmain = declare_dependency(
include_directories : include_directories('../..'),
dependencies : [
liblixutil,
],
link_with : libmain,
)
+12 -66
View File
@@ -1,7 +1,5 @@
libstore_generated_headers = []
libstore_generated_sources = []
foreach header : [ 'schema.sql' ]
libstore_generated_headers += custom_target(
liblix_generated_headers += custom_target(
command : [ 'bash', '-c', 'echo \'R"__NIX_STR(\' | cat - @INPUT@ && echo \')__NIX_STR"\'' ],
input : header,
output : '@PLAINNAME@.gen.hh',
@@ -41,15 +39,13 @@ subdir('build')
foreach i : libstore_rpc
foreach rpc_src : i.to_list()
if rpc_src.full_path().endswith('.h')
libstore_generated_headers += [ rpc_src ]
liblix_generated_headers += [ rpc_src ]
else
libstore_generated_sources += [ rpc_src ]
liblix_sources += [ rpc_src ]
endif
endforeach
endforeach
libstore_settings_headers = []
file_transfer_setting_definitions = files(
# keep-sorted start
'file-transfer-settings/download-attempts.md',
@@ -62,7 +58,7 @@ file_transfer_setting_definitions = files(
'file-transfer-settings/user-agent-suffix.md',
# keep-sorted end
)
libstore_settings_headers += custom_target(
liblix_generated_headers += custom_target(
command : [
python.full_path(),
'@SOURCE_ROOT@/lix/code-generation/build_settings.py',
@@ -155,7 +151,7 @@ libstore_setting_definitions = files(
'settings/use-xdg-base-directories.md',
# keep-sorted end
)
libstore_settings_headers += custom_target(
liblix_generated_headers += custom_target(
command : [
python.full_path(),
'@SOURCE_ROOT@/lix/code-generation/build_settings.py',
@@ -170,13 +166,12 @@ libstore_settings_headers += custom_target(
install_dir : includedir / 'lix/libstore',
)
libstore_extra_objects = []
if dtrace_feature.enabled()
libstore_settings_headers += dtrace_header_gen.process('trace-probes.d')
libstore_extra_objects += dtrace_object_gen.process('trace-probes.d')
liblix_generated_headers += dtrace_header_gen.process('trace-probes.d')
liblix_sources += dtrace_object_gen.process('trace-probes.d')
endif
libstore_sources = files(
liblix_sources += files(
# keep-sorted start
'binary-cache-store.cc',
'build-result.cc',
@@ -317,66 +312,17 @@ libstore_headers = files(
)
if host_machine.system() == 'linux'
libstore_sources += files('platform/linux.cc')
liblix_sources += files('platform/linux.cc')
libstore_headers += files('platform/linux.hh')
elif host_machine.system() == 'darwin'
libstore_sources += files('platform/darwin.cc')
liblix_sources += files('platform/darwin.cc')
libstore_headers += files('platform/darwin.hh')
elif host_machine.system() == 'freebsd'
libstore_sources += files('platform/freebsd.cc')
liblix_sources += files('platform/freebsd.cc')
libstore_headers += files('platform/freebsd.hh')
else
libstore_sources += files('platform/fallback.cc')
liblix_sources += files('platform/fallback.cc')
libstore_headers += files('platform/fallback.hh')
endif
libstore_generated_headers += embedded_sandbox_headers
dependencies = [
liblixutil, # Internal.
aws_s3,
aws_sdk,
aws_sdk_transfer,
boost,
capnp_rpc,
curl,
kj,
libarchive,
nlohmann_json,
openssl,
seccomp,
sqlite,
]
if host_machine.system() == 'freebsd'
dependencies += [ libprocstat ]
endif
libstore = library(
'lixstore',
libstore_sources,
libstore_generated_sources,
libstore_settings_headers,
libstore_generated_headers,
libstore_extra_objects,
include_directories : [ '../..' ],
dependencies : dependencies,
cpp_args : cpp_args,
cpp_pch : cpp_pch,
install : true,
# FIXME(Qyriad): is this right?
install_rpath : libdir,
)
install_headers(libstore_headers, subdir : 'lix/libstore', preserve_path : true)
# Used by libfetchers.
liblixstore = declare_dependency(
include_directories : include_directories('../..'),
sources : libstore_settings_headers,
dependencies : [
liblixutil,
kj,
],
link_with : libstore,
)
+1 -1
View File
@@ -5,7 +5,7 @@
#include "lix/libstore/platform/darwin.hh"
#include "lix/libutil/regex.hh"
#include "lix/libutil/strings.hh"
#include "temporary-dir.hh"
#include "lix/libstore/temporary-dir.hh"
#include <sys/proc_info.h>
#include <sys/sysctl.h>
+1 -1
View File
@@ -1,4 +1,4 @@
#include "build/personality.hh"
#include "lix/libstore/build/personality.hh"
#include "lix/libstore/build/worker.hh"
#include "lix/libutil/c-calls.hh"
#include "lix/libutil/cgroup.hh"
+14 -72
View File
@@ -1,4 +1,4 @@
libutil_sources = files(
liblix_sources += files(
# keep-sorted start
'abstract-config.cc',
'archive.cc',
@@ -209,8 +209,10 @@ experimental_features_gen = custom_target(
false,
],
)
experimental_features_header = experimental_features_gen[0]
experimental_features_impl_header = experimental_features_gen[1]
liblix_generated_headers += [
experimental_features_gen[0],
experimental_features_gen[1],
]
experimental_features_shortlist_md = experimental_features_gen[2]
experimental_feature_descriptions_md = experimental_features_gen[3]
@@ -240,18 +242,18 @@ deprecated_features_gen = custom_target(
false
],
)
deprecated_features_header = deprecated_features_gen[0]
deprecated_features_impl_header = deprecated_features_gen[1]
liblix_generated_headers += [
deprecated_features_gen[0],
deprecated_features_gen[1],
]
deprecated_features_shortlist_md = deprecated_features_gen[2]
deprecated_feature_descriptions_md = deprecated_features_gen[3]
libutil_settings_headers = []
archive_setting_definitions = files(
'archive-settings/preallocate-contents.md',
'archive-settings/use-case-hack.md',
)
libutil_settings_headers += custom_target(
liblix_generated_headers += custom_target(
command : [
python.full_path(),
'@SOURCE_ROOT@/lix/code-generation/build_settings.py',
@@ -268,7 +270,7 @@ feature_setting_definitions = files(
'feature-settings/deprecated-features.md',
'feature-settings/experimental-features.md',
)
libutil_settings_headers += custom_target(
liblix_generated_headers += custom_target(
command : [
python.full_path(),
'@SOURCE_ROOT@/lix/code-generation/build_settings.py',
@@ -289,7 +291,7 @@ logging_setting_definitions = files(
'logging-settings/show-trace.md',
# keep-sorted end
)
libutil_settings_headers += custom_target(
liblix_generated_headers += custom_target(
command : [
python.full_path(),
'@SOURCE_ROOT@/lix/code-generation/build_settings.py',
@@ -304,9 +306,6 @@ libutil_settings_headers += custom_target(
install_dir : includedir / 'lix/libutil',
)
libutil_rpc_headers = []
libutil_rpc_sources = []
libutil_rpc_schemas = files(
# keep-sorted start
'logging.capnp',
@@ -335,65 +334,8 @@ foreach rpc : libutil_rpc_schemas
depfile : '@PLAINNAME@.d',
)
libutil_rpc_headers += rpc[0]
libutil_rpc_sources += rpc[1]
liblix_generated_headers += rpc[0]
liblix_sources += rpc[1]
endforeach
dependencies = [
boost,
brotli,
cpuid,
kj,
capnp_rpc,
libarchive,
nlohmann_json,
openssl,
libatomic,
# NOTE: this is secretly rust-monocrate in a trenchcoat.
# See that directory's README for more details.
liblixutil_rs,
]
libutil = library(
'lixutil',
libutil_sources,
libutil_rpc_sources,
libutil_rpc_headers,
experimental_features_header,
experimental_features_impl_header,
deprecated_features_header,
deprecated_features_impl_header,
libutil_settings_headers,
dependencies : dependencies,
include_directories : [ '../..' ],
cpp_pch : cpp_pch,
implicit_include_directories : true,
install : true,
)
install_headers(libutil_headers, subdir : 'lix/libutil', preserve_path : true)
# Used by libstore and libfetchers.
liblixutil = declare_dependency(
include_directories : include_directories('../..'),
sources : [
experimental_features_header,
deprecated_features_header,
libutil_settings_headers,
libutil_rpc_headers,
],
dependencies: [
boost,
# Everything has to link to kj if it uses libutil internally (ensured by
# lix-base pkg-config externally)
kj,
capnp_rpc,
libarchive,
nlohmann_json,
libatomic,
# This is secretly rust-monocrate + the generated header.
liblixutil_rs,
],
link_with : libutil
)
+1 -1
View File
@@ -9,4 +9,4 @@ Version: @PACKAGE_VERSION@
Requires: lix-base kj-async @BOEHM_IF_FOUND@
Requires.private: @AWS_SDK_IF_FOUND@ @BOEHM_IF_FOUND@ libeditline lowdown ncurses libbrotlidec libbrotlienc libcpuid libarchive libcrypto capnp-rpc libcurl libseccomp sqlite3
Cflags: -I${includedir}
Libs: -L${libdir} -lrust_monocrate -llixutil -llixstore -llixfetchers -llixexpr -llixmain -llixcmd
Libs: -L${libdir} -lrust_monocrate -llix
+52 -17
View File
@@ -140,21 +140,16 @@ liblixutil_rs = declare_dependency(
sources : [libutil_rs_gen_h],
)
# liblix_doc is actually rust-monocrate in a trenchcoat.
liblix_doc = declare_dependency(
link_with : rust_monocrate,
)
# we only collect sources and generated headers here. real headers are collected and
# installed by each subdir due to how meson generates paths for headers it installs.
liblix_sources = []
liblix_generated_headers = embedded_sandbox_headers
subdir('libutil')
# Load-bearing order. libstore depends on libutil.
subdir('libstore')
# libfetchers depends on libstore
subdir('libfetchers')
# libexpr depends on all of the above
subdir('libexpr')
# libmain depends on libutil and libstore
subdir('libmain')
# libcmd depends on everything
subdir('libcmd')
# libexec utilities should depend only on libutil, but meh.
@@ -176,15 +171,55 @@ foreach lib : [ 'util', 'store', 'fetchers', 'expr', 'main', 'cmd' ]
)
endforeach
dependencies = [
aws_s3,
aws_sdk,
aws_sdk_transfer,
boehm,
boost,
brotli,
capnp_rpc,
cpuid,
curl,
editline,
kj,
libarchive,
libatomic,
lowdown,
ncurses,
nlohmann_json,
openssl,
seccomp,
sqlite,
toml11,
# NOTE: this is secretly rust-monocrate in a trenchcoat.
# See that directory's README for more details.
liblixutil_rs,
]
if host_machine.system() == 'freebsd'
dependencies += [ libprocstat ]
endif
liblix_all = library(
'lix',
liblix_sources,
liblix_generated_headers,
dependencies : dependencies,
# `..` makes the `lix/` subtree of the repo available for includes,
# mirroring our header directory structure once they are installed.
include_directories : [ '..' ],
cpp_args : cpp_args,
cpp_pch : cpp_pch,
install : true,
# FIXME(Qyriad): is this right?
install_rpath : libdir,
)
liblix = declare_dependency(
dependencies : [
liblixutil,
liblixstore,
liblixfetchers,
liblixexpr,
liblixmain,
liblixcmd,
],
include_directories : include_directories('..'),
dependencies : dependencies,
link_with : liblix_all,
)
meson.override_dependency('lix', liblix)