mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2024-12-24 12:47:12 +01:00
200 lines
5.5 KiB
Python
200 lines
5.5 KiB
Python
|
|
import os
|
|
import sys
|
|
|
|
|
|
import version
|
|
|
|
if version.major > 2:
|
|
yes = True
|
|
no = False
|
|
else:
|
|
yes = 'yes'
|
|
no = 'no'
|
|
|
|
|
|
def has_wrapper_for(lib):
|
|
|
|
if version.major == 2:
|
|
return False
|
|
if version.minor > 2:
|
|
return True
|
|
return False
|
|
|
|
|
|
def is_active():
|
|
|
|
return True
|
|
|
|
|
|
def get_name():
|
|
|
|
return 'FRT'
|
|
|
|
|
|
def can_build():
|
|
|
|
if os.name != 'posix':
|
|
return False
|
|
return True
|
|
|
|
|
|
def get_opts():
|
|
|
|
if version.major > 2:
|
|
from SCons.Variables import BoolVariable
|
|
else:
|
|
def BoolVariable(a,b,c): return (a,b,c)
|
|
|
|
return [
|
|
('frt_arch', 'Architecture (no/arm32v6/arm32v7/arm64v8)', 'no'),
|
|
('frt_cross', 'Cross compilation (no/auto/<triple>)', 'no'),
|
|
BoolVariable('use_llvm', 'Use llvm compiler', no),
|
|
BoolVariable('use_lto', 'Use link time optimization', no),
|
|
BoolVariable('use_static_cpp', 'Link libgcc and libstdc++ statically', yes),
|
|
BoolVariable('pulseaudio', 'Detect and use pulseaudio', yes),
|
|
]
|
|
|
|
|
|
def get_flags():
|
|
|
|
return [
|
|
('tools', no),
|
|
]
|
|
|
|
def check(env, key):
|
|
|
|
if not (key in env):
|
|
return False
|
|
if version.major > 2:
|
|
return env[key]
|
|
else:
|
|
return env[key] == 'yes'
|
|
|
|
def configure(env):
|
|
|
|
import methods
|
|
|
|
env.Append(CPPPATH=['#platform/frt'])
|
|
|
|
if check(env, 'use_llvm'):
|
|
if 'clang++' not in env['CXX']:
|
|
env['CC'] = 'clang'
|
|
env['CXX'] = 'clang++'
|
|
env['LD'] = 'clang++'
|
|
|
|
env.Append(CPPFLAGS=['-DTYPED_METHOD_BIND'])
|
|
env.extra_suffix += '.llvm'
|
|
|
|
if check(env, 'use_lto'):
|
|
if check(env, 'use_llvm'):
|
|
env.Append(CCFLAGS=['-flto=thin'])
|
|
env.Append(LINKFLAGS=['-fuse-ld=lld', '-flto=thin'])
|
|
env['AR'] = 'llvm-ar'
|
|
env['RANLIB'] = 'llvm-ranlib'
|
|
else:
|
|
env.Append(CCFLAGS=['-flto'])
|
|
env.Append(LINKFLAGS=['-flto'])
|
|
|
|
env.extra_suffix += '.lto'
|
|
|
|
if env['frt_cross'] != 'no':
|
|
if env['frt_cross'] == 'auto':
|
|
triple = {
|
|
'arm32v7': 'arm-linux-gnueabihf',
|
|
'arm64v8': 'aarch64-linux-gnu',
|
|
}[env['frt_arch']]
|
|
else:
|
|
triple = env['frt_cross']
|
|
if check(env, 'use_llvm'):
|
|
env.Append(CCFLAGS=['-target', triple])
|
|
env.Append(LINKFLAGS=['-target', triple])
|
|
else:
|
|
env['CC'] = triple + '-gcc'
|
|
env['CXX'] = triple + '-g++'
|
|
pkg_config = triple + '-pkg-config'
|
|
else:
|
|
pkg_config = 'pkg-config'
|
|
|
|
env.Append(CCFLAGS=['-pipe'])
|
|
env.Append(LINKFLAGS=['-pipe'])
|
|
|
|
if os.system(pkg_config + ' --exists alsa') == 0:
|
|
print('Enabling ALSA')
|
|
env.Append(CPPFLAGS=['-DALSA_ENABLED'])
|
|
if has_wrapper_for('alsa'):
|
|
env['alsa'] = True
|
|
else:
|
|
env.ParseConfig(pkg_config + ' alsa --cflags --libs')
|
|
else:
|
|
print('ALSA libraries not found, disabling driver')
|
|
|
|
if check(env, 'pulseaudio'):
|
|
if os.system(pkg_config + ' --exists libpulse') == 0:
|
|
print('Enabling PulseAudio')
|
|
env.Append(CPPDEFINES=['PULSEAUDIO_ENABLED'])
|
|
if version.major == 2:
|
|
env.ParseConfig(pkg_config + ' --cflags --libs libpulse-simple')
|
|
elif has_wrapper_for('libpulse'):
|
|
env.ParseConfig(pkg_config + ' --cflags libpulse')
|
|
else:
|
|
env.ParseConfig(pkg_config + ' --cflags --libs libpulse')
|
|
else:
|
|
print('PulseAudio libraries not found, disabling driver')
|
|
|
|
# pkg-config returns 0 when the lib exists...
|
|
found_udev = not os.system(pkg_config + ' --exists libudev')
|
|
if found_udev:
|
|
print('Enabling udev support')
|
|
env.Append(CPPFLAGS=['-DUDEV_ENABLED'])
|
|
if has_wrapper_for('udev'):
|
|
env.Append(FRT_MODULES=['include/libudev-so_wrap.c'])
|
|
else:
|
|
env.ParseConfig(pkg_config + ' libudev --cflags --libs')
|
|
env.Append(CPPFLAGS=['-DJOYDEV_ENABLED'])
|
|
env.Append(FRT_MODULES=['include/joypad_linux.cpp'])
|
|
else:
|
|
print('libudev development libraries not found, disabling udev support')
|
|
|
|
if env['target'] == 'release':
|
|
env.Append(CCFLAGS=['-O3', '-fomit-frame-pointer'])
|
|
elif env['target'] == 'release_debug':
|
|
env.Append(CCFLAGS=['-O3', '-DDEBUG_ENABLED'])
|
|
elif env['target'] == 'debug':
|
|
env.Append(CCFLAGS=['-g2', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED'])
|
|
if env['target'].startswith('release'):
|
|
if version.major == 2 or (version.major == 3 and version.minor == 0):
|
|
env.Append(CCFLAGS=['-ffast-math'])
|
|
|
|
if env['frt_arch'] == 'arm32v6':
|
|
env.Append(CCFLAGS=['-march=armv6', '-mfpu=vfp', '-mfloat-abi=hard'])
|
|
env.extra_suffix += '.arm32v6'
|
|
elif env['frt_arch'] == 'arm32v7':
|
|
env.Append(CCFLAGS=['-march=armv7-a', '-mfpu=neon-vfpv4', '-mfloat-abi=hard'])
|
|
env.extra_suffix += '.arm32v7'
|
|
elif env['frt_arch'] == 'arm64v8':
|
|
env.Append(CCFLAGS=['-march=armv8-a'])
|
|
env.extra_suffix += '.arm64v8'
|
|
|
|
env.Append(CFLAGS=['-std=gnu11']) # for libwebp (maybe more in the future)
|
|
env.Append(CPPFLAGS=['-DFRT_ENABLED', '-DUNIX_ENABLED', '-DGLES2_ENABLED', '-DGLES_ENABLED'])
|
|
env.Append(LIBS=['pthread'])
|
|
if env['frt_arch'] == 'arm32v6' and version.major == 3 and version.minor >= 4: # TODO find out exact combination
|
|
env.Append(LIBS=['atomic'])
|
|
|
|
env.Append(FRT_MODULES=['envprobe.cpp'])
|
|
env.Append(FRT_MODULES=['video_fbdev.cpp', 'keyboard_linux_input.cpp', 'mouse_linux_input.cpp'])
|
|
env.Append(FRT_MODULES=['video_x11.cpp', 'keyboard_x11.cpp', 'mouse_x11.cpp'])
|
|
|
|
env.Append(FRT_MODULES=['import/key_mapping_x11_3.cpp'])
|
|
|
|
env.Append(FRT_MODULES=['dl/x11.gen.cpp', 'dl/egl.gen.cpp'])
|
|
if os.path.isfile('/opt/vc/include/bcm_host.h'):
|
|
env.Append(FRT_MODULES=['video_bcm.cpp', 'dl/bcm.gen.cpp'])
|
|
if os.path.isfile('/usr/include/gbm.h'):
|
|
env.Append(FRT_MODULES=['video_kmsdrm.cpp', 'dl/gbm.gen.cpp', 'dl/drm.gen.cpp'])
|
|
|
|
env.Append(FRT_MODULES=['dl/gles2.gen.cpp'])
|
|
|
|
env.Append(LIBS=['dl'])
|