[Xenomai-git] Philippe Gerum : boilerplate: allow for auto-init of external shared libraries
Module: xenomai-3 Branch: wip/drivers Commit: 21845c9cc173283840245927031cc7e40da1c429 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=21845c9cc173283840245927031cc7e40da1c429 Author: Philippe Gerum Date: Fri Aug 26 21:21:40 2016 +0200 boilerplate: allow for auto-init of external shared libraries 3rd-party shared libraries for which Xenomai auto-initialization is required must include a position-independent version of the bootstrap module. This means that we need to export a PIC object such libraries can include, in addition to a non-PIC object to be linked in regular executables as usual. Such objects are available as @libdir@/xenomai/bootstrap-pic.o and @libdir@/xenomai/bootstrap.o respectively. xeno-config* scripts now accept the --auto-init-solib option to emit the proper link directives for including the PIC bootstrap module into shared libraries when --ldflags is given. --- configure.ac | 10 +- lib/boilerplate/init/Makefile.am | 19 --- scripts/xeno-config-cobalt.in| 30 +++--- scripts/xeno-config-mercury.in | 30 +++--- 4 files changed, 67 insertions(+), 22 deletions(-) diff --git a/configure.ac b/configure.ac index 8bbeeef..38a1749 100644 --- a/configure.ac +++ b/configure.ac @@ -803,16 +803,16 @@ dnl in-tree executables which require POSIX symbol wrapping. AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ["$cobalt_wrappers"]) fi -XENO_AUTOINIT_LDFLAGS='$(top_builddir)/lib/boilerplate/init/bootstrap.o'" -Wl,--wrap=main -Wl,--dynamic-list=$topdir/scripts/dynlist.ld" +dnl +dnl Build the Makefiles +dnl + +XENO_AUTOINIT_LDFLAGS='$(top_builddir)/lib/boilerplate/init/bootstrap-internal.o'" -Wl,--wrap=main -Wl,--dynamic-list=$topdir/scripts/dynlist.ld" AC_SUBST(XENO_AUTOINIT_LDFLAGS) XENO_CORE_LIB=$rtcore_type/lib${rtcore_type}.la AC_SUBST(XENO_CORE_LIB) -dnl -dnl Build the Makefiles -dnl - AC_SUBST(DOXYGEN_SHOW_INCLUDE_FILES) AC_SUBST(DOXYGEN_HAVE_DOT) AC_SUBST(DOXYGEN) diff --git a/lib/boilerplate/init/Makefile.am b/lib/boilerplate/init/Makefile.am index 7a58f54..f41f419 100644 --- a/lib/boilerplate/init/Makefile.am +++ b/lib/boilerplate/init/Makefile.am @@ -7,12 +7,25 @@ libbootstrap_a_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib +noinst_LTLIBRARIES = libbootstrap-pic.la + +libbootstrap_pic_la_SOURCES = bootstrap.c + +libbootstrap_pic_la_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/lib + +get_pic_object = $(shell source ./$(libbootstrap_pic_la_OBJECTS) && echo $$pic_object) + all-local: $(libbootstrap_a_OBJECTS) - cp $(libbootstrap_a_OBJECTS) bootstrap.o + @cp $< bootstrap-internal.o install-data-local: - $(mkinstalldirs) $(DESTDIR)$(libdir)/xenomai - $(INSTALL_DATA) $(libbootstrap_a_OBJECTS) $(DESTDIR)$(libdir)/xenomai/bootstrap.o + @$(mkinstalldirs) $(DESTDIR)$(libdir)/xenomai + @$(INSTALL_DATA) $(libbootstrap_a_OBJECTS) $(DESTDIR)$(libdir)/xenomai/bootstrap.o + @test -r $(call get_pic_object) && \ + $(INSTALL_DATA) $(call get_pic_object) $(DESTDIR)$(libdir)/xenomai/bootstrap-pic.o || true uninstall-local: $(RM) -r $(DESTDIR)$(libdir)/xenomai diff --git a/scripts/xeno-config-cobalt.in b/scripts/xeno-config-cobalt.in index fec0e28..38f8208 100644 --- a/scripts/xeno-config-cobalt.in +++ b/scripts/xeno-config-cobalt.in @@ -18,10 +18,8 @@ XENO_BASE_CFLAGS="-I$XENO_INCLUDE_DIR/cobalt -I$XENO_INCLUDE_DIR @XENO_USER_APP_ XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lcobalt -lpthread -lrt @XENO_USER_APP_LDFLAGS@" XENO_LIBRARY_DIR="${staging}${libdir}" LD_FILE_OPTION="@LD_FILE_OPTION@" -WRAP_MAIN_OPT="${staging}${libdir}/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=${XENO_LIBRARY_DIR}/dynlist.ld" -WRAP_MAIN="$WRAP_MAIN_OPT" -unset prefix exec_prefix libdir datadir datarootdir pkgdatadir includedir skin_list compat +unset skin_list compat codegen dump_wrappers() { @@ -53,7 +51,7 @@ Options : --arch --prefix --[skin=]posix|vxworks|psos|alchemy|rtdm|smokey|cobalt ---auto-init|no-auto-init +--auto-init|auto-init-solib|no-auto-init --cflags --ldflags --lib*-dir,--libdir,--user-libdir @@ -109,6 +107,8 @@ fi do_ldflags= do_cflags= do_setinit= +do_autoinit=y +do_autoinit_solib= while test $# -gt 0; do case "$1" in @@ -133,11 +133,22 @@ while test $# -gt 0; do ;; --no-auto-init) do_setinit=y - WRAP_MAIN= + do_autoinit= + do_autoinit_solib= ;; --auto-init) do_setinit=y - WRAP_MAIN="$WRAP_MAIN_OPT" + do_autoinit=y + do_autoinit_solib= + ;; + --auto-init-solib) + if test \! -r ${XENO_LIBRARY_DIR}/xenomai/bootstrap-pic.o; then +
[Xenomai-git] Philippe Gerum : boilerplate: allow for auto-init of external shared libraries
Module: xenomai-3 Branch: stable-3.0.x Commit: 21845c9cc173283840245927031cc7e40da1c429 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=21845c9cc173283840245927031cc7e40da1c429 Author: Philippe Gerum Date: Fri Aug 26 21:21:40 2016 +0200 boilerplate: allow for auto-init of external shared libraries 3rd-party shared libraries for which Xenomai auto-initialization is required must include a position-independent version of the bootstrap module. This means that we need to export a PIC object such libraries can include, in addition to a non-PIC object to be linked in regular executables as usual. Such objects are available as @libdir@/xenomai/bootstrap-pic.o and @libdir@/xenomai/bootstrap.o respectively. xeno-config* scripts now accept the --auto-init-solib option to emit the proper link directives for including the PIC bootstrap module into shared libraries when --ldflags is given. --- configure.ac | 10 +- lib/boilerplate/init/Makefile.am | 19 --- scripts/xeno-config-cobalt.in| 30 +++--- scripts/xeno-config-mercury.in | 30 +++--- 4 files changed, 67 insertions(+), 22 deletions(-) diff --git a/configure.ac b/configure.ac index 8bbeeef..38a1749 100644 --- a/configure.ac +++ b/configure.ac @@ -803,16 +803,16 @@ dnl in-tree executables which require POSIX symbol wrapping. AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ["$cobalt_wrappers"]) fi -XENO_AUTOINIT_LDFLAGS='$(top_builddir)/lib/boilerplate/init/bootstrap.o'" -Wl,--wrap=main -Wl,--dynamic-list=$topdir/scripts/dynlist.ld" +dnl +dnl Build the Makefiles +dnl + +XENO_AUTOINIT_LDFLAGS='$(top_builddir)/lib/boilerplate/init/bootstrap-internal.o'" -Wl,--wrap=main -Wl,--dynamic-list=$topdir/scripts/dynlist.ld" AC_SUBST(XENO_AUTOINIT_LDFLAGS) XENO_CORE_LIB=$rtcore_type/lib${rtcore_type}.la AC_SUBST(XENO_CORE_LIB) -dnl -dnl Build the Makefiles -dnl - AC_SUBST(DOXYGEN_SHOW_INCLUDE_FILES) AC_SUBST(DOXYGEN_HAVE_DOT) AC_SUBST(DOXYGEN) diff --git a/lib/boilerplate/init/Makefile.am b/lib/boilerplate/init/Makefile.am index 7a58f54..f41f419 100644 --- a/lib/boilerplate/init/Makefile.am +++ b/lib/boilerplate/init/Makefile.am @@ -7,12 +7,25 @@ libbootstrap_a_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib +noinst_LTLIBRARIES = libbootstrap-pic.la + +libbootstrap_pic_la_SOURCES = bootstrap.c + +libbootstrap_pic_la_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/lib + +get_pic_object = $(shell source ./$(libbootstrap_pic_la_OBJECTS) && echo $$pic_object) + all-local: $(libbootstrap_a_OBJECTS) - cp $(libbootstrap_a_OBJECTS) bootstrap.o + @cp $< bootstrap-internal.o install-data-local: - $(mkinstalldirs) $(DESTDIR)$(libdir)/xenomai - $(INSTALL_DATA) $(libbootstrap_a_OBJECTS) $(DESTDIR)$(libdir)/xenomai/bootstrap.o + @$(mkinstalldirs) $(DESTDIR)$(libdir)/xenomai + @$(INSTALL_DATA) $(libbootstrap_a_OBJECTS) $(DESTDIR)$(libdir)/xenomai/bootstrap.o + @test -r $(call get_pic_object) && \ + $(INSTALL_DATA) $(call get_pic_object) $(DESTDIR)$(libdir)/xenomai/bootstrap-pic.o || true uninstall-local: $(RM) -r $(DESTDIR)$(libdir)/xenomai diff --git a/scripts/xeno-config-cobalt.in b/scripts/xeno-config-cobalt.in index fec0e28..38f8208 100644 --- a/scripts/xeno-config-cobalt.in +++ b/scripts/xeno-config-cobalt.in @@ -18,10 +18,8 @@ XENO_BASE_CFLAGS="-I$XENO_INCLUDE_DIR/cobalt -I$XENO_INCLUDE_DIR @XENO_USER_APP_ XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lcobalt -lpthread -lrt @XENO_USER_APP_LDFLAGS@" XENO_LIBRARY_DIR="${staging}${libdir}" LD_FILE_OPTION="@LD_FILE_OPTION@" -WRAP_MAIN_OPT="${staging}${libdir}/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=${XENO_LIBRARY_DIR}/dynlist.ld" -WRAP_MAIN="$WRAP_MAIN_OPT" -unset prefix exec_prefix libdir datadir datarootdir pkgdatadir includedir skin_list compat +unset skin_list compat codegen dump_wrappers() { @@ -53,7 +51,7 @@ Options : --arch --prefix --[skin=]posix|vxworks|psos|alchemy|rtdm|smokey|cobalt ---auto-init|no-auto-init +--auto-init|auto-init-solib|no-auto-init --cflags --ldflags --lib*-dir,--libdir,--user-libdir @@ -109,6 +107,8 @@ fi do_ldflags= do_cflags= do_setinit= +do_autoinit=y +do_autoinit_solib= while test $# -gt 0; do case "$1" in @@ -133,11 +133,22 @@ while test $# -gt 0; do ;; --no-auto-init) do_setinit=y - WRAP_MAIN= + do_autoinit= + do_autoinit_solib= ;; --auto-init) do_setinit=y - WRAP_MAIN="$WRAP_MAIN_OPT" + do_autoinit=y + do_autoinit_solib= + ;; + --auto-init-solib) + if test \! -r ${XENO_LIBRARY_DIR}/xenomai/bootstrap-pic.o; then +
[Xenomai-git] Philippe Gerum : boilerplate: allow for auto-init of external shared libraries
Module: xenomai-3 Branch: next Commit: 1fbe3f3797c1e15121a8243ca9fa05dd7e7d2128 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=1fbe3f3797c1e15121a8243ca9fa05dd7e7d2128 Author: Philippe Gerum Date: Fri Aug 26 21:21:40 2016 +0200 boilerplate: allow for auto-init of external shared libraries 3rd-party shared libraries for which Xenomai auto-initialization is required must include a position-independent version of the bootstrap module. This means that we need to export a PIC object such libraries can include, in addition to a non-PIC object to be linked in regular executables as usual. Such objects are available as @libdir@/xenomai/bootstrap-pic.o and @libdir@/xenomai/bootstrap.o respectively. xeno-config* scripts now accept the --auto-init-solib option to emit the proper link directives for including the PIC bootstrap module into shared libraries when --ldflags is given. --- configure.ac | 10 +- lib/boilerplate/init/Makefile.am | 19 --- scripts/xeno-config-cobalt.in| 30 +++--- scripts/xeno-config-mercury.in | 30 +++--- 4 files changed, 67 insertions(+), 22 deletions(-) diff --git a/configure.ac b/configure.ac index 42f2f5d..c61748c 100644 --- a/configure.ac +++ b/configure.ac @@ -831,16 +831,16 @@ dnl in-tree executables which require POSIX symbol wrapping. AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ["$cobalt_wrappers"]) fi -XENO_AUTOINIT_LDFLAGS='$(top_builddir)/lib/boilerplate/init/bootstrap.o'" -Wl,--wrap=main -Wl,--dynamic-list=$topdir/scripts/dynlist.ld" +dnl +dnl Build the Makefiles +dnl + +XENO_AUTOINIT_LDFLAGS='$(top_builddir)/lib/boilerplate/init/bootstrap-internal.o'" -Wl,--wrap=main -Wl,--dynamic-list=$topdir/scripts/dynlist.ld" AC_SUBST(XENO_AUTOINIT_LDFLAGS) XENO_CORE_LIB=$rtcore_type/lib${rtcore_type}.la AC_SUBST(XENO_CORE_LIB) -dnl -dnl Build the Makefiles -dnl - AC_SUBST(DOXYGEN_SHOW_INCLUDE_FILES) AC_SUBST(DOXYGEN_HAVE_DOT) AC_SUBST(DOXYGEN) diff --git a/lib/boilerplate/init/Makefile.am b/lib/boilerplate/init/Makefile.am index 7a58f54..f41f419 100644 --- a/lib/boilerplate/init/Makefile.am +++ b/lib/boilerplate/init/Makefile.am @@ -7,12 +7,25 @@ libbootstrap_a_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib +noinst_LTLIBRARIES = libbootstrap-pic.la + +libbootstrap_pic_la_SOURCES = bootstrap.c + +libbootstrap_pic_la_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/lib + +get_pic_object = $(shell source ./$(libbootstrap_pic_la_OBJECTS) && echo $$pic_object) + all-local: $(libbootstrap_a_OBJECTS) - cp $(libbootstrap_a_OBJECTS) bootstrap.o + @cp $< bootstrap-internal.o install-data-local: - $(mkinstalldirs) $(DESTDIR)$(libdir)/xenomai - $(INSTALL_DATA) $(libbootstrap_a_OBJECTS) $(DESTDIR)$(libdir)/xenomai/bootstrap.o + @$(mkinstalldirs) $(DESTDIR)$(libdir)/xenomai + @$(INSTALL_DATA) $(libbootstrap_a_OBJECTS) $(DESTDIR)$(libdir)/xenomai/bootstrap.o + @test -r $(call get_pic_object) && \ + $(INSTALL_DATA) $(call get_pic_object) $(DESTDIR)$(libdir)/xenomai/bootstrap-pic.o || true uninstall-local: $(RM) -r $(DESTDIR)$(libdir)/xenomai diff --git a/scripts/xeno-config-cobalt.in b/scripts/xeno-config-cobalt.in index fec0e28..38f8208 100644 --- a/scripts/xeno-config-cobalt.in +++ b/scripts/xeno-config-cobalt.in @@ -18,10 +18,8 @@ XENO_BASE_CFLAGS="-I$XENO_INCLUDE_DIR/cobalt -I$XENO_INCLUDE_DIR @XENO_USER_APP_ XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lcobalt -lpthread -lrt @XENO_USER_APP_LDFLAGS@" XENO_LIBRARY_DIR="${staging}${libdir}" LD_FILE_OPTION="@LD_FILE_OPTION@" -WRAP_MAIN_OPT="${staging}${libdir}/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=${XENO_LIBRARY_DIR}/dynlist.ld" -WRAP_MAIN="$WRAP_MAIN_OPT" -unset prefix exec_prefix libdir datadir datarootdir pkgdatadir includedir skin_list compat +unset skin_list compat codegen dump_wrappers() { @@ -53,7 +51,7 @@ Options : --arch --prefix --[skin=]posix|vxworks|psos|alchemy|rtdm|smokey|cobalt ---auto-init|no-auto-init +--auto-init|auto-init-solib|no-auto-init --cflags --ldflags --lib*-dir,--libdir,--user-libdir @@ -109,6 +107,8 @@ fi do_ldflags= do_cflags= do_setinit= +do_autoinit=y +do_autoinit_solib= while test $# -gt 0; do case "$1" in @@ -133,11 +133,22 @@ while test $# -gt 0; do ;; --no-auto-init) do_setinit=y - WRAP_MAIN= + do_autoinit= + do_autoinit_solib= ;; --auto-init) do_setinit=y - WRAP_MAIN="$WRAP_MAIN_OPT" + do_autoinit=y + do_autoinit_solib= + ;; + --auto-init-solib) + if test \! -r ${XENO_LIBRARY_DIR}/xenomai/bootstrap-pic.o; then +