hotplug2: compile in the worker module statically, saves >20k uncompressed
authorFelix Fietkau <nbd@openwrt.org>
Tue, 20 Oct 2009 20:49:44 +0000 (20:49 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 20 Oct 2009 20:49:44 +0000 (20:49 +0000)
SVN-Revision: 18104

package/hotplug2/Makefile
package/hotplug2/patches/110-static_worker.patch [new file with mode: 0644]

index 3dab96ba7f14d3c46e4dae4178cea5bc233fc1bc..b51e5a97f6b5701b9fea35720b2eb2d1c7264547 100644 (file)
@@ -36,15 +36,15 @@ define Package/hotplug2/description
  This is an implementation of Hotplug2-1.0-beta
 endef
 
-MAKE_FLAGS += CFLAGS="$(TARGET_CFLAGS) $(FPIC) -DHAVE_RULES -I."
+MAKE_FLAGS += \
+       COPTS="$(TARGET_CFLAGS)" \
+       STATIC_WORKER="fork"
 
 define Package/hotplug2/install
        $(INSTALL_DIR) $(1)/etc
        $(INSTALL_DATA) ./files/hotplug2.rules $(1)/etc/
        $(INSTALL_DIR) $(1)/sbin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/hotplug2 $(1)/sbin/
-       $(INSTALL_DIR) $(1)/lib/hotplug2
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/workers/worker_fork.so $(1)/lib/hotplug2
 endef
 
 $(eval $(call BuildPackage,hotplug2))
diff --git a/package/hotplug2/patches/110-static_worker.patch b/package/hotplug2/patches/110-static_worker.patch
new file mode 100644 (file)
index 0000000..76471d5
--- /dev/null
@@ -0,0 +1,163 @@
+--- a/Makefile
++++ b/Makefile
+@@ -4,7 +4,24 @@ SOFTWARE=hotplug2
+ VERSION=1.0-alpha
+ BINS=hotplug2 hotplug2-modwrap
+-SUBDIRS=parser rules workers
++SUBDIRS=parser rules
++
++hotplug2-objs := \
++      hotplug2.o netlink.o seqnum.o settings.o uevent.o xmemutils.o \
++      workers/loader.o parser/parser.o parser/buffer.o parser/token.o \
++      parser/token_queue.o parser/lexer.o rules/ruleset.o rules/rule.o \
++      rules/condition.o rules/expression.o rules/execution.o \
++      rules/command.o
++
++ifdef STATIC_WORKER
++  ifeq ($(wildcard workers/worker_$(STATIC_WORKER).c),)
++    $(error Worker source worker/worker_$(STATIC_WORKER).c not found)
++  endif
++  hotplug2-objs += action.o workers/worker_$(STATIC_WORKER).o
++else
++  SUBDIRS += workers
++endif
++
+ DESTDIR=
+@@ -13,13 +30,15 @@ all: $(BINS)
+ install:
+       $(INSTALL_BIN) $(BINS) $(DESTDIR)/sbin/
+-
+-hotplug2: hotplug2.o netlink.o seqnum.o settings.o uevent.o xmemutils.o \
+-          workers/loader.o parser/parser.o parser/buffer.o parser/token.o \
+-          parser/token_queue.o parser/lexer.o rules/ruleset.o rules/rule.o \
+-          rules/condition.o rules/expression.o rules/execution.o \
+-          rules/command.o 
++hotplug2: $(hotplug2-objs)
+ coldplug2: coldplug2.o
+ include common.mak
++
++ifdef STATIC_WORKER
++  CFLAGS += -DSTATIC_WORKER=1
++else
++  CFLAGS += $(FPIC)
++endif
++
+--- a/common.mak
++++ b/common.mak
+@@ -1,8 +1,11 @@
+ # vim:set sw=8 nosta:
+-CFLAGS=-Os -Wall -g -fPIC
++COPTS=-Os -Wall -g
+ LDFLAGS=-g -ldl
++CFLAGS=$(COPTS)
++FPIC=-fPIC
++
+ INSTALL=install -c -m 644
+ INSTALL_BIN=install -c -m 755
+--- a/workers/loader.c
++++ b/workers/loader.c
+@@ -1,5 +1,23 @@
+ #include "loader.h"
++#ifdef STATIC_WORKER
++
++extern struct worker_module_t worker_module;
++static struct loader_ctx_t static_ctx = {
++      .module = &worker_module
++};
++
++struct loader_ctx_t *worker_load(const char *name)
++{
++      return &static_ctx;
++}
++
++void worker_free(struct loader_ctx_t *ctx)
++{
++}
++
++#else
++
+ struct loader_ctx_t *worker_load(const char *name) {
+       struct loader_ctx_t *ctx;
+@@ -12,7 +30,7 @@ struct loader_ctx_t *worker_load(const c
+               return NULL;
+       }
+       
+-      ctx->module = dlsym(ctx->dl_handle, "module");
++      ctx->module = dlsym(ctx->dl_handle, "worker_module");
+       if (ctx->module == NULL) {
+               fprintf(stderr, "Loader error: %s\n", dlerror());
+               worker_free(ctx);
+@@ -31,3 +49,5 @@ void worker_free(struct loader_ctx_t *ct
+       
+       free(ctx);
+ }
++
++#endif
+--- a/hotplug2.c
++++ b/hotplug2.c
+@@ -261,17 +261,21 @@ int main(int argc, char *argv[]) {
+       }
+       /* Load the worker. */
++#ifndef STATIC_WORKER
+       if (settings->worker_name == NULL) {
+               fprintf(stderr, "Missing worker name.\n");
+               settings_clear(settings);
+               exit(1);
+       }
++#endif
+       settings->worker = worker_load(settings->worker_name);
++#ifndef STATIC_WORKER
+       if (settings->worker == NULL) {
+               fprintf(stderr, "Unable to load worker: %s\n", settings->worker_name);
+               settings_clear(settings);
+               exit(1);
+       }
++#endif
+       
+       /* Prepare a netlink connection to the kernel. */
+       settings->netlink_socket = netlink_init();
+--- a/workers/worker_example.c
++++ b/workers/worker_example.c
+@@ -62,7 +62,7 @@ static int worker_example_process(void *
+       return 0;
+ }
+-struct worker_module_t module = {
++struct worker_module_t worker_module = {
+       "Hotplug2 example module",
+       worker_example_init,
+       worker_example_deinit,
+--- a/workers/worker_fork.c
++++ b/workers/worker_fork.c
+@@ -443,7 +443,7 @@ static int worker_fork_process(void *in_
+       return 0;
+ }
+-struct worker_module_t module = {
++struct worker_module_t worker_module = {
+       "Hotplug2 forking module",
+       worker_fork_init,
+       worker_fork_deinit,
+--- a/workers/worker_single.c
++++ b/workers/worker_single.c
+@@ -18,7 +18,7 @@ static int worker_single_process(void *s
+       return 0;
+ }
+-struct worker_module_t module = {
++struct worker_module_t worker_module = {
+       "Hotplug2 single process module",
+       worker_single_init,
+       worker_single_deinit,