FreeBSD?

Is there FreeBSD support?

Well, that’s just OSX without the Apple stuff, so I guess the answer is “probably”!

I get “#error “Unknown platform!”” in juce_TargetPlatform.h

Trying to install FreeBSD on a VirtualBox, and having the dickens of a time! Can anyone point me in the right direction? It wants to know the number of cylinders of my hard drive (lol).

Maybe try defining LINUX=1…?

Hmm that didn’t work. I ended up checking for FreeBSD and defining JUCE_BSD. Then in various places I account for the differences in header files. Like in juce_BasicNativeHeaders.h.

Some things dont’ work like clock_nanoseconds() used in HighResolutionTimer (bug in FreeBSD).

Overall its doable. I’m talking about just the juce_core module. Obviously, I haven’t tried the others!

Well, if you want me to merge-in your tweaks, just let me know!

Unfortunately, I’ve hard-forked juce_core. Here’s a run-down of my changes though:

juce_TargetPlatform.h

#elif defined (__FreeBSD__)
  #define JUCE_BSD 1
#else
  #error "Unknown platform!"
#endif
//...
#if JUCE_LINUX || JUCE_ANDROID || JUCE_BSD

  #ifdef _DEBUG
    #define JUCE_DEBUG 1
  #endif

  // Allow override for big-endian Linux platforms
  #if defined (__LITTLE_ENDIAN__) || ! defined (JUCE_BIG_ENDIAN)
    #define JUCE_LITTLE_ENDIAN 1
    #undef JUCE_BIG_ENDIAN
  #else
    #undef JUCE_LITTLE_ENDIAN
    #define JUCE_BIG_ENDIAN 1
  #endif

  #if defined (__LP64__) || defined (_LP64)
    #define JUCE_64BIT 1
  #else
    #define JUCE_32BIT 1
  #endif

  #if __MMX__ || __SSE__ || __amd64__
    #define JUCE_INTEL 1
  #endif

juce_core.cpp

#if ! JUCE_BSD
 #include <sys/timeb.h> // deprecated on FreeBSD
#endif
//...
 #if ! JUCE_ANDROID && ! JUCE_BSD
  #include <execinfo.h>
 #endif

juce_BasicNativeHeaders.h

#elif JUCE_LINUX || JUCE_BSD
 #include <sched.h>
 #include <pthread.h>
 #include <sys/time.h>
 #include <errno.h>
 #include <sys/stat.h>
 #include <sys/ptrace.h>
 #include <sys/wait.h>
 #include <sys/mman.h>
 #include <fnmatch.h>
 #include <utime.h>
 #include <pwd.h>
 #include <fcntl.h>
 #include <dlfcn.h>
 #include <netdb.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <net/if.h>
 #include <sys/file.h>
 #include <signal.h>
 #include <stddef.h>

 #if JUCE_BSD
  #include <dirent.h>
  #include <sys/param.h>
  #include <sys/mount.h>
 #else
  #include <sys/dir.h>
  #include <sys/vfs.h>
  #include <sys/sysinfo.h>
  #include <sys/prctl.h>
 #endif

juce_posix_SharedCode.h

#if JUCE_BSD
            jassertfalse; // unimplemented
#else
            clock_nanosleep (CLOCK_MONOTONIC, TIMER_ABSTIME, &t, nullptr);
#endif

juce_SystemStats.cpp

String SystemStats::getStackBacktrace()
{
    String result;

   #if JUCE_ANDROID || JUCE_MINGW || JUCE_BSD
    jassertfalse; // sorry, not implemented yet!

re: clock_nanosleep, I’d have thought that using the OSX version above it (mach_wait_until) would work?

I will try that and see if it compiles.

Can’t seem to find the right #include for this. <mach/mach_time.h> doesn’t exist in FreeBSD.

Yeah no way Jules…wild goose chase lol! mach_* functions are for the Mach kernel, which is not FreeBSD.

Fair enough! I always assumed that stuff came from the BSD parts of the OSX kernel!