]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolve: Simplify and optimize meson file
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 30 Apr 2025 14:20:15 +0000 (16:20 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 1 May 2025 03:23:43 +0000 (12:23 +0900)
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

index 9353c2da948098e3f2192a5d792ebc905b853c29..9461d6a862982382e9c69a6ae380a4c79cd40b85 100644 (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 + {