mirror of https://github.com/hak5/openwrt-owl.git
hotplug2: compile in the worker module statically, saves >20k uncompressed
SVN-Revision: 18104owl
parent
28e212cc40
commit
ebb1151032
|
@ -36,15 +36,15 @@ define Package/hotplug2/description
|
||||||
This is an implementation of Hotplug2-1.0-beta
|
This is an implementation of Hotplug2-1.0-beta
|
||||||
endef
|
endef
|
||||||
|
|
||||||
MAKE_FLAGS += CFLAGS="$(TARGET_CFLAGS) $(FPIC) -DHAVE_RULES -I."
|
MAKE_FLAGS += \
|
||||||
|
COPTS="$(TARGET_CFLAGS)" \
|
||||||
|
STATIC_WORKER="fork"
|
||||||
|
|
||||||
define Package/hotplug2/install
|
define Package/hotplug2/install
|
||||||
$(INSTALL_DIR) $(1)/etc
|
$(INSTALL_DIR) $(1)/etc
|
||||||
$(INSTALL_DATA) ./files/hotplug2.rules $(1)/etc/
|
$(INSTALL_DATA) ./files/hotplug2.rules $(1)/etc/
|
||||||
$(INSTALL_DIR) $(1)/sbin
|
$(INSTALL_DIR) $(1)/sbin
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hotplug2 $(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
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,hotplug2))
|
$(eval $(call BuildPackage,hotplug2))
|
||||||
|
|
|
@ -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,
|
Loading…
Reference in New Issue