Module: xenomai-2.5
Branch: master
Commit: 383e13b354e6bffcde8c43dae5ea3799d4055d20
URL:    
http://git.xenomai.org/?p=xenomai-2.5.git;a=commit;h=383e13b354e6bffcde8c43dae5ea3799d4055d20

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Wed Feb 24 10:55:35 2010 +0100

Add libxenomai and a new --skin option to xeno-config

---

 include/asm-generic/bits/sigshadow.h |   12 +-----
 scripts/xeno-config.in               |   72 ++++++++++++++++++++++++++++++----
 src/skins/common/current.c           |    6 +-
 src/skins/common/sigshadow.c         |   10 ++++-
 src/skins/native/task.c              |    4 +-
 src/skins/posix/init.c               |    4 --
 src/skins/posix/thread.c             |    6 +-
 src/skins/psos+/task.c               |    4 +-
 src/skins/uitron/task.c              |    4 +-
 src/skins/vrtx/task.c                |    2 +-
 src/skins/vxworks/taskLib.c          |    2 +-
 src/testsuite/sigtest/sigtest.c      |    1 +
 src/utils/analogy/Makefile.am        |   39 ++++++++++++++-----
 src/utils/can/Makefile.am            |   19 ++++++---
 14 files changed, 130 insertions(+), 55 deletions(-)

diff --git a/include/asm-generic/bits/sigshadow.h 
b/include/asm-generic/bits/sigshadow.h
index e07ce00..3a7c48c 100644
--- a/include/asm-generic/bits/sigshadow.h
+++ b/include/asm-generic/bits/sigshadow.h
@@ -1,16 +1,6 @@
 #ifndef _XENO_ASM_GENERIC_BITS_SIGSHADOW_H
 #define _XENO_ASM_GENERIC_BITS_SIGSHADOW_H
 
-#include <pthread.h>
-#include <signal.h>
+void xeno_sigshadow_install_once(void);
 
-extern pthread_once_t xeno_sigshadow_installed;
-extern struct sigaction xeno_saved_sigshadow_action;
-
-void xeno_sigshadow_install(void);
-
-static inline void sigshadow_install_once(void)
-{
-       pthread_once(&xeno_sigshadow_installed, xeno_sigshadow_install);
-}
 #endif /* _XENO_ASM_GENERIC_BITS_SIGSHADOW_H */
diff --git a/scripts/xeno-config.in b/scripts/xeno-config.in
index 4008048..3cbdd04 100644
--- a/scripts/xeno-config.in
+++ b/scripts/xeno-config.in
@@ -14,9 +14,8 @@ XENO_PREFIX="${staging}${prefix}"
 XENO_CC="@CC@"
 XENO_TARGET_ARCH="@XENO_TARGET_ARCH@"
 XENO_BASE_CFLAGS="-I${staging}${includedir} @XENO_USER_APP_CFLAGS@ -D__XENO__"
-XENO_BASE_LDFLAGS="-L${staging}${libdir} -lpthread @XENO_USER_APP_LDFLAGS@"
-XENO_POSIX_CFLAGS="-I${staging}${includedir} -I${staging}${includedir}/posix 
@XENO_USER_APP_CFLAGS@ -D__XENO__"
-XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lpthread_rt -lpthread -lrt 
@XENO_USER_APP_LDFLAGS@"
+XENO_BASE_LDFLAGS="-L${staging}${libdir} -lxenomai -lpthread 
@XENO_USER_APP_LDFLAGS@"
+XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lpthread_rt -lxenomai -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}"
@@ -42,7 +41,7 @@ posix_ldflags ()
 usage ()
 {
 cat <<EOF
-Usage xeno-config OPTIONS
+Usage xeno-config --skin=skinname OPTIONS
 Options :
         --help
         --v,--verbose
@@ -50,11 +49,16 @@ Options :
         --cc
         --arch
         --prefix
+        --skin native|posix|psos|rtai|rtdm|uitron|vrtx|vxworks
+        --cflags
+        --ldflags
+        --lib*-dir,--libdir,--user-libdir
+
+Deprecated options:
         --xeno-cflags
         --xeno-ldflags
         --posix-cflags
         --posix-ldflags
-        --lib*-dir,--libdir,--user-libdir
 EOF
     exit $1
 }
@@ -96,22 +100,74 @@ while test $# -gt 0; do
         --prefix)
             echo $XENO_PREFIX
             ;;
+        --lib*-dir|--libdir|--user-libdir)
+            echo $XENO_LIBRARY_DIR
+            ;;
+       --skin)
+           skin="$2"
+           shift
+           ;;
+       --cflags)
+           case "$skin" in
+               native|rtdm)
+                   echo $XENO_BASE_CFLAGS
+                   ;;
+               psos|psos+|posix|rtai|uitron|vrtx|vxworks)
+                   if [ "x$skin" = "xpsos" ]; then
+                       skin="psos+"
+                   fi
+                   echo $XENO_BASE_CFLAGS -I{staging}${includedir}/$skin
+                   ;;
+               "")
+                   echo skin not set, please pass --skin before --cflags 1>&2
+                   exit 1
+                   ;;
+               *)
+                   echo skin $skin unknown 1>&2
+                   exit 1
+                   ;;
+           esac
+           ;;
+
+       --ldflags)
+           case "$skin" in
+               posix)
+                   echo $XENO_POSIX_LDFLAGS
+                   ;;
+               native|psos|psos+|rtai|uitron|vrtx|vxworks)
+                   if [ "x$skin" = "xpsos+" ]; then
+                       skin="psos"
+                   fi
+                   echo -l$skin $XENO_BASE_LDFLAGS
+                   ;;
+               "")
+                   echo skin not set, please pass --skin before --cflags 1>&2
+                   exit 1
+                   ;;
+               *)
+                   echo skin $skin unknown 1>&2
+                   exit 1
+                   ;;
+           esac
+           ;;
+
         --xeno-cflags)
+           echo "$1" is deprecated, use --skin=name --cflags instead 1>&2 
             echo $XENO_BASE_CFLAGS
             ;;
         --xeno-ldflags)
+           echo "$1" is deprecated, use --skin=name --ldflags instead 1>&2 
             echo $XENO_BASE_LDFLAGS
             ;;
         --posix-cflags)
+           echo "$1" is deprecated, use --skin=posix --cflags instead 1>&2 
             echo $XENO_POSIX_CFLAGS
             ;;
         --posix-ldflags)
+           echo "$1" is deprecated, use --skin=posix --ldflags instead 1>&2 
             posix_ldflags
             echo
             ;;
-        --lib*-dir|--libdir|--user-libdir)
-            echo $XENO_LIBRARY_DIR
-            ;;
         --help)
             usage 0 1>&2
             ;;
diff --git a/src/skins/common/current.c b/src/skins/common/current.c
index 89e39c8..2922d6e 100644
--- a/src/skins/common/current.c
+++ b/src/skins/common/current.c
@@ -18,15 +18,15 @@ static inline void __xeno_set_current(xnhandle_t current)
 #else /* !HAVE___THREAD */
 #include <pthread.h>
 
-static pthread_key_t xeno_current_key;
-static pthread_key_t xeno_current_mode_key;
+pthread_key_t xeno_current_key;
+pthread_key_t xeno_current_mode_key;
 
 static inline void __xeno_set_current(xnhandle_t current)
 {
        pthread_setspecific(xeno_current_key, (void *)current);
 }
 
-static unsigned long *xeno_init_current_mode(void)
+unsigned long *xeno_init_current_mode(void)
 {
        unsigned long *mode = malloc(sizeof(unsigned long));
        pthread_setspecific(xeno_current_mode_key, mode);
diff --git a/src/skins/common/sigshadow.c b/src/skins/common/sigshadow.c
index c078f09..ddb4a52 100644
--- a/src/skins/common/sigshadow.c
+++ b/src/skins/common/sigshadow.c
@@ -1,7 +1,9 @@
+#include <pthread.h>
+#include <signal.h>
+
 #include <asm/xenomai/syscall.h>
 #include <asm-generic/xenomai/bits/sigshadow.h>
 
-pthread_once_t xeno_sigshadow_installed = PTHREAD_ONCE_INIT;
 static struct sigaction xeno_saved_sigshadow_action;
 
 int xeno_sigwinch_handler(int sig, siginfo_t *si, void *ctxt)
@@ -70,3 +72,9 @@ void xeno_sigshadow_install(void)
        if (!(xeno_saved_sigshadow_action.sa_flags & SA_NODEFER))
                sigaddset(&xeno_saved_sigshadow_action.sa_mask, SIGSHADOW);
 }
+
+void xeno_sigshadow_install_once(void)
+{
+       static pthread_once_t sigshadow_installed = PTHREAD_ONCE_INIT;
+       pthread_once(&sigshadow_installed, xeno_sigshadow_install);
+}
diff --git a/src/skins/native/task.c b/src/skins/native/task.c
index ba04a27..1dde653 100644
--- a/src/skins/native/task.c
+++ b/src/skins/native/task.c
@@ -71,7 +71,7 @@ static void *rt_task_trampoline(void *cookie)
        /* rt_task_delete requires asynchronous cancellation */
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        task = iargs->task;
        bulk.a1 = (u_long)task;
@@ -208,7 +208,7 @@ int rt_task_shadow(RT_TASK *task, const char *name, int 
prio, int mode)
 
        /* rt_task_delete requires asynchronous cancellation */
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        bulk.a1 = (u_long)task;
        bulk.a2 = (u_long)name;
diff --git a/src/skins/posix/init.c b/src/skins/posix/init.c
index 14f9837..c86ab6e 100644
--- a/src/skins/posix/init.c
+++ b/src/skins/posix/init.c
@@ -116,8 +116,4 @@ void __init_posix_interface(void)
                        (int) sizeof(struct __shadow_mutex));
                exit(EXIT_FAILURE);
        }
-
-       /* Restore default state. */
-       sigaction(SIGSHADOW, &xeno_saved_sigshadow_action, NULL);
-       xeno_sigshadow_installed = PTHREAD_ONCE_INIT;
 }
diff --git a/src/skins/posix/thread.c b/src/skins/posix/thread.c
index d565d52..86a6c5d 100644
--- a/src/skins/posix/thread.c
+++ b/src/skins/posix/thread.c
@@ -68,7 +68,7 @@ int __wrap_pthread_setschedparam(pthread_t thread,
                return __real_pthread_setschedparam(thread, policy, param);
 
        if (!err && promoted) {
-               sigshadow_install_once();
+               xeno_sigshadow_install_once();
                xeno_set_current();
                if (policy != SCHED_OTHER)
                        XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_XENO_DOMAIN);
@@ -111,7 +111,7 @@ int pthread_setschedparam_ex(pthread_t thread,
        }
 
        if (!err && promoted) {
-               sigshadow_install_once();
+               xeno_sigshadow_install_once();
                xeno_set_current();
                if (policy != SCHED_OTHER)
                        XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_XENO_DOMAIN);
@@ -193,7 +193,7 @@ static void *__pthread_trampoline(void *arg)
        unsigned long *mode_buf;
        long err;
 
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        param.sched_priority = iargs->prio;
        policy = iargs->policy;
diff --git a/src/skins/psos+/task.c b/src/skins/psos+/task.c
index 7fcdd54..89b22ed 100644
--- a/src/skins/psos+/task.c
+++ b/src/skins/psos+/task.c
@@ -67,7 +67,7 @@ static void *psos_task_trampoline(void *cookie)
        long err;
 
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        bulk.a1 = (u_long)iargs->name;
        bulk.a2 = (u_long)iargs->prio;
@@ -175,7 +175,7 @@ u_long t_shadow(const char *name, /* Xenomai extension. */
        xeno_fault_stack();
 
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        bulk.a1 = (u_long)name;
        bulk.a2 = (u_long)prio;
diff --git a/src/skins/uitron/task.c b/src/skins/uitron/task.c
index 3beff89..05f5c18 100644
--- a/src/skins/uitron/task.c
+++ b/src/skins/uitron/task.c
@@ -75,7 +75,7 @@ static void *uitron_task_trampoline(void *cookie)
        pthread_setschedparam(pthread_self(), policy, &param);
 
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        mode = xeno_init_current_mode();
        if (!mode) {
@@ -159,7 +159,7 @@ ER shd_tsk(ID tskid, T_CTSK *pk_ctsk) /* Xenomai extension. 
*/
        pthread_setschedparam(pthread_self(), policy, &param);
 
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        err = XENOMAI_SKINCALL3(__uitron_muxid,
                                __uitron_cre_tsk,
diff --git a/src/skins/vrtx/task.c b/src/skins/vrtx/task.c
index dc6ff39..3ce49dc 100644
--- a/src/skins/vrtx/task.c
+++ b/src/skins/vrtx/task.c
@@ -94,7 +94,7 @@ static void *vrtx_task_trampoline(void *cookie)
        pthread_setspecific(__vrtx_tskey, tcb);
 #endif /* !HAVE___THREAD */
 
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        bulk.a1 = (u_long)iargs->tid;
        bulk.a2 = (u_long)iargs->prio;
diff --git a/src/skins/vxworks/taskLib.c b/src/skins/vxworks/taskLib.c
index 2c65a0d..65ab674 100644
--- a/src/skins/vxworks/taskLib.c
+++ b/src/skins/vxworks/taskLib.c
@@ -95,7 +95,7 @@ static void *wind_task_trampoline(void *cookie)
 
        /* wind_task_delete requires asynchronous cancellation */
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-       sigshadow_install_once();
+       xeno_sigshadow_install_once();
 
        bulk.a1 = (u_long)iargs->name;
        bulk.a2 = (u_long)iargs->prio;
diff --git a/src/testsuite/sigtest/sigtest.c b/src/testsuite/sigtest/sigtest.c
index 156f736..1e80317 100644
--- a/src/testsuite/sigtest/sigtest.c
+++ b/src/testsuite/sigtest/sigtest.c
@@ -3,6 +3,7 @@
 #include <string.h>
 
 #include <unistd.h>
+#include <pthread.h>
 #include <sys/mman.h>
 #ifndef __UCLIBC__
 #include <execinfo.h>
diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index 3bc5d47..d695eae 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -7,25 +7,44 @@ CPPFLAGS = \
        -I$(top_srcdir)/include
 
 LDFLAGS = \
-       @XENO_USER_LDFLAGS@ \
-       -L../../drvlib/analogy \
-       -L../../skins/native \
-       -L../../skins/rtdm
+       @XENO_USER_LDFLAGS@
 
 analogy_config_SOURCES = analogy_config.c
-analogy_config_LDADD = -lanalogy -lrtdm
+analogy_config_LDADD = \
+       ../../drvlib/analogy/libanalogy.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
 
 cmd_read_SOURCES = cmd_read.c
-cmd_read_LDADD = -lanalogy -lnative -lrtdm
+cmd_read_LDADD = \
+       ../../drvlib/analogy/libanalogy.la \
+       ../../skins/native/libnative.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
 
 cmd_write_SOURCES = cmd_write.c
-cmd_write_LDADD = -lanalogy -lnative -lrtdm
+cmd_write_LDADD = \
+       ../../drvlib/analogy/libanalogy.la \
+       ../../skins/native/libnative.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
 
 insn_read_SOURCES = insn_read.c
-insn_read_LDADD = -lanalogy -lnative -lrtdm
+insn_read_LDADD = \
+       ../../drvlib/analogy/libanalogy.la \
+       ../../skins/native/libnative.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
 
 insn_write_SOURCES = insn_write.c
-insn_write_LDADD = -lanalogy -lnative -lrtdm
+insn_write_LDADD = \
+       ../../drvlib/analogy/libanalogy.la \
+       ../../skins/native/libnative.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
 
 insn_bits_SOURCES = insn_bits.c
-insn_bits_LDADD = -lanalogy -lrtdm
+insn_bits_LDADD = \
+       ../../drvlib/analogy/libanalogy.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
diff --git a/src/utils/can/Makefile.am b/src/utils/can/Makefile.am
index f7394d7..84ce563 100644
--- a/src/utils/can/Makefile.am
+++ b/src/utils/can/Makefile.am
@@ -8,21 +8,26 @@ CPPFLAGS = \
        -I$(top_srcdir)/include
 
 LDFLAGS = \
-       @XENO_USER_LDFLAGS@ \
-       -L../../skins/native \
-       -L../../skins/rtdm
+       @XENO_USER_LDFLAGS@
 
 
 rtcanconfig_SOURCES = rtcanconfig.c
 
-rtcanconfig_LDADD = -lrtdm
-
+rtcanconfig_LDADD = \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
 
 rtcanrecv_SOURCES = rtcanrecv.c
 
-rtcanrecv_LDADD = -lnative -lrtdm
+rtcanrecv_LDADD = \
+       ../../skins/native/libnative.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la
 
 
 rtcansend_SOURCES = rtcansend.c
 
-rtcansend_LDADD = -lnative -lrtdm
+rtcansend_LDADD = \
+       ../../skins/native/libnative.la \
+       ../../skins/rtdm/librtdm.la \
+       ../../skins/common/libxenomai.la


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to