mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-25 00:05:34 +08:00
OS X porting: Make unit tests compile on OS X
This commit is contained in:
@@ -120,7 +120,6 @@ ifeq ($(CONFIG_BOARD),)
|
||||
$(error Board config does not define CONFIG_BOARD)
|
||||
endif
|
||||
ARCHDEFINES += -DCONFIG_ARCH_BOARD_$(CONFIG_BOARD) \
|
||||
-D__PX4_LINUX -D__PX4_POSIX \
|
||||
-Dnoreturn_function= \
|
||||
-I$(PX4_BASE)/src/modules/systemlib \
|
||||
-I$(PX4_BASE)/src/lib/eigen \
|
||||
@@ -128,6 +127,14 @@ ARCHDEFINES += -DCONFIG_ARCH_BOARD_$(CONFIG_BOARD) \
|
||||
-I$(PX4_BASE)/mavlink/include/mavlink \
|
||||
-Wno-error=shadow
|
||||
|
||||
UNAME_S := $(shell uname -s)
|
||||
ifeq ($(UNAME_S),Linux)
|
||||
ARCHDEFINES += -D__PX4_POSIX -D__PX4_LINUX
|
||||
endif
|
||||
ifeq ($(UNAME_S),Darwin)
|
||||
ARCHDEFINES += -D__PX4_POSIX -D__PX4_DARWIN
|
||||
endif
|
||||
|
||||
# optimisation flags
|
||||
#
|
||||
ARCHOPTIMIZATION = $(MAXOPTIMIZATION) \
|
||||
|
||||
@@ -135,6 +135,9 @@ I2C::init()
|
||||
int
|
||||
I2C::transfer(const uint8_t *send, unsigned send_len, uint8_t *recv, unsigned recv_len)
|
||||
{
|
||||
#ifndef __PX4_LINUX
|
||||
return 1;
|
||||
#else
|
||||
struct i2c_msg msgv[2];
|
||||
unsigned msgs;
|
||||
struct i2c_rdwr_ioctl_data packets;
|
||||
@@ -191,11 +194,15 @@ I2C::transfer(const uint8_t *send, unsigned send_len, uint8_t *recv, unsigned re
|
||||
} while (retry_count++ < _retries);
|
||||
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
I2C::transfer(struct i2c_msg *msgv, unsigned msgs)
|
||||
{
|
||||
#ifndef __PX4_LINUX
|
||||
return 1;
|
||||
#else
|
||||
struct i2c_rdwr_ioctl_data packets;
|
||||
int ret;
|
||||
unsigned retry_count = 0;
|
||||
@@ -227,16 +234,18 @@ I2C::transfer(struct i2c_msg *msgv, unsigned msgs)
|
||||
} while (retry_count++ < _retries);
|
||||
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
int I2C::ioctl(device::file_t *filp, int cmd, unsigned long arg)
|
||||
{
|
||||
//struct i2c_rdwr_ioctl_data *packets = (i2c_rdwr_ioctl_data *)(void *)arg;
|
||||
|
||||
switch (cmd) {
|
||||
#ifdef __PX4_LINUX
|
||||
case I2C_RDWR:
|
||||
warnx("Use I2C::transfer, not ioctl");
|
||||
return 0;
|
||||
#endif
|
||||
default:
|
||||
/* give it to the superclass */
|
||||
return VDev::ioctl(filp, cmd, arg);
|
||||
|
||||
@@ -66,6 +66,11 @@
|
||||
#define DEVIOCGDEVICEID _DEVICEIOC(2)
|
||||
|
||||
#ifdef __PX4_POSIX
|
||||
|
||||
#ifndef SIOCDEVPRIVATE
|
||||
#define SIOCDEVPRIVATE 1
|
||||
#endif
|
||||
|
||||
#define DIOC_GETPRIV SIOCDEVPRIVATE
|
||||
#endif
|
||||
|
||||
|
||||
@@ -77,6 +77,40 @@ static void hrt_unlock(void)
|
||||
sem_post(&_hrt_lock);
|
||||
}
|
||||
|
||||
#ifndef clock_gettime
|
||||
#include <mach/mach_time.h>
|
||||
#define MAC_NANO (+1.0E-9)
|
||||
#define MAC_GIGA UINT64_C(1000000000)
|
||||
#define CLOCK_MONOTONIC 1
|
||||
#define clockid_t int
|
||||
|
||||
static double px4_timebase = 0.0;
|
||||
static uint64_t px4_timestart = 0;
|
||||
|
||||
int clock_gettime(clockid_t clk_id, struct timespec *t)
|
||||
{
|
||||
if (clk_id != CLOCK_MONOTONIC) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// XXX multithreading locking
|
||||
if (!px4_timestart) {
|
||||
mach_timebase_info_data_t tb = { 0 };
|
||||
mach_timebase_info(&tb);
|
||||
px4_timebase = tb.numer;
|
||||
px4_timebase /= tb.denom;
|
||||
px4_timestart = mach_absolute_time();
|
||||
}
|
||||
|
||||
memset(t, 0, sizeof(*t));
|
||||
|
||||
double diff = (mach_absolute_time() - px4_timestart) * px4_timebase;
|
||||
t->tv_sec = diff * MAC_NANO;
|
||||
t->tv_nsec = diff - (t->tv_sec * MAC_GIGA);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Get absolute time.
|
||||
*/
|
||||
|
||||
@@ -86,6 +86,21 @@
|
||||
#define PX4_WARN(...) __px4_log_verbose("WARN", __VA_ARGS__)
|
||||
#define PX4_ERR(...) __px4_log_verbose("ERROR", __VA_ARGS__)
|
||||
|
||||
#elif defined(__PX4_DARWIN)
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#define __px4_log_threads(level, ...) { \
|
||||
printf("%-5s %ld ", level, pthread_self());\
|
||||
printf(__VA_ARGS__);\
|
||||
printf(" (file %s line %d)\n", __FILE__, __LINE__);\
|
||||
}
|
||||
|
||||
#define PX4_DEBUG(...) __px4_log_omit("DEBUG", __VA_ARGS__)
|
||||
#define PX4_INFO(...) __px4_log("INFO", __VA_ARGS__)
|
||||
#define PX4_WARN(...) __px4_log_verbose("WARN", __VA_ARGS__)
|
||||
#define PX4_ERR(...) __px4_log_verbose("ERROR", __VA_ARGS__)
|
||||
|
||||
#elif defined(__PX4_ROS)
|
||||
|
||||
#define PX4_DBG(...)
|
||||
|
||||
@@ -68,10 +68,16 @@ typedef int px4_task_t;
|
||||
#define SCHED_PRIORITY_MAX sched_get_priority_max(SCHED_FIFO)
|
||||
#define SCHED_PRIORITY_MIN sched_get_priority_min(SCHED_FIFO)
|
||||
#define SCHED_PRIORITY_DEFAULT sched_get_priority_max(SCHED_FIFO)
|
||||
#elif defined(__PX4_DARWIN)
|
||||
#define SCHED_PRIORITY_MAX sched_get_priority_max(SCHED_FIFO)
|
||||
#define SCHED_PRIORITY_MIN sched_get_priority_min(SCHED_FIFO)
|
||||
#define SCHED_PRIORITY_DEFAULT sched_get_priority_max(SCHED_FIFO)
|
||||
#elif defined(__PX4_QURT)
|
||||
#define SCHED_PRIORITY_MAX 0
|
||||
#define SCHED_PRIORITY_MIN 0
|
||||
#define SCHED_PRIORITY_DEFAULT 0
|
||||
#else
|
||||
#error "No target OS defined"
|
||||
#endif
|
||||
|
||||
typedef int px4_task_t;
|
||||
|
||||
@@ -55,15 +55,19 @@ add_definitions(-DERROR=-1)
|
||||
add_definitions(-DOK=0)
|
||||
add_definitions(-D_UNIT_TEST=)
|
||||
add_definitions(-D__PX4_POSIX)
|
||||
add_definitions(-D__PX4_LINUX)
|
||||
add_definitions(-D__PX4_POSIX)
|
||||
|
||||
# check
|
||||
add_custom_target(unittests COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure)
|
||||
|
||||
function(add_gtest)
|
||||
foreach(test_name ${ARGN})
|
||||
target_link_libraries(${test_name} gtest_main pthread rt )
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
target_link_libraries(${test_name} gtest_main pthread )
|
||||
add_definitions(-D__PX4_DARWIN)
|
||||
else()
|
||||
target_link_libraries(${test_name} gtest_main pthread rt )
|
||||
add_definitions(-D__PX4_LINUX)
|
||||
endif()
|
||||
add_test(NAME ${test_name} COMMAND ${test_name} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||
add_dependencies(unittests ${test_name})
|
||||
endforeach()
|
||||
|
||||
Reference in New Issue
Block a user