From 40e0342e600049428db637b10e252fd8cc54d56f Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 16:20:15 +0200 Subject: [PATCH] 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 --- src/resolve/meson.build | 152 +++++++++++----------------------------- 1 file changed, 40 insertions(+), 112 deletions(-) diff --git a/src/resolve/meson.build b/src/resolve/meson.build index 9353c2da948..9461d6a8629 100644 --- a/src/resolve/meson.build +++ b/src/resolve/meson.build @@ -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 + { -- 2.47.3