Browse Source

OS X porting: Make unit tests compile on OS X

sbg
Lorenz Meier 10 years ago
parent
commit
b06a533555
  1. 9
      makefiles/posix/toolchain_native.mk
  2. 11
      src/drivers/device/i2c_posix.cpp
  3. 5
      src/drivers/drv_device.h
  4. 34
      src/platforms/posix/px4_layer/drv_hrt.c
  5. 15
      src/platforms/px4_log.h
  6. 6
      src/platforms/px4_tasks.h
  7. 10
      unittests/CMakeLists.txt

9
makefiles/posix/toolchain_native.mk

@ -120,7 +120,6 @@ ifeq ($(CONFIG_BOARD),) @@ -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) \ @@ -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) \

11
src/drivers/device/i2c_posix.cpp

@ -135,6 +135,9 @@ I2C::init() @@ -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 @@ -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) @@ -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);

5
src/drivers/drv_device.h

@ -66,6 +66,11 @@ @@ -66,6 +66,11 @@
#define DEVIOCGDEVICEID _DEVICEIOC(2)
#ifdef __PX4_POSIX
#ifndef SIOCDEVPRIVATE
#define SIOCDEVPRIVATE 1
#endif
#define DIOC_GETPRIV SIOCDEVPRIVATE
#endif

34
src/platforms/posix/px4_layer/drv_hrt.c

@ -77,6 +77,40 @@ static void hrt_unlock(void) @@ -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.
*/

15
src/platforms/px4_log.h

@ -86,6 +86,21 @@ @@ -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(...)

6
src/platforms/px4_tasks.h

@ -68,10 +68,16 @@ typedef int px4_task_t; @@ -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;

10
unittests/CMakeLists.txt

@ -55,15 +55,19 @@ add_definitions(-DERROR=-1) @@ -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()

Loading…
Cancel
Save