Gilles Chanteperdrix wrote: > Jan Kiszka wrote: > > Hi, > > > > with the growing number of wrapped posix applications also their fairly > > slow build process became visible. It somehow scaled badly. > > > > I had the idea to pass all wrapping commands to the linker via a file > > for quite some time. Now I tried it and it gives a nice speedup of > > roughly 400% for me when building typical single-file apps (mileage may > > vary, I'm building on vmware box...). Moreover, it beautifies the > > compiler output. > > > > Tested on various setups, no regressions known so far. > > > > Jan > > > > > > PS: What about the silence-libtool patch? I've heard neither ack nor > > nack so far. > > Index: configure.in > > =================================================================== > > --- configure.in (revision 1453) > > +++ configure.in (working copy) > > @@ -525,8 +525,7 @@ XENO_USER_APP_CFLAGS=$XENO_USER_CFLAGS > > XENO_USER_CFLAGS="$XENO_USER_CFLAGS -D__IN_XENO__ -Wstrict-prototypes" > > XENO_USER_APP_LDFLAGS=$XENO_USER_LDFLAGS > > > > -XENO_POSIX_WRAPPERS=`while read symbol; do echo -n "-Wl,--wrap,$symbol "; > done \ > > - < $srcdir/src/skins/posix/posix.wrappers` > > +XENO_POSIX_WRAPPERS="-Wl,@`cd $srcdir && > pwd`/src/skins/posix/posix.wrappers" > > Does not work here: the @ is passed to ld which does not know how to > handle it. >
Ok, here comes version 2, now with detection of the required ld feature. Falls back to normal behaviour if ld is too old. Could you test it please? [Grmbl, the fun stops where autoconf begins...] Thanks, Jan
Index: configure.in =================================================================== --- configure.in (revision 1456) +++ configure.in (working copy) @@ -525,8 +525,27 @@ XENO_USER_APP_CFLAGS=$XENO_USER_CFLAGS XENO_USER_CFLAGS="$XENO_USER_CFLAGS -D__IN_XENO__ -Wstrict-prototypes" XENO_USER_APP_LDFLAGS=$XENO_USER_LDFLAGS -XENO_POSIX_WRAPPERS=`while read symbol; do echo -n "-Wl,--wrap,$symbol "; done \ - < $srcdir/src/skins/posix/posix.wrappers` +AC_MSG_CHECKING([whether ld supports @file]) +AC_CACHE_VAL(ac_cv_ld_file_option, + AC_LANG_SAVE + AC_LANG_C + save_LDFLAGS="$LDFLAGS" + [LDFLAGS="-Wl,@/dev/null"] + AC_LINK_IFELSE([main(){}], + [ac_cv_ld_file_option=yes], + [ac_cv_ld_file_option=no]) + LDFLAGS="$save_LDFLAGS" + AC_LANG_RESTORE) +if [[ $ac_cv_ld_file_option = yes ]]; then + XENO_POSIX_WRAPPERS="-Wl,@`cd $srcdir && pwd`/src/skins/posix/posix.wrappers" +else + XENO_POSIX_WRAPPERS=`while read wrap_option symbol; do \ + echo -n "-Wl,$wrap_option,$symbol "; \ + done < $srcdir/src/skins/posix/posix.wrappers` +fi +AC_MSG_RESULT(${ac_cv_ld_file_option:-no}) +LD_FILE_OPTION=$ac_cv_ld_file_option +AC_SUBST(LD_FILE_OPTION) AC_MSG_CHECKING(whether POSIX skin library automatically calls mlockall) AC_ARG_ENABLE(posix-auto-mlockall, Index: src/skins/posix/posix.wrappers =================================================================== --- src/skins/posix/posix.wrappers (revision 1456) +++ src/skins/posix/posix.wrappers (working copy) @@ -1,89 +1,89 @@ -pthread_create -pthread_detach -pthread_setschedparam -pthread_getschedparam -pthread_yield -sched_yield -sem_init -sem_destroy -sem_post -sem_timedwait -sem_wait -sem_trywait -sem_getvalue -sem_open -sem_close -sem_unlink -clock_getres -clock_gettime -clock_settime -clock_nanosleep -nanosleep -pthread_mutexattr_init -pthread_mutexattr_destroy -pthread_mutexattr_gettype -pthread_mutexattr_settype -pthread_mutexattr_getprotocol -pthread_mutexattr_setprotocol -pthread_mutexattr_getpshared -pthread_mutexattr_setpshared -pthread_mutex_init -pthread_mutex_destroy -pthread_mutex_lock -pthread_mutex_trylock -pthread_mutex_timedlock -pthread_mutex_unlock -pthread_condattr_init -pthread_condattr_destroy -pthread_condattr_getclock -pthread_condattr_setclock -pthread_condattr_getpshared -pthread_condattr_setpshared -pthread_cond_init -pthread_cond_destroy -pthread_cond_wait -pthread_cond_timedwait -pthread_cond_signal -pthread_cond_broadcast -mq_open -mq_close -mq_unlink -mq_getattr -mq_setattr -mq_send -mq_timedsend -mq_receive -mq_timedreceive -mq_notify -open -socket -close -ioctl -read -write -recvmsg -sendmsg -recvfrom -sendto -recv -send -getsockopt -setsockopt -bind -connect -listen -accept -getsockname -getpeername -shutdown -timer_create -timer_delete -timer_settime -timer_getoverrun -timer_gettime -ftruncate -close -shm_open -shm_unlink -mmap -munmap +--wrap pthread_create +--wrap pthread_detach +--wrap pthread_setschedparam +--wrap pthread_getschedparam +--wrap pthread_yield +--wrap sched_yield +--wrap sem_init +--wrap sem_destroy +--wrap sem_post +--wrap sem_timedwait +--wrap sem_wait +--wrap sem_trywait +--wrap sem_getvalue +--wrap sem_open +--wrap sem_close +--wrap sem_unlink +--wrap clock_getres +--wrap clock_gettime +--wrap clock_settime +--wrap clock_nanosleep +--wrap nanosleep +--wrap pthread_mutexattr_init +--wrap pthread_mutexattr_destroy +--wrap pthread_mutexattr_gettype +--wrap pthread_mutexattr_settype +--wrap pthread_mutexattr_getprotocol +--wrap pthread_mutexattr_setprotocol +--wrap pthread_mutexattr_getpshared +--wrap pthread_mutexattr_setpshared +--wrap pthread_mutex_init +--wrap pthread_mutex_destroy +--wrap pthread_mutex_lock +--wrap pthread_mutex_trylock +--wrap pthread_mutex_timedlock +--wrap pthread_mutex_unlock +--wrap pthread_condattr_init +--wrap pthread_condattr_destroy +--wrap pthread_condattr_getclock +--wrap pthread_condattr_setclock +--wrap pthread_condattr_getpshared +--wrap pthread_condattr_setpshared +--wrap pthread_cond_init +--wrap pthread_cond_destroy +--wrap pthread_cond_wait +--wrap pthread_cond_timedwait +--wrap pthread_cond_signal +--wrap pthread_cond_broadcast +--wrap mq_open +--wrap mq_close +--wrap mq_unlink +--wrap mq_getattr +--wrap mq_setattr +--wrap mq_send +--wrap mq_timedsend +--wrap mq_receive +--wrap mq_timedreceive +--wrap mq_notify +--wrap open +--wrap socket +--wrap close +--wrap ioctl +--wrap read +--wrap write +--wrap recvmsg +--wrap sendmsg +--wrap recvfrom +--wrap sendto +--wrap recv +--wrap send +--wrap getsockopt +--wrap setsockopt +--wrap bind +--wrap connect +--wrap listen +--wrap accept +--wrap getsockname +--wrap getpeername +--wrap shutdown +--wrap timer_create +--wrap timer_delete +--wrap timer_settime +--wrap timer_getoverrun +--wrap timer_gettime +--wrap ftruncate +--wrap close +--wrap shm_open +--wrap shm_unlink +--wrap mmap +--wrap munmap Index: scripts/xeno-config.in =================================================================== --- scripts/xeno-config.in (revision 1456) +++ scripts/xeno-config.in (working copy) @@ -17,6 +17,7 @@ XENO_BASE_LDFLAGS="-L${staging}${libdir} XENO_POSIX_CFLAGS="-I. -I${staging}${includedir} -I${staging}${includedir}/posix @XENO_USER_APP_CFLAGS@" XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lpthread_rt -lpthread -lrt @XENO_USER_APP_LDFLAGS@" XENO_POSIX_WRAPPERS="${staging}${libdir}/posix.wrappers" +XENO_POSIX_FAST_WRAPPING="@LD_FILE_OPTION@" XENO_LIBRARY_DIR="${staging}${libdir}" unset prefix exec_prefix libdir datadir pkgdatadir includedir @@ -89,14 +90,18 @@ while test $# -gt 0; do ;; --posix-ldflags) if test \! -r $XENO_POSIX_WRAPPERS; then - echo "POSIX support is not available" >&2 - exit 1 - fi - wrappers=`cat $XENO_POSIX_WRAPPERS | \ - while read symbol; do \ - echo -n "-Wl,--wrap,$symbol " ; \ - done` - echo "$wrappers $XENO_POSIX_LDFLAGS" + echo "POSIX support is not available" >&2 + exit 1 + fi + if test "$XENO_POSIX_FAST_WRAPPING" = "y"; then + echo "-Wl,@$XENO_POSIX_WRAPPERS $XENO_POSIX_LDFLAGS" + else + wrappers=`cat $XENO_POSIX_WRAPPERS | \ + while read wrap_option symbol; do \ + echo -n "-Wl,$wrap_option,$symbol " ; \ + done` + echo "$wrappers $XENO_POSIX_LDFLAGS" + fi ;; --lib*-dir|--libdir|--user-libdir) echo $XENO_LIBRARY_DIR Index: ChangeLog =================================================================== --- ChangeLog (revision 1456) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2006-08-18 Jan Kiszka <[EMAIL PROTECTED]> + + * src/skins/posix/posix.wrappers, configure.in, + scripts/xeno-config.in: Read wrapping options from file instead of + passing them via command line. + 2006-08-18 Gilles Chanteperdrix <[EMAIL PROTECTED]> * include/asm-generic, include/asm-arm, ksrc/nucleus/pod.c: @@ -9,7 +15,8 @@ 2006-08-16 Sebastian Smolorz <[EMAIL PROTECTED]> * include/rtdm/rtcan.h, ksrc/drivers/can/rtcan_{module,socket,raw}.c: - Get rid of RTCAN_TIMEOUT_* defines and replace them with RTDM_TIMEOUT_* + Get rid of RTCAN_TIMEOUT_* defines and replace them with + RTDM_TIMEOUT_*. 2006-08-16 Jan Kiszka <[EMAIL PROTECTED]> @@ -44,8 +51,8 @@ 2006-08-12 Ulrich Schwab <[EMAIL PROTECTED]> - * ksrc/arch/i386/smi.c added id of Intel ICH7 to list of SMI chipsets - + * ksrc/arch/i386/smi.c added id of Intel ICH7 to list of SMI chipsets + 2006-08-12 Gilles Chanteperdrix <[EMAIL PROTECTED]> * ksrc/skins/posix/thread.c (thread_destroy): Do not assume that
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core