Add FreeBSD support
This commit is contained in:
parent
155d6ea3f9
commit
5c667d5282
|
@ -35,7 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||
#define JackPlatformAdapter JackAlsaAdapter
|
||||
#endif
|
||||
|
||||
#if defined(__sun__) || defined(sun)
|
||||
#if defined(__sun__) || defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
||||
#include "JackOSSAdapter.h"
|
||||
#define JackPlatformAdapter JackOSSAdapter
|
||||
#endif
|
||||
|
|
|
@ -22,12 +22,15 @@ def create_jack_process_obj(bld, target, sources, uselib = None, framework = Non
|
|||
if not bld.env['IS_WINDOWS']:
|
||||
process.env['cxxshlib_PATTERN'] = '%s.so'
|
||||
process.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
|
||||
print(bld.env)
|
||||
if bld.env['IS_MACOSX']:
|
||||
if framework:
|
||||
process.framework = framework
|
||||
env_includes = ['../macosx', '../posix', '../macosx/coreaudio']
|
||||
if bld.env['IS_LINUX']:
|
||||
env_includes = ['../linux', '../posix', '../linux/alsa']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
env_includes = ['../freebsd', '../posix', '../solaris/oss']
|
||||
if bld.env['IS_SUN']:
|
||||
env_includes = ['../solaris', '../posix', '../solaris/oss']
|
||||
if bld.env['IS_WINDOWS']:
|
||||
|
@ -36,7 +39,7 @@ def create_jack_process_obj(bld, target, sources, uselib = None, framework = Non
|
|||
process.name = target
|
||||
process.target = target
|
||||
process.source = sources
|
||||
if bld.env['IS_LINUX'] or bld.env['IS_MACOSX']:
|
||||
if bld.env['IS_LINUX'] or bld.env['IS_MACOSX'] or bld.env['IS_FREEBSD']:
|
||||
process.env.append_value('CPPFLAGS', '-fvisibility=hidden')
|
||||
process.install_path = '${ADDON_DIR}/'
|
||||
process.use = [uselib.name]
|
||||
|
@ -92,6 +95,20 @@ def build(bld):
|
|||
uselib.append('RT')
|
||||
uselib.append('DL')
|
||||
|
||||
if bld.env['IS_FREEBSD']:
|
||||
common_libsources += [
|
||||
'JackDebugClient.cpp',
|
||||
'timestamps.c',
|
||||
'promiscuous.c',
|
||||
'../posix/JackPosixThread.cpp',
|
||||
'../posix/JackPosixProcessSync.cpp',
|
||||
'../posix/JackPosixMutex.cpp',
|
||||
'../posix/JackPosixSemaphore.cpp',
|
||||
'../posix/JackSocket.cpp',
|
||||
'../freebsd/JackFreeBSDTime.c',
|
||||
]
|
||||
includes = ['../freebsd', '../posix'] + includes
|
||||
|
||||
if bld.env['IS_SUN']:
|
||||
common_libsources += [
|
||||
'JackDebugClient.cpp',
|
||||
|
@ -177,6 +194,12 @@ def build(bld):
|
|||
'../posix/JackPosixServerLaunch.cpp',
|
||||
]
|
||||
|
||||
if bld.env['IS_FREEBSD']:
|
||||
clientlib.source += [
|
||||
'../posix/JackSocketClientChannel.cpp',
|
||||
'../posix/JackPosixServerLaunch.cpp',
|
||||
]
|
||||
|
||||
if bld.env['IS_SUN']:
|
||||
clientlib.source += [
|
||||
'../posix/JackSocketClientChannel.cpp',
|
||||
|
@ -206,6 +229,9 @@ def build(bld):
|
|||
if bld.env['IS_LINUX']:
|
||||
clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
|
||||
|
||||
if bld.env['IS_FREEBSD']:
|
||||
clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
|
||||
|
||||
if bld.env['IS_MACOSX']:
|
||||
clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
|
||||
clientlib.env.append_value('LINKFLAGS', '-single_module')
|
||||
|
@ -282,6 +308,14 @@ def build(bld):
|
|||
'../posix/JackNetUnixSocket.cpp',
|
||||
]
|
||||
|
||||
if bld.env['IS_FREEBSD']:
|
||||
serverlib.source += [
|
||||
'../posix/JackSocketServerChannel.cpp',
|
||||
'../posix/JackSocketNotifyChannel.cpp',
|
||||
'../posix/JackSocketServerNotifyChannel.cpp',
|
||||
'../posix/JackNetUnixSocket.cpp',
|
||||
]
|
||||
|
||||
if bld.env['IS_SUN']:
|
||||
serverlib.source += [
|
||||
'../posix/JackSocketServerChannel.cpp',
|
||||
|
@ -361,6 +395,10 @@ def build(bld):
|
|||
netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../linux/JackLinuxTime.c']
|
||||
netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
|
||||
|
||||
if bld.env['IS_FREEBSD']:
|
||||
netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../linux/JackLinuxTime.c']
|
||||
netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
|
||||
|
||||
if bld.env['IS_SUN']:
|
||||
netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../solaris/JackSolarisTime.c']
|
||||
netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
|
||||
|
@ -423,7 +461,7 @@ def build(bld):
|
|||
process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
|
||||
process.use += ['ALSA', 'SAMPLERATE']
|
||||
|
||||
if bld.env['BUILD_ADAPTER'] and bld.env['IS_SUN']:
|
||||
if bld.env['BUILD_ADAPTER'] and (bld.env['IS_SUN'] or bld.env['IS_FREEBSD']):
|
||||
audio_adapter_sources += ['../solaris/oss/JackOSSAdapter.cpp', 'memops.c']
|
||||
process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
|
||||
process.use += 'SAMPLERATE'
|
||||
|
|
|
@ -39,6 +39,8 @@ def build(bld):
|
|||
obj = bld(features = ['c', 'cprogram'], idx=17)
|
||||
if bld.env['IS_LINUX']:
|
||||
sysdeps_dbus_include = ['../linux', '../posix']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
sysdeps_dbus_include = ['../freebsd', '../posix']
|
||||
if bld.env['IS_MACOSX']:
|
||||
sysdeps_dbus_include = ['../macosx', '../posix']
|
||||
|
||||
|
@ -67,6 +69,8 @@ def build(bld):
|
|||
'../linux/uptime.c',
|
||||
]
|
||||
obj.use += ['PTHREAD', 'DL', 'RT', 'DBUS-1', 'EXPAT', 'STDC++']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
obj.use += ['PTHREAD', 'EXECINFO', 'LIBSYSINFO', 'DBUS-1', 'EXPAT']
|
||||
if bld.env['IS_MACOSX']:
|
||||
obj.source += [
|
||||
'../macosx/uptime.c',
|
||||
|
|
|
@ -31,6 +31,8 @@ def build(bld):
|
|||
os_incdir = ['../linux', '../posix']
|
||||
if bld.env['IS_MACOSX']:
|
||||
os_incdir = ['../macosx', '../posix']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
os_incdir = ['../freebsd', '../posix']
|
||||
if bld.env['IS_SUN']:
|
||||
os_incdir = ['../solaris', '../posix']
|
||||
if bld.env['IS_WINDOWS']:
|
||||
|
@ -65,6 +67,8 @@ def build(bld):
|
|||
prog.use += ['RT', 'M']
|
||||
if bld.env['IS_SUN']:
|
||||
prog.use += ['M']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
prog.use += ['M']
|
||||
if bld.env['IS_WINDOWS'] and bld.env['BUILD_STATIC']:
|
||||
prog.env['LIB_PTHREAD'] = [':libwinpthread.a']
|
||||
#prog.cflags = ['-Wno-deprecated-declarations', '-Wno-misleading-indentation']
|
||||
|
@ -81,6 +85,8 @@ def build(bld):
|
|||
prog.use += ['SNDFILE']
|
||||
if bld.env['IS_LINUX']:
|
||||
prog.use += ['RT', 'SNDFILE']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
prog.use += ['SNDFILE']
|
||||
if bld.env['IS_SUN']:
|
||||
prog.use += ['RT', 'SNDFILE']
|
||||
if bld.env['IS_WINDOWS']:
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
Copyright (C) 2001-2003 Paul Davis
|
||||
Copyright (C) 2005 Jussi Laako
|
||||
Copyright (C) 2004-2008 Grame
|
||||
Copyright (C) 2018 Greg V
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#include "JackConstants.h"
|
||||
#include "JackTime.h"
|
||||
#include "JackTypes.h"
|
||||
#include "JackError.h"
|
||||
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
jack_time_t (*_jack_get_microseconds)(void) = 0;
|
||||
|
||||
static jack_time_t jack_get_microseconds_from_system (void)
|
||||
{
|
||||
jack_time_t jackTime;
|
||||
struct timespec time;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &time);
|
||||
jackTime = (jack_time_t) time.tv_sec * 1e6 +
|
||||
(jack_time_t) time.tv_nsec / 1e3;
|
||||
return jackTime;
|
||||
}
|
||||
|
||||
|
||||
SERVER_EXPORT void JackSleep(long usec)
|
||||
{
|
||||
usleep(usec);
|
||||
}
|
||||
|
||||
SERVER_EXPORT void InitTime()
|
||||
{
|
||||
/* nothing to do on a generic system - we use the system clock */
|
||||
}
|
||||
|
||||
SERVER_EXPORT void EndTime()
|
||||
{}
|
||||
|
||||
void SetClockSource(jack_timer_type_t source)
|
||||
{
|
||||
jack_log("Clock source : %s", ClockSourceName(source));
|
||||
|
||||
switch (source)
|
||||
{
|
||||
case JACK_TIMER_SYSTEM_CLOCK:
|
||||
default:
|
||||
_jack_get_microseconds = jack_get_microseconds_from_system;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const char* ClockSourceName(jack_timer_type_t source)
|
||||
{
|
||||
switch (source) {
|
||||
case JACK_TIMER_SYSTEM_CLOCK:
|
||||
return "system clock via clock_gettime";
|
||||
}
|
||||
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
SERVER_EXPORT jack_time_t GetMicroSeconds()
|
||||
{
|
||||
return _jack_get_microseconds();
|
||||
}
|
||||
|
||||
SERVER_EXPORT jack_time_t jack_get_microseconds()
|
||||
{
|
||||
return _jack_get_microseconds();
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
Copyright (C) 2004-2008 Grame
|
||||
Copyright (C) 2018 Greg V
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __JackPlatformPlug_freebsd__
|
||||
#define __JackPlatformPlug_freebsd__
|
||||
|
||||
#define jack_server_dir "/tmp"
|
||||
#define jack_client_dir "/tmp"
|
||||
#define JACK_DEFAULT_DRIVER "oss"
|
||||
|
||||
namespace Jack
|
||||
{
|
||||
struct JackRequest;
|
||||
struct JackResult;
|
||||
|
||||
class JackPosixMutex;
|
||||
class JackPosixThread;
|
||||
class JackPosixSemaphore;
|
||||
|
||||
class JackSocketServerChannel;
|
||||
class JackSocketClientChannel;
|
||||
class JackSocketServerNotifyChannel;
|
||||
class JackSocketNotifyChannel;
|
||||
class JackClientSocket;
|
||||
class JackNetUnixSocket;
|
||||
}
|
||||
|
||||
/* __JackPlatformMutex__ */
|
||||
#include "JackPosixMutex.h"
|
||||
namespace Jack {typedef JackPosixMutex JackMutex; }
|
||||
|
||||
/* __JackPlatformThread__ */
|
||||
#include "JackPosixThread.h"
|
||||
namespace Jack { typedef JackPosixThread JackThread; }
|
||||
|
||||
/* __JackPlatformSynchro__ client activation */
|
||||
#include "JackPosixSemaphore.h"
|
||||
namespace Jack { typedef JackPosixSemaphore JackSynchro; }
|
||||
|
||||
/* __JackPlatformChannelTransaction__ */
|
||||
#include "JackSocket.h"
|
||||
namespace Jack { typedef JackClientSocket JackChannelTransaction; }
|
||||
|
||||
/* __JackPlatformProcessSync__ */
|
||||
#include "JackPosixProcessSync.h"
|
||||
namespace Jack { typedef JackPosixProcessSync JackProcessSync; }
|
||||
|
||||
/* __JackPlatformServerChannel__ */
|
||||
#include "JackSocketServerChannel.h"
|
||||
namespace Jack { typedef JackSocketServerChannel JackServerChannel; }
|
||||
|
||||
/* __JackPlatformClientChannel__ */
|
||||
#include "JackSocketClientChannel.h"
|
||||
namespace Jack { typedef JackSocketClientChannel JackClientChannel; }
|
||||
|
||||
/* __JackPlatformServerNotifyChannel__ */
|
||||
#include "JackSocketServerNotifyChannel.h"
|
||||
namespace Jack { typedef JackSocketServerNotifyChannel JackServerNotifyChannel; }
|
||||
|
||||
/* __JackPlatformNotifyChannel__ */
|
||||
#include "JackSocketNotifyChannel.h"
|
||||
namespace Jack { typedef JackSocketNotifyChannel JackNotifyChannel; }
|
||||
|
||||
/* __JackPlatformNetSocket__ */
|
||||
#include "JackNetUnixSocket.h"
|
||||
namespace Jack { typedef JackNetUnixSocket JackNetSocket; }
|
||||
|
||||
#endif
|
|
@ -0,0 +1 @@
|
|||
../linux/driver.h
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
Copyright (C) 2004-2008 Grame
|
||||
Copyright (C) 2018 Greg V
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __JackAtomic_freebsd__
|
||||
#define __JackAtomic_freebsd__
|
||||
|
||||
#include "JackTypes.h"
|
||||
#include <sys/types.h>
|
||||
#include <machine/atomic.h>
|
||||
|
||||
static inline char CAS(volatile UInt32 value, UInt32 newvalue, volatile void* addr)
|
||||
{
|
||||
return atomic_cmpset_32((uint32_t*)addr, value, newvalue);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -20,6 +20,8 @@ def build(bld):
|
|||
prog.includes = ['..','../macosx', '../posix', '../common/jack', '../common']
|
||||
if bld.env['IS_LINUX']:
|
||||
prog.includes = ['..','../linux', '../posix', '../common/jack', '../common']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
prog.includes = ['..','../freebsd', '../posix', '../common/jack', '../common']
|
||||
if bld.env['IS_SUN']:
|
||||
prog.includes = ['..','../solaris', '../posix', '../common/jack', '../common']
|
||||
prog.source = test_program_sources
|
||||
|
|
|
@ -29,6 +29,8 @@ def build(bld):
|
|||
os_incdir = ['../linux', '../posix']
|
||||
if bld.env['IS_MACOSX']:
|
||||
os_incdir = ['../macosx', '../posix']
|
||||
if bld.env['IS_FREEBSD']:
|
||||
os_incdir = ['../freebsd', '../posix']
|
||||
if bld.env['IS_SUN']:
|
||||
os_incdir = ['../solaris', '../posix']
|
||||
if bld.env['IS_WINDOWS']:
|
||||
|
|
15
wscript
15
wscript
|
@ -191,6 +191,7 @@ def detect_platform(conf):
|
|||
platforms = [
|
||||
# ('KEY, 'Human readable name', ['strings', 'to', 'check', 'for'])
|
||||
('IS_LINUX', 'Linux', ['gnu0', 'gnukfreebsd', 'linux', 'posix']),
|
||||
('IS_FREEBSD', 'FreeBSD', ['freebsd']),
|
||||
('IS_MACOSX', 'MacOS X', ['darwin']),
|
||||
('IS_SUN', 'SunOS', ['sunos']),
|
||||
('IS_WINDOWS', 'Windows', ['cygwin', 'msys', 'win32'])
|
||||
|
@ -230,6 +231,10 @@ def configure(conf):
|
|||
conf.env.append_unique('CXXFLAGS', ['-Wall', '-Wno-invalid-offsetof'])
|
||||
conf.env.append_unique('CXXFLAGS', '-std=gnu++11')
|
||||
|
||||
if conf.env['IS_FREEBSD']:
|
||||
conf.check(lib='execinfo', uselib='EXECINFO', define_name='EXECINFO')
|
||||
conf.check_cfg(package='libsysinfo', args='--cflags --libs')
|
||||
|
||||
if not conf.env['IS_MACOSX']:
|
||||
conf.env.append_unique('LDFLAGS', '-Wl,--no-undefined')
|
||||
else:
|
||||
|
@ -524,6 +529,9 @@ def obj_add_includes(bld, obj):
|
|||
if bld.env['IS_LINUX']:
|
||||
obj.includes += ['linux', 'posix']
|
||||
|
||||
if bld.env['IS_FREEBSD']:
|
||||
obj.includes += ['freebsd', 'posix']
|
||||
|
||||
if bld.env['IS_MACOSX']:
|
||||
obj.includes += ['macosx', 'posix']
|
||||
|
||||
|
@ -551,6 +559,9 @@ def build_jackd(bld):
|
|||
if bld.env['IS_LINUX']:
|
||||
jackd.use += ['DL', 'M', 'PTHREAD', 'RT', 'STDC++']
|
||||
|
||||
if bld.env['IS_FREEBSD']:
|
||||
jackd.use += ['M', 'PTHREAD']
|
||||
|
||||
if bld.env['IS_MACOSX']:
|
||||
jackd.use += ['DL', 'PTHREAD']
|
||||
jackd.framework = ['CoreFoundation']
|
||||
|
@ -768,7 +779,7 @@ def build_drivers(bld):
|
|||
use = ['serverlib'], # FIXME: Is this needed?
|
||||
framework = ['AudioUnit', 'CoreMIDI', 'CoreServices', 'Foundation'])
|
||||
|
||||
if bld.env['IS_SUN']:
|
||||
if bld.env['IS_SUN'] or bld.env['IS_FREEBSD']:
|
||||
create_driver_obj(
|
||||
bld,
|
||||
target = 'boomer',
|
||||
|
@ -819,7 +830,7 @@ def build(bld):
|
|||
bld.recurse('example-clients')
|
||||
bld.recurse('tools')
|
||||
|
||||
if bld.env['IS_LINUX']:
|
||||
if bld.env['IS_LINUX'] or bld.env['IS_FREEBSD']:
|
||||
bld.recurse('man')
|
||||
bld.recurse('systemd')
|
||||
if not bld.env['IS_WINDOWS']:
|
||||
|
|
Loading…
Reference in New Issue