From 75a9abff74dfbdd3103e115c19f4a5f0cc9cb0af Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Sat, 5 Sep 2015 11:30:45 +0200 Subject: [PATCH] RTEMS rules: provide support to build application with symbols exported. This allows to use dlopen from application to load plugins or user applications. Signed-off-by: Pavel Pisa --- snippets/rtems.omk | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/snippets/rtems.omk b/snippets/rtems.omk index 3bf66c3..8ba457c 100644 --- a/snippets/rtems.omk +++ b/snippets/rtems.omk @@ -13,6 +13,7 @@ # xxx_LIBS .. list of specific target libraries # INCLUDES .. additional include directories and defines for user-space # tar_EMBEDFILES .. list of tars with embedded files +# xxx_EXPORTSYMBOLS .. if "y" then include symbol table in the application for dlopen functionality include $(RTEMS_MAKEFILE_PATH)/Makefile.inc include $(RTEMS_CUSTOM) @@ -169,6 +170,8 @@ $(2).c $(2)-stubs.c $(2)-skels.c $(2)-common.c $(2).h: $(1) $$(wildcard $$(first $(Q) $$(idl_COMPILE) $$($(2)_IDLFLAGS) $(1) endef +RTEMS_SYSM?=rtems-syms + # Syntax: $(call PROGRAM_template,,,) define PROGRAM_template USER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL) @@ -190,14 +193,26 @@ USER_OBJS += $$($(1)_OBJS) USER_SOURCES += $$($(1)_SOURCES) USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES) +$(1)_LDFLAGS += $$(if $$(filter COMPLETE,$$($(1)_EXPORTSYMBOLS)),-Xlinker --whole-archive,) + +$(1)_LDCOMMAND += $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \ + then echo $$(CC) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CFLAGS) $$(CFLAGS) ; \ + else echo $$(CXX) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CXXFLAGS) $$(CXXFLAGS) ; fi) \ + $$($(1)_LDFLAGS) $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) + $(2)/$(1): $(USER_LIB_DIR)/timestamp $(2)/$(1): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " LINK $$@" - $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \ - then echo $$(CC) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CFLAGS) $$(CFLAGS) ; \ - else echo $$(CXX) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CXXFLAGS) $$(CXXFLAGS) ; fi) \ - $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \ - -o $(2)/$(1) + $(Q) if [ -z "$$($(1)_EXPORTSYMBOLS)" ] ; then \ + $$($(1)_LDCOMMAND) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) -o $(2)/$(1) || exit 1; \ + else \ + rm -f $(1).prelink ; \ + $$($(1)_LDCOMMAND) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) -o $(1).prelink || exit 1 ; \ + $(RTEMS_SYSM) -e -c "$$(CC) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CFLAGS) $$(CFLAGS)" \ + -S $(1)-symbol-table.c -o $(1)-symbol-table.o $(1).prelink || exit 1 ; \ + $$($(1)_LDCOMMAND) $(1)-symbol-table.o $$(LOADLIBES) $$($(1)_LIBS:%=-l%) -o $(2)/$(1) || exit 1 ; \ + fi + #@echo "$(2)/$(1): \\" >$(USER_OBJS_DIR)/$(1).exe.d #@$(SED4OMK) -n -e 's/^LOAD \(.*\)$$$$/ \1 \\/p' $(USER_OBJS_DIR)/$(1).exe.map >>$(USER_OBJS_DIR)/$(1).exe.d #@echo >>$(USER_OBJS_DIR)/$(1).exe.d -- 2.39.2