Module: xenomai-3 Branch: next Commit: 6ee8da711a5d7e4f5e1bb7abb221208b1dc267ae URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=6ee8da711a5d7e4f5e1bb7abb221208b1dc267ae
Author: Philippe Gerum <r...@xenomai.org> Date: Fri Aug 26 21:21:40 2016 +0200 boilerplate: honor PIC setting for bootstrap object The bootstrap object must conform to the code generation option used for building the Xenomai libraries to allow external libraries to include it. This means that we need to export a PIC object 3rd-party shared libraries can link against if shared library support is enabled for Xenomai, and a non-PIC object for the static counterpart. Such objects are available as @libdir@/xenomai/bootstrap-pic.o and @libdir@/xenomai/bootstrap.o respectively. xeno-config* scripts now pick the PIC glue object if Xenomai supports shared libraries by default, unless the new --no-pic switch is given on the command line. If Xenomai was built not to support shared libraries (--disable-shared), the default is implicitly non-PIC, therefore --no-pic has no effect. --- configure.ac | 11 +++++++---- lib/boilerplate/init/Makefile.am | 20 ++++++++++++++------ scripts/xeno-config-cobalt.in | 20 +++++++++++++++----- scripts/xeno-config-mercury.in | 20 +++++++++++++++----- 4 files changed, 51 insertions(+), 20 deletions(-) diff --git a/configure.ac b/configure.ac index 42f2f5d..3ad2775 100644 --- a/configure.ac +++ b/configure.ac @@ -831,15 +831,18 @@ 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 +test x$enable_shared = xyes && default_codegen="-pic" || default_codegen= +AC_SUBST(default_codegen) AC_SUBST(DOXYGEN_SHOW_INCLUDE_FILES) AC_SUBST(DOXYGEN_HAVE_DOT) diff --git a/lib/boilerplate/init/Makefile.am b/lib/boilerplate/init/Makefile.am index 7a58f54..8c68cd9 100644 --- a/lib/boilerplate/init/Makefile.am +++ b/lib/boilerplate/init/Makefile.am @@ -1,18 +1,26 @@ -noinst_LIBRARIES = libbootstrap.a +noinst_LTLIBRARIES = libbootstrap.la -libbootstrap_a_SOURCES = bootstrap.c +libbootstrap_la_SOURCES = bootstrap.c -libbootstrap_a_CPPFLAGS = \ +libbootstrap_la_CPPFLAGS = \ @XENO_USER_CFLAGS@ \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib -all-local: $(libbootstrap_a_OBJECTS) - cp $(libbootstrap_a_OBJECTS) bootstrap.o +get_pic_object = $(shell source ./$(libbootstrap_la_OBJECTS) && echo $$pic_object) +get_nonpic_object = $(shell source ./$(libbootstrap_la_OBJECTS) && echo $$non_pic_object) + +all-local: $(libbootstrap_la_OBJECTS) + @test -r $(call get_pic_object) && \ + cp $(call get_pic_object) bootstrap-internal.o || \ + cp $(call get_nonpic_object) bootstrap-internal.o install-data-local: $(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 + @test -r $(get_nonpic_object) && \ + $(INSTALL_DATA) $(call get_nonpic_object) $(DESTDIR)$(libdir)/xenomai/bootstrap.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..e97af49 100644 --- a/scripts/xeno-config-cobalt.in +++ b/scripts/xeno-config-cobalt.in @@ -8,6 +8,7 @@ datarootdir="@datarootdir@" datadir="@datadir@" pkgdatadir="${datadir}/@PACKAGE@" includedir="@includedir@" +codegen="@default_codegen@" XENO_VERSION="@PACKAGE_VERSION@" XENO_PREFIX="${staging}${prefix}" @@ -18,8 +19,6 @@ 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 @@ -57,6 +56,7 @@ Options : --cflags --ldflags --lib*-dir,--libdir,--user-libdir + --no-pic, --nopic --core --info --compat @@ -109,6 +109,8 @@ fi do_ldflags= do_cflags= do_setinit= +do_autoinit=y +do_nopic= while test $# -gt 0; do case "$1" in @@ -133,11 +135,14 @@ while test $# -gt 0; do ;; --no-auto-init) do_setinit=y - WRAP_MAIN= + do_autoinit= ;; --auto-init) do_setinit=y - WRAP_MAIN="$WRAP_MAIN_OPT" + do_autoinit=y + ;; + --no-pic|--nopic) + do_nopic=y ;; --lib*-dir|--libdir|--user-libdir) echo $XENO_LIBRARY_DIR @@ -249,7 +254,12 @@ if test x$do_ldflags = xy; then ;; esac done - echo "$ldflags $copperplate $WRAP_MAIN $XENO_POSIX_LDFLAGS" + wrap_main= + if test x$do_autoinit = xy; then + test x$do_nopic = xy && codegen= + wrap_main="${staging}${libdir}/xenomai/bootstrap${codegen}.o -Wl,--wrap=main -Wl,--dynamic-list=${XENO_LIBRARY_DIR}/dynlist.ld" + fi + echo "$ldflags $copperplate $wrap_main $XENO_POSIX_LDFLAGS" fi exit 0 diff --git a/scripts/xeno-config-mercury.in b/scripts/xeno-config-mercury.in index 04fed80..4cfea9d 100644 --- a/scripts/xeno-config-mercury.in +++ b/scripts/xeno-config-mercury.in @@ -8,6 +8,7 @@ datarootdir="@datarootdir@" datadir="@datadir@" pkgdatadir="${datadir}/@PACKAGE@" includedir="@includedir@" +codegen="@default_codegen@" XENO_VERSION="@PACKAGE_VERSION@" XENO_PREFIX="${staging}${prefix}" @@ -17,8 +18,6 @@ XENO_INCLUDE_DIR="${staging}${includedir}" XENO_BASE_CFLAGS="-I$XENO_INCLUDE_DIR/mercury -I$XENO_INCLUDE_DIR @XENO_USER_APP_CFLAGS@ -D__MERCURY__" XENO_BASE_LDFLAGS="-L${staging}${libdir} -lmercury -lpthread -lrt @XENO_USER_APP_LDFLAGS@" XENO_LIBRARY_DIR="${staging}${libdir}" -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 @@ -39,6 +38,7 @@ Options : --cflags --ldflags --lib*-dir,--libdir,--user-libdir + --no-pic, --nopic --core --info EOF @@ -80,6 +80,8 @@ fi do_ldflags= do_cflags= do_setinit= +do_autoinit=y +do_nopic= while test $# -gt 0; do case "$1" in @@ -101,11 +103,14 @@ while test $# -gt 0; do ;; --no-auto-init) do_setinit=y - WRAP_MAIN= + do_autoinit= ;; --auto-init) do_setinit=y - WRAP_MAIN="$WRAP_MAIN_OPT" + do_autoinit=y + ;; + --no-pic|--nopic) + do_nopic=y ;; --lib*-dir|--libdir|--user-libdir) echo $XENO_LIBRARY_DIR @@ -193,7 +198,12 @@ if test x$do_ldflags = xy; then ;; esac done - echo "$ldflags $copperplate $WRAP_MAIN $XENO_BASE_LDFLAGS" + wrap_main= + if test x$do_autoinit = xy; then + test x$do_nopic = xy && codegen= + wrap_main="${staging}${libdir}/xenomai/bootstrap${codegen}.o -Wl,--wrap=main -Wl,--dynamic-list=${XENO_LIBRARY_DIR}/dynlist.ld" + fi + echo "$ldflags $copperplate $wrap_main $XENO_BASE_LDFLAGS" fi exit 0 _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org https://xenomai.org/mailman/listinfo/xenomai-git