mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-17 15:02:06 +08:00
99b0276913
This commit introduces a conditional compilation for 'sunnypilot' within the SConscript file. It also adds a new 'sp_priv_text.cc' file for 'sunnypilot' and performs a significant cleanup on the existing 'text.cc' file, removing unneeded commands. This change helps to customize the build process based on the specific feature flags such as 'sunnypilot'.
134 lines
5.8 KiB
Python
134 lines
5.8 KiB
Python
import os
|
|
import json
|
|
Import('qt_env', 'arch', 'common', 'messaging', 'visionipc', 'transformations')
|
|
|
|
base_libs = [common, messaging, visionipc, transformations,
|
|
'm', 'OpenCL', 'ssl', 'crypto', 'pthread'] + qt_env["LIBS"]
|
|
|
|
if arch == 'larch64':
|
|
base_libs.append('EGL')
|
|
|
|
maps = arch in ['larch64', 'aarch64', 'x86_64']
|
|
|
|
if arch == "Darwin":
|
|
del base_libs[base_libs.index('OpenCL')]
|
|
qt_env['FRAMEWORKS'] += ['OpenCL']
|
|
|
|
# FIXME: remove this once we're on 5.15 (24.04)
|
|
qt_env['CXXFLAGS'] += ["-Wno-deprecated-declarations"]
|
|
|
|
sp_widgets_src = []
|
|
sp_maps_widgets_src = []
|
|
sp_qt_src = []
|
|
if GetOption('sunnypilot'):
|
|
SConscript(['sunnypilot/SConscript'])
|
|
Import('sp_widgets_src', 'sp_maps_widgets_src', 'sp_qt_src')
|
|
|
|
qt_util = qt_env.Library("qt_util", ["#selfdrive/ui/qt/api.cc", "#selfdrive/ui/qt/util.cc"], LIBS=base_libs)
|
|
widgets_src = ["ui.cc", "qt/widgets/input.cc", "qt/widgets/wifi.cc",
|
|
"qt/widgets/ssh_keys.cc", "qt/widgets/toggle.cc", "qt/widgets/controls.cc",
|
|
"qt/widgets/offroad_alerts.cc", "qt/widgets/prime.cc", "qt/widgets/keyboard.cc",
|
|
"qt/widgets/scrollview.cc", "qt/widgets/cameraview.cc", "#third_party/qrcode/QrCode.cc",
|
|
"qt/request_repeater.cc", "qt/qt_window.cc", "qt/network/networking.cc", "qt/network/wifi_manager.cc"] + sp_widgets_src
|
|
|
|
qt_env['CPPDEFINES'] = ["SUNNYPILOT"] if GetOption('sunnypilot') else []
|
|
if maps:
|
|
base_libs += ['QMapLibre']
|
|
widgets_src += ["qt/maps/map_helpers.cc", "qt/maps/map_settings.cc", "qt/maps/map.cc", "qt/maps/map_panel.cc",
|
|
"qt/maps/map_eta.cc", "qt/maps/map_instructions.cc"] + sp_maps_widgets_src
|
|
qt_env['CPPDEFINES'] += ["ENABLE_MAPS"]
|
|
|
|
widgets = qt_env.Library("qt_widgets", widgets_src, LIBS=base_libs)
|
|
Export('widgets')
|
|
qt_libs = [widgets, qt_util] + base_libs
|
|
|
|
qt_src = ["main.cc", "qt/sidebar.cc", "qt/body.cc", "qt/offroad_home.cc",
|
|
"qt/window.cc", "qt/home.cc", "qt/offroad/settings.cc",
|
|
"qt/offroad/software_settings.cc", "qt/offroad/onboarding.cc",
|
|
"qt/offroad/driverview.cc", "qt/offroad/experimental_mode.cc",
|
|
"qt/onroad/onroad_home.cc", "qt/onroad/annotated_camera.cc",
|
|
"qt/onroad/buttons.cc", "qt/onroad/alerts.cc"] + sp_qt_src
|
|
|
|
# build translation files
|
|
with open(File("translations/languages.json").abspath) as f:
|
|
languages = json.loads(f.read())
|
|
translation_sources = [f"#selfdrive/ui/translations/{l}.ts" for l in languages.values()]
|
|
translation_targets = [src.replace(".ts", ".qm") for src in translation_sources]
|
|
lrelease_bin = 'third_party/qt5/larch64/bin/lrelease' if arch == 'larch64' else 'lrelease'
|
|
|
|
lupdate = qt_env.Command(translation_sources, qt_src + widgets_src, "selfdrive/ui/update_translations.py")
|
|
lrelease = qt_env.Command(translation_targets, translation_sources, f"{lrelease_bin} $SOURCES")
|
|
qt_env.Depends(lrelease, lupdate)
|
|
qt_env.NoClean(translation_sources)
|
|
qt_env.Precious(translation_sources)
|
|
qt_env.NoCache(lupdate)
|
|
|
|
# create qrc file for compiled translations to include with assets
|
|
translations_assets_src = "#selfdrive/assets/translations_assets.qrc"
|
|
with open(File(translations_assets_src).abspath, 'w') as f:
|
|
f.write('<!DOCTYPE RCC><RCC version="1.0">\n<qresource>\n')
|
|
f.write('\n'.join([f'<file alias="{l}">../ui/translations/{l}.qm</file>' for l in languages.values()]))
|
|
f.write('\n</qresource>\n</RCC>')
|
|
|
|
# build assets
|
|
assets = "#selfdrive/assets/assets.cc"
|
|
assets_src = "#selfdrive/assets/assets.qrc"
|
|
qt_env.Command(assets, [assets_src, translations_assets_src], f"rcc $SOURCES -o $TARGET")
|
|
qt_env.Depends(assets, Glob('#selfdrive/assets/*', exclude=[assets, assets_src, translations_assets_src, "#selfdrive/assets/assets.o"]) + [lrelease])
|
|
asset_obj = qt_env.Object("assets", assets)
|
|
|
|
qt_env.SharedLibrary("qt/python_helpers", ["qt/qt_window.cc"], LIBS=qt_libs)
|
|
|
|
# spinner and text window
|
|
text_cc_path = "qt/text.cc" if not GetOption('sunnypilot') else "sunnypilot/qt/sp_priv_text.cc"
|
|
qt_env.Program("_text", [text_cc_path], LIBS=qt_libs)
|
|
qt_env.Program("_spinner", ["qt/spinner.cc"], LIBS=qt_libs)
|
|
|
|
# build main UI
|
|
qt_env.Program("ui", qt_src + [asset_obj], LIBS=qt_libs)
|
|
if GetOption('extras'):
|
|
qt_src.remove("main.cc") # replaced by test_runner
|
|
qt_env.Program('tests/test_translations', [asset_obj, 'tests/test_runner.cc', 'tests/test_translations.cc'] + qt_src, LIBS=qt_libs)
|
|
qt_env.Program('tests/ui_snapshot', [asset_obj, "tests/ui_snapshot.cc"] + qt_src, LIBS=qt_libs)
|
|
|
|
|
|
if GetOption('extras') and arch in ['larch64']:
|
|
# setup and factory resetter
|
|
qt_env.Program("qt/setup/reset", ["qt/setup/reset.cc"], LIBS=qt_libs)
|
|
qt_env.Program("qt/setup/setup", ["qt/setup/setup.cc", asset_obj],
|
|
LIBS=qt_libs + ['curl', 'common', 'json11'])
|
|
|
|
# build updater UI
|
|
qt_env.Program("qt/setup/updater", ["qt/setup/updater.cc", asset_obj], LIBS=qt_libs)
|
|
|
|
# build mui
|
|
qt_env.Program("mui", ["mui.cc"], LIBS=qt_libs)
|
|
|
|
# build installers
|
|
senv = qt_env.Clone()
|
|
senv['LINKFLAGS'].append('-Wl,-strip-debug')
|
|
|
|
release = "release3"
|
|
installers = [
|
|
("openpilot", release),
|
|
("openpilot_test", f"{release}-staging"),
|
|
("openpilot_nightly", "nightly"),
|
|
("openpilot_internal", "master"),
|
|
]
|
|
|
|
cont = senv.Command(f"installer/continue_openpilot.o", f"installer/continue_openpilot.sh",
|
|
"ld -r -b binary -o $TARGET $SOURCE")
|
|
for name, branch in installers:
|
|
d = {'BRANCH': f"'\"{branch}\"'"}
|
|
if "internal" in name:
|
|
d['INTERNAL'] = "1"
|
|
|
|
obj = senv.Object(f"installer/installers/installer_{name}.o", ["installer/installer.cc"], CPPDEFINES=d)
|
|
f = senv.Program(f"installer/installers/installer_{name}", [obj, cont], LIBS=qt_libs)
|
|
# keep installers small
|
|
assert f[0].get_size() < 350*1e3
|
|
|
|
# build watch3
|
|
if arch in ['x86_64', 'aarch64', 'Darwin'] or GetOption('extras'):
|
|
qt_env.Program("watch3", ["watch3.cc"], LIBS=qt_libs + ['common', 'json11', 'msgq', 'visionipc'])
|