This is a **preview release** — Lumiera is not usable yet. Publication was again motivated by a series of major upgrades and clean-up. Compilation now requires C++23 and Debian/Trixie is considered the reference platform. The GUI is connected to the core over an asynchronous messaging bus and the timeline display has been reshaped to accommodate flexibly nested structures of media content, instructed by the session through a series of _diff messages_. A scheduler has been implemented to drive the Render Engine, but the connection to the player and UI for output is yet unfinished.
130 lines
4.6 KiB
Python
130 lines
4.6 KiB
Python
# coding: utf-8
|
||
##
|
||
## Setup.py - SCons build: setup, definitions and compiler flags
|
||
##
|
||
|
||
# Copyright (C)
|
||
# 2012-2025 Hermann Vosseler <Ichthyostega@web.de>
|
||
#
|
||
# **Lumiera** is free software; you can redistribute it and/or modify it
|
||
# under the terms of the GNU General Public License as published by the
|
||
# Free Software Foundation; either version 2 of the License, or (at your
|
||
# option) any later version. See the file COPYING for further details.
|
||
#####################################################################
|
||
|
||
from SCons.Script import EnsurePythonVersion, EnsureSConsVersion, Variables, Decider
|
||
|
||
from LumieraEnvironment import *
|
||
from Buildhelper import *
|
||
import Options
|
||
|
||
|
||
|
||
#-------------------------------------------------------Configuration
|
||
TARGDIR = 'target'
|
||
VERSION = '0.pre.04'
|
||
TOOLDIR = './admin/scons' # SCons plugins
|
||
OPTCACHE = 'optcache'
|
||
CUSTOPTFILE = 'custom-options'
|
||
|
||
# these are accessible via env.path.xxxx
|
||
buildExe = '$TARGDIR'
|
||
buildLib = '$TARGDIR/modules'
|
||
buildPlug = '$TARGDIR/modules'
|
||
buildIcon = '$TARGDIR/gui/icons' # for IconResource() and IconRender()
|
||
buildUIRes = '$TARGDIR/gui/' # for GuiResource()
|
||
buildConf = '$TARGDIR/config' # for ConfigData()
|
||
installExe = '$DESTDIR/lib/lumiera'
|
||
installLib = '$DESTDIR/lib/lumiera/modules'
|
||
installPlug = '$DESTDIR/lib/lumiera/modules'
|
||
installIcon = '$DESTDIR/share/lumiera/icons'
|
||
installUIRes = '$DESTDIR/share/lumiera/'
|
||
installConf = '$DESTDIR/lib/lumiera/config'
|
||
installDoc = '$DESTDIR/share/doc/lumiera/'
|
||
|
||
#-------------------------------------------------------Configuration
|
||
|
||
buildSetup = Record(locals())
|
||
# passed to LumieraEnvironment() -> env.path.xxxx
|
||
|
||
|
||
|
||
|
||
|
||
def defineBuildEnvironment():
|
||
""" create a custom build environment,
|
||
define the basic compiler and linker flags,
|
||
define locations in source and target tree,
|
||
parse the commandline and pick up options
|
||
"""
|
||
EnsureSConsVersion(4,0)
|
||
EnsurePythonVersion(3,10)
|
||
Decider('content-timestamp') # detect changed files by timestamp, then do a MD5
|
||
|
||
buildVars = Variables([OPTCACHE, CUSTOPTFILE])
|
||
Options.defineCmdlineVariables(buildVars)
|
||
env = LumieraEnvironment(buildSetup, buildVars)
|
||
|
||
env.Replace( CPPPATH =["#src"] # used to find includes, "#" means always absolute to build-root
|
||
, CPPDEFINES=['LUMIERA_VERSION='+VERSION ] # note: it's a list to append further defines
|
||
, CCFLAGS='-Wall -Wextra -Wformat-security'
|
||
, CXXFLAGS='-std=gnu++23 -Wno-enum-compare'
|
||
, CFLAGS='-std=gnu99'
|
||
)
|
||
env.Append(LINKFLAGS='-Wl,--no-undefined') # require every dependency is given on link, in the right order
|
||
env.Append(LINKFLAGS='-Wl,--as-needed') # by default only link against dependencies actually needed to resolve symbols
|
||
handleVerboseMessages(env)
|
||
handleNoBugSwitches(env)
|
||
|
||
env.Append(CPPDEFINES = '_GNU_SOURCE')
|
||
appendCppDefine(env,'DEBUG','DEBUG', 'NDEBUG')
|
||
# appendCppDefine(env,'OPENGL','USE_OPENGL')
|
||
appendVal(env,'ARCHFLAGS','CCFLAGS') # for both C and C++
|
||
appendVal(env,'OPTIMIZE', 'CCFLAGS', val=' -O3')
|
||
appendVal(env,'DEBUG', 'CCFLAGS', val=' -ggdb')
|
||
|
||
# NOTE: could define optional compile features here....
|
||
|
||
Options.prepareOptionsHelp(buildVars,env)
|
||
buildVars.Save(OPTCACHE, env)
|
||
return env
|
||
|
||
|
||
|
||
def appendCppDefine(env,var,cppVar, elseVal=''):
|
||
if env[var]:
|
||
env.Append(CPPDEFINES = env.subst(cppVar) )
|
||
elif elseVal:
|
||
env.Append(CPPDEFINES = env.subst(elseVal))
|
||
|
||
def appendVal(env,var,targetVar,val=None):
|
||
if env[var]:
|
||
env.Append( **{targetVar: env.subst(val) or env[var]})
|
||
|
||
|
||
def handleNoBugSwitches(env):
|
||
""" set the build level for NoBug.
|
||
Release builds imply no DEBUG
|
||
whereas ALPHA and BETA require DEBUG
|
||
"""
|
||
level = env['BUILDLEVEL']
|
||
if level in ['ALPHA', 'BETA']:
|
||
if not env['DEBUG']:
|
||
print('Warning: NoBug ALPHA or BETA builds requires DEBUG=yes, switching DEBUG on!')
|
||
env.Replace( DEBUG = 1 )
|
||
env.Append(CPPDEFINES = 'EBUG_'+level)
|
||
elif level == 'RELEASE':
|
||
env.Replace( DEBUG = 0 )
|
||
|
||
|
||
def handleVerboseMessages(env):
|
||
""" toggle verbose build output """
|
||
if not env['VERBOSE']:
|
||
# SetOption('silent', True)
|
||
env['CCCOMSTR'] = env['SHCCCOMSTR'] = " Compiling $SOURCE"
|
||
env['CXXCOMSTR'] = env['SHCXXCOMSTR'] = " Compiling++ $SOURCE"
|
||
env['LINKCOMSTR'] = " Linking --> $TARGET"
|
||
env['LDMODULECOMSTR'] = " creating module [ $TARGET ]"
|
||
|
||
|
||
|