diff --git a/boards/native/Makefile.include b/boards/native/Makefile.include index e23dcdf117654..a15f3ab4925ed 100644 --- a/boards/native/Makefile.include +++ b/boards/native/Makefile.include @@ -10,10 +10,10 @@ export ELF = $(BINDIR)$(PROJECT).elf # toolchain: export PREFIX = export CC ?= $(PREFIX)gcc -export AR = $(PREFIX)ar -export AS = $(PREFIX)as -export LINK = $(PREFIX)gcc -export SIZE = $(PREFIX)size +export AR ?= $(PREFIX)ar +export AS ?= $(PREFIX)as +export LINK ?= $(PREFIX)gcc +export SIZE ?= $(PREFIX)size export OBJCOPY = true export DEBUGGER = gdb @@ -25,7 +25,15 @@ export GPROF ?= gprof # flags: export CFLAGS += -Wall -Wextra -pedantic -m32 -export LINKFLAGS += -m32 -gc -ldl +ifeq ($(shell uname -s),FreeBSD) +export CFLAGS += -DCOMPAT_32BIT -L/usr/lib32 -B/usr/lib32 +endif +export LINKFLAGS += -m32 -gc +ifeq ($(shell uname -s),FreeBSD) +export LINKFLAGS += -DCOMPAT_32BIT -L/usr/lib32 -B/usr/lib32 -L $(BINDIR) +else +export LINKFLAGS += -ldl +endif export ASFLAGS = export DEBUGGER_FLAGS = $(ELF) term-memcheck: export VALGRIND_FLAGS ?= --track-origins=yes diff --git a/cpu/native/include/native_internal.h b/cpu/native/include/native_internal.h index a55f20edd017e..09e5dd703e13e 100644 --- a/cpu/native/include/native_internal.h +++ b/cpu/native/include/native_internal.h @@ -13,6 +13,7 @@ #define _NATIVE_INTERNAL_H #include +# /** * internal functions @@ -80,7 +81,7 @@ int unregister_interrupt(int sig); * check here for more: * http://sourceforge.net/p/predef/wiki/OperatingSystems/ */ -#ifdef BSD // BSD = (FreeBSD, Darwin, ...) +#if (defined(__FreeBSD__) || defined(__MACH__)) #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE #include diff --git a/cpu/native/irq_cpu.c b/cpu/native/irq_cpu.c index 2de537835cbc2..8d8785c371915 100644 --- a/cpu/native/irq_cpu.c +++ b/cpu/native/irq_cpu.c @@ -340,7 +340,7 @@ void native_isr_entry(int sig, siginfo_t *info, void *context) #ifdef __MACH__ _native_saved_eip = ((ucontext_t *)context)->uc_mcontext->__ss.__eip; ((ucontext_t *)context)->uc_mcontext->__ss.__eip = (unsigned int)&_native_sig_leave_tramp; -#elif BSD +#elif defined(__FreeBSD__) _native_saved_eip = ((struct sigcontext *)context)->sc_eip; ((struct sigcontext *)context)->sc_eip = (unsigned int)&_native_sig_leave_tramp; #else diff --git a/cpu/native/net/tap.c b/cpu/native/net/tap.c index 03920dc211772..52ed19da21abc 100644 --- a/cpu/native/net/tap.c +++ b/cpu/native/net/tap.c @@ -31,6 +31,13 @@ #undef _POSIX_C_SOURCE #include #include + +#elif defined(__FreeBSD__) +#include +#include +#include +#include + #else #include #include @@ -232,6 +239,9 @@ int tap_init(char *name) #ifdef __MACH__ /* OSX */ char clonedev[255] = "/dev/"; /* XXX bad size */ strncpy(clonedev+5, name, 250); +#elif defined(__FreeBSD__) + char clonedev[255] = "/dev/"; /* XXX bad size */ + strncpy(clonedev+5, name, 250); #else /* Linux */ struct ifreq ifr; const char *clonedev = "/dev/net/tun"; @@ -242,7 +252,7 @@ int tap_init(char *name) err(EXIT_FAILURE, "open(%s)", clonedev); } -#ifdef __MACH__ /* OSX */ +#if (defined(__MACH__) || defined(__FreeBSD__)) /* OSX/FreeBSD */ struct ifaddrs* iflist; if (getifaddrs(&iflist) == 0) { for (struct ifaddrs *cur = iflist; cur; cur = cur->ifa_next) { diff --git a/cpu/native/syscalls.c b/cpu/native/syscalls.c index 6e94aeba1bcb2..dd827dabeed67 100644 --- a/cpu/native/syscalls.c +++ b/cpu/native/syscalls.c @@ -163,6 +163,9 @@ ssize_t _native_write(int fd, const void *buf, size_t count) return r; } +#if defined(__FreeBSD__) +#undef putchar +#endif int putchar(int c) { _native_write(STDOUT_FILENO, &c, 1); return 0;