From ec5bdca9e5c5ab94dd8a7b1f1ec8678366987e7f Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Wed, 16 Dec 2020 22:17:49 +0000 Subject: [PATCH] buildsys: Compile daemon code directly with binary A long time ago we de-duplicated the daemon and binary into a single executable, but left the daemon code building as an internal static library. Let's take the next step and compile the sources directly as part of the executable build. For example, we can then de-duplicate the `CFLAGS/CXXFLAGS`. And in the future this will help us turn on LTO. --- Makefile-daemon.am | 28 +++++----------------------- Makefile-rpm-ostree.am | 13 +++++++++---- src/lib/rpmostree-package.c | 3 --- src/lib/rpmostree.c | 5 ++--- 4 files changed, 16 insertions(+), 33 deletions(-) diff --git a/Makefile-daemon.am b/Makefile-daemon.am index 7b928fcb..1e8040e9 100644 --- a/Makefile-daemon.am +++ b/Makefile-daemon.am @@ -1,3 +1,7 @@ +# This file used to declare a separate libtool static library. +# Now that the daemon and binary are the same thing, we have +# Makefile-rpm-ostree.am reuse these variables. + dbus_built_sources = rpm-ostreed-generated.h rpm-ostreed-generated.c # TODO: Add --c-generate-autocleanup=all once we depend on GLib 2.50+ @@ -19,10 +23,7 @@ CLEANFILES += rpm-ostreed-generated-org.projectatomic.rpmostree1.OS.xml \ rpm-ostreed-generated-org.projectatomic.rpmostree1.Transaction.xml \ $(NULL) -noinst_LTLIBRARIES += librpmostreed.la -nodist_librpmostreed_la_SOURCES = $(dbus_built_sources) - -librpmostreed_la_SOURCES = \ +librpmostreed_sources = \ src/daemon/rpmostreed-types.h \ src/daemon/rpmostreed-daemon.h \ src/daemon/rpmostreed-daemon.c \ @@ -51,25 +52,6 @@ librpmostreed_la_SOURCES = \ src/daemon/rpmostreed-os-experimental.c \ $(NULL) -rpmostreed_common_cflags = $(PKGDEP_RPMOSTREE_CFLAGS) \ - -DG_LOG_DOMAIN=\"rpm-ostreed\" \ - -fvisibility=hidden \ - -D_RPMOSTREE_EXTERN= \ - -I$(srcdir)/src/daemon \ - -I$(srcdir)/src/lib \ - -I$(srcdir)/src/libpriv \ - -I$(libglnx_srcpath) \ - $(NULL) -librpmostreed_la_CFLAGS = $(AM_CFLAGS) $(rpmostreed_common_cflags) -librpmostreed_la_CXXFLAGS = $(AM_CXXFLAGS) $(rpmostree_common_cflags) - -librpmostreed_la_LIBADD = \ - $(PKGDEP_RPMOSTREE_LIBS) \ - librpmostreepriv.la \ - librpmostree-1.la \ - $(CAP_LIBS) - $(NULL) - dbusconf_DATA = $(srcdir)/src/daemon/org.projectatomic.rpmostree1.conf dbusconfdir = $(datadir)/dbus-1/system.d diff --git a/Makefile-rpm-ostree.am b/Makefile-rpm-ostree.am index 9e4b58a9..f8db64dd 100644 --- a/Makefile-rpm-ostree.am +++ b/Makefile-rpm-ostree.am @@ -18,8 +18,6 @@ bin_PROGRAMS += rpm-ostree rpm_ostree_SOURCES = src/app/main.cxx \ - rpm-ostreed-generated.h \ - rpm-ostreed-generated.c \ src/app/rpmostree-builtins.h \ src/app/rpmostree-db-builtins.h \ src/app/rpmostree-compose-builtins.h \ @@ -62,6 +60,7 @@ rpm_ostree_SOURCES = src/app/main.cxx \ src/app/rpmostree-composeutil.cxx \ src/app/rpmostree-composeutil.h \ src/app/rpmostree-builtin-compose.c \ + $(librpmostreed_sources) \ $(NULL) if BUILDOPT_ROJIG @@ -72,12 +71,18 @@ rpm_ostree_SOURCES += \ $(NULL) endif +nodist_rpm_ostree_SOURCES = $(dbus_built_sources) + rpmostree_common_cflags = -I$(srcdir)/src/app -I$(srcdir)/src/daemon \ -I$(srcdir)/src/lib -I$(srcdir)/src/libpriv -I$(libglnx_srcpath) \ - -fvisibility=hidden -DPKGLIBDIR=\"$(pkglibdir)\" $(PKGDEP_RPMOSTREE_CFLAGS) + -fvisibility=hidden \ + -DG_LOG_DOMAIN=\"rpm-ostreed\" \ + -DLIBDIR=\"$(libdir)\" -DPKGLIBDIR=\"$(pkglibdir)\" \ + $(PKGDEP_RPMOSTREE_CFLAGS) rpm_ostree_CFLAGS = $(AM_CFLAGS) $(rpmostree_common_cflags) rpm_ostree_CXXFLAGS = $(AM_CXXFLAGS) $(rpmostree_common_cflags) -rpm_ostree_LDADD = $(PKGDEP_RPMOSTREE_LIBS) librpmostreepriv.la librpmostree-1.la librpmostreed.la +rpm_ostree_LDADD = $(PKGDEP_RPMOSTREE_LIBS) $(CAP_LIBS) libglnx.la librpmostreepriv.la librpmostree-1.la +EXTRA_rpm_ostree_DEPENDENCIES = libdnf.so.2 privdatadir=$(pkglibdir) privdata_DATA = src/app/rpm-ostree-0-integration.conf diff --git a/src/lib/rpmostree-package.c b/src/lib/rpmostree-package.c index d9040591..1caa9b6f 100644 --- a/src/lib/rpmostree-package.c +++ b/src/lib/rpmostree-package.c @@ -220,9 +220,6 @@ _rpm_ostree_package_list_for_commit (OstreeRepo *repo, * wants to link to this shared library too. So for now if we don't * find the pkglist in the commit metadata, just return as if it's * empty. - * - * TODO: Rework this to run via the special shlib-ipc that is used - * in rpmostree.c. */ g_autoptr(GVariant) pkglist_v = get_commit_rpmdb_pkglist (commit); if (!pkglist_v) diff --git a/src/lib/rpmostree.c b/src/lib/rpmostree.c index f0383b71..80ac0e22 100644 --- a/src/lib/rpmostree.c +++ b/src/lib/rpmostree.c @@ -39,8 +39,6 @@ * These APIs access generic global state. */ -#define IPC_FD 3 - GVariant * _rpmostree_shlib_ipc_send (const char *variant_type, char **args, const char *wd, GError **error) { @@ -49,7 +47,7 @@ _rpmostree_shlib_ipc_send (const char *variant_type, char **args, const char *wd if (socketpair (AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, pair) < 0) return (GVariant*)glnx_null_throw_errno_prefix (error, "couldn't create socket pair"); glnx_fd_close int my_sock_fd = glnx_steal_fd (&pair[0]); - g_subprocess_launcher_take_fd (launcher, pair[1], IPC_FD); + g_subprocess_launcher_take_fd (launcher, pair[1], RPMOSTREE_SHLIB_IPC_FD); if (wd != NULL) g_subprocess_launcher_set_cwd (launcher, wd); @@ -87,6 +85,7 @@ _rpmostree_shlib_ipc_send (const char *variant_type, char **args, const char *wd if (r < 0) return NULL; g_assert_cmpint (r, ==, 1); + g_assert_cmphex (buffer[0], ==, 0xFF); if (nm != 1) return glnx_null_throw (error, "Got %d control messages, expected 1", nm);