resolve: Simplify and optimize meson file

We were compiling the same resolved sources over and over again (up to
10 times) which had a substantial effect on build times. Let's make sure
we only compile the resolved sources once by having one static library
containing the objects for all the resolved sources.

While we're at it, get rid of unnecessary variables and includes in the
resolve meson file and generally clean things up a bit.

Before (recorded with ClangBuildAnalyzer):

**** Time summary:
Compilation (1823 times):
  Parsing (frontend):          675.5 s
  Codegen & opts (backend):     81.6 s

After:

**** Time summary:
Compilation (1585 times):
  Parsing (frontend):          553.6 s
  Codegen & opts (backend):     70.7 s
This commit is contained in:
Daan De Meyer
2025-05-01 12:23:43 +09:00
committed by Yu Watanabe
parent df48013586
commit 40e0342e60
+40 -112
View File
@@ -1,22 +1,16 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
resolve_includes = [includes, include_directories('.')]
basic_dns_sources = files(
'resolved-dns-dnssec.c',
'resolved-dns-packet.c',
'resolved-dns-rr.c',
'resolved-dns-answer.c',
'resolved-dns-question.c',
'resolved-util.c',
'dns-type.c',
)
systemd_resolved_sources = files(
'dns-type.c',
'resolved-bus.c',
'resolved-conf.c',
'resolved-dns-answer.c',
'resolved-dns-cache.c',
'resolved-dns-dnssec.c',
'resolved-dns-packet.c',
'resolved-dns-query.c',
'resolved-dns-question.c',
'resolved-dns-rr.c',
'resolved-dns-scope.c',
'resolved-dns-search-domain.c',
'resolved-dns-server.c',
@@ -36,14 +30,10 @@ systemd_resolved_sources = files(
'resolved-mdns.c',
'resolved-resolv-conf.c',
'resolved-socket-graveyard.c',
'resolved-util.c',
'resolved-varlink.c',
)
resolvectl_sources = files(
'resolvconf-compat.c',
'resolvectl.c',
)
############################################################
dns_type_list_txt = custom_target(
@@ -81,16 +71,6 @@ dns_type_to_name_h = custom_target(
command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
capture : true)
generated_sources += [dns_type_from_name_h, dns_type_to_name_h]
basic_dns_sources += [dns_type_from_name_h, dns_type_to_name_h]
libsystemd_resolve_core = static_library(
'systemd-resolve-core',
basic_dns_sources,
include_directories : includes,
dependencies : userspace,
build_by_default : false)
resolved_gperf_c = custom_target(
'resolved_gperf.c',
input : 'resolved-gperf.gperf',
@@ -103,56 +83,54 @@ resolved_dnssd_gperf_c = custom_target(
output : 'resolved-dnssd-gperf.c',
command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
generated_sources += [resolved_gperf_c, resolved_dnssd_gperf_c]
systemd_resolved_sources += [resolved_gperf_c, resolved_dnssd_gperf_c]
generated_sources += [dns_type_from_name_h, dns_type_to_name_h, resolved_gperf_c, resolved_dnssd_gperf_c]
systemd_resolved_sources += [dns_type_from_name_h, dns_type_to_name_h, resolved_gperf_c, resolved_dnssd_gperf_c]
systemd_resolved_dependencies = [threads, libm, libopenssl]
if conf.get('ENABLE_DNS_OVER_TLS') == 1
systemd_resolved_sources += files(
'resolved-dnstls.c',
)
endif
link_with = [
libshared,
libsystemd_resolve_core,
]
resolved_core = static_library(
'systemd-resolved-core',
systemd_resolved_sources,
include_directories : includes,
dependencies : userspace,
build_by_default : false)
resolve_common_template = {
'link_with' : [
libshared,
libsystemd_resolve_core,
resolved_core,
],
'dependencies' : [
libopenssl,
libm,
threads,
],
}
resolve_test_template = test_template + resolve_common_template
resolve_fuzz_template = fuzz_template + resolve_common_template
executables += [
libexec_template + {
libexec_template + resolve_common_template + {
'name' : 'systemd-resolved',
'dbus' : true,
'conditions' : ['ENABLE_RESOLVE'],
'sources' : systemd_resolved_sources +
files('resolved.c'),
'include_directories' : resolve_includes,
'link_with' : link_with,
'dependencies' : systemd_resolved_dependencies,
'sources' : files('resolved.c'),
},
executable_template + {
executable_template + resolve_common_template + {
'name' : 'resolvectl',
'public' : true,
'conditions' : ['ENABLE_RESOLVE'],
'sources' : resolvectl_sources,
'link_with' : link_with,
'dependencies' : [
libopenssl,
'sources' : files(
'resolvconf-compat.c',
'resolvectl.c',
),
'dependencies' : resolve_common_template['dependencies'] + [
libidn,
libm,
threads,
],
},
resolve_test_template + {
@@ -199,76 +177,26 @@ executables += [
'sources' : files('test-dnssec-complex.c'),
'type' : 'manual',
},
test_template + {
'sources' : [
files('test-dns-search-domain.c'),
basic_dns_sources,
systemd_resolved_sources,
],
'dependencies' : systemd_resolved_dependencies,
'include_directories' : resolve_includes,
resolve_test_template + {
'sources' : files('test-dns-search-domain.c'),
},
test_template + {
'sources' : [
files('test-dns-synthesize.c'),
basic_dns_sources,
systemd_resolved_sources,
],
'dependencies' : [
systemd_resolved_dependencies,
],
'include_directories' : resolve_includes,
resolve_test_template + {
'sources' : files('test-dns-synthesize.c'),
},
test_template + {
'sources' : [
files('test-dns-zone.c'),
basic_dns_sources,
systemd_resolved_sources,
],
'dependencies' : [
systemd_resolved_dependencies,
],
'include_directories' : resolve_includes,
resolve_test_template + {
'sources' : files('test-dns-zone.c'),
},
test_template + {
'sources' : [
files('test-resolved-link.c'),
basic_dns_sources,
systemd_resolved_sources,
],
'dependencies' : [
systemd_resolved_dependencies,
],
'include_directories' : resolve_includes,
resolve_test_template + {
'sources' : files('test-resolved-link.c'),
},
test_template + {
'sources' : [
files('test-dns-query.c'),
basic_dns_sources,
systemd_resolved_sources,
],
'dependencies' : [
systemd_resolved_dependencies,
],
'include_directories' : resolve_includes,
resolve_test_template + {
'sources' : files('test-dns-query.c'),
},
test_template + {
'sources' : [
files('test-resolved-stream.c'),
basic_dns_sources,
systemd_resolved_sources,
],
'dependencies' : systemd_resolved_dependencies,
'include_directories' : resolve_includes,
resolve_test_template + {
'sources' : files('test-resolved-stream.c'),
},
test_template + {
'sources' : [
files('test-resolved-dummy-server.c'),
basic_dns_sources,
systemd_resolved_sources,
],
'dependencies' : systemd_resolved_dependencies,
'include_directories' : resolve_includes,
resolve_test_template + {
'sources' : files('test-resolved-dummy-server.c'),
'type' : 'manual',
},
resolve_fuzz_template + {