diff --git a/src/include/visibility.h b/src/include/visibility.h index 4450c9495c100965ee23511434503279e5da048c..5de2682a8c77ece6ac9a35c6d1d3c31b5b306d7f 100644 --- a/src/include/visibility.h +++ b/src/include/visibility.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2012-2018 PX4 Development Team. All rights reserved. + * Copyright (C) 2012-2019 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,68 +59,67 @@ # define __END_DECLS #endif + + + + /* exit() is used on NuttX to exit a task. However on Posix, it will exit the * whole application, so we prevent its use there. There are cases where it * still needs to be used, thus we remap system_exit to exit. */ #define system_exit exit - -#if defined(ENABLE_LOCKSTEP_SCHEDULER) - +#if !defined(__PX4_NUTTX) #include <stdlib.h> -#include <unistd.h> - -#define system_usleep usleep -#pragma GCC poison usleep -#define system_sleep sleep -#pragma GCC poison sleep - -#define system_clock_gettime clock_gettime -#define system_clock_settime clock_settime - -#include <pthread.h> -#define system_pthread_cond_timedwait pthread_cond_timedwait -// We can't poison pthread_cond_timedwait because it seems to be used in the -// <string> include. - #ifdef __cplusplus #include <cstdlib> #endif +/* We should include cstdlib or stdlib.h but this doesn't + * compile because many C++ files include stdlib.h and would + * need to get changed. */ #pragma GCC poison exit +#endif // !defined(__PX4_NUTTX) -#include <stdlib.h> -#ifdef __cplusplus -#include <cstdlib> -#endif - -// We don't poison usleep and sleep on NuttX because it is used in dependencies -// like uavcan and we don't need to fake time on the real system. -#include <unistd.h> +/* For SITL lockstep we fake the clock, sleeping, and timedwaits + * Therefore, we prefix these syscalls with system_. */ #include <time.h> +#define system_clock_gettime clock_gettime +#define system_clock_settime clock_settime +/* We can't poison clock_settime/clock_gettime because they are + * used in DriverFramework. */ -#else // defined(ENABLE_LOCKSTEP_SCHEDULER) +#if !defined(__PX4_NUTTX) +#include <pthread.h> +// We can't include this for NuttX otherwise we get conflicts for read/write +// symbols in cannode. +#endif // !defined(__PX4_NUTTX) +#define system_pthread_cond_timedwait pthread_cond_timedwait +/* We can't poison pthread_cond_timedwait because it seems to be used in the + * <string> include. */ -#include <stdlib.h> -#include <unistd.h> +/* We don't poison usleep and sleep because it is used in dependencies + * like uavcan and DriverFramework. */ +#if !defined(__PX4_NUTTX) +#include <unistd.h> +// We can't include this for NuttX otherwise we get conflicts for read/write +// symbols in cannode. +#endif // !defined(__PX4_NUTTX) #define system_usleep usleep #define system_sleep sleep -#define system_clock_gettime clock_gettime -#define system_clock_settime clock_settime -#define system_pthread_cond_timedwait pthread_cond_timedwait - -#endif -#if defined(__PX4_NUTTX) /* On NuttX we call clearenv() so we cannot use getenv() and others (see * px4_task_spawn_cmd() in px4_nuttx_tasks.c). * We need to include the headers declaring getenv() before the pragma, * otherwise it will trigger a poison error. */ +#if defined(__PX4_NUTTX) #include <stdlib.h> #ifdef __cplusplus #include <cstdlib> #endif +/* We should include cstdlib or stdlib.h but this doesn't + * compile because many C++ files include stdlib.h and would + * need to get changed. */ #pragma GCC poison getenv setenv putenv #endif // defined(__PX4_NUTTX)