You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
4.5 KiB
98 lines
4.5 KiB
import subprocess
|
|
import os
|
|
|
|
Import('env', 'arch', 'common', 'messaging', 'visionipc', 'replay_lib', 'cereal')
|
|
|
|
qt_env = env.Clone()
|
|
qt_modules = ["Widgets", "Gui", "Core", "Network", "Concurrent", "DBus", "Xml"]
|
|
|
|
qt_libs = []
|
|
if arch == "Darwin":
|
|
brew_prefix = subprocess.check_output(['brew', '--prefix'], encoding='utf8').strip()
|
|
qt_env['QTDIR'] = f"{brew_prefix}/opt/qt@5"
|
|
qt_dirs = [
|
|
os.path.join(qt_env['QTDIR'], "include"),
|
|
]
|
|
qt_dirs += [f"{qt_env['QTDIR']}/include/Qt{m}" for m in qt_modules]
|
|
qt_env["LINKFLAGS"] += ["-F" + os.path.join(qt_env['QTDIR'], "lib")]
|
|
qt_env["FRAMEWORKS"] += [f"Qt{m}" for m in qt_modules] + ["OpenGL"]
|
|
qt_env.AppendENVPath('PATH', os.path.join(qt_env['QTDIR'], "bin"))
|
|
else:
|
|
qt_install_prefix = subprocess.check_output(['qmake', '-query', 'QT_INSTALL_PREFIX'], encoding='utf8').strip()
|
|
qt_install_headers = subprocess.check_output(['qmake', '-query', 'QT_INSTALL_HEADERS'], encoding='utf8').strip()
|
|
|
|
qt_env['QTDIR'] = qt_install_prefix
|
|
qt_dirs = [
|
|
f"{qt_install_headers}",
|
|
]
|
|
|
|
qt_gui_path = os.path.join(qt_install_headers, "QtGui")
|
|
qt_gui_dirs = [d for d in os.listdir(qt_gui_path) if os.path.isdir(os.path.join(qt_gui_path, d))]
|
|
qt_dirs += [f"{qt_install_headers}/QtGui/{qt_gui_dirs[0]}/QtGui", ] if qt_gui_dirs else []
|
|
qt_dirs += [f"{qt_install_headers}/Qt{m}" for m in qt_modules]
|
|
|
|
qt_libs = [f"Qt5{m}" for m in qt_modules]
|
|
if arch == "larch64":
|
|
qt_libs += ["GLESv2", "wayland-client"]
|
|
qt_env.PrependENVPath('PATH', Dir("#third_party/qt5/larch64/bin/").abspath)
|
|
elif arch != "Darwin":
|
|
qt_libs += ["GL"]
|
|
qt_env['QT3DIR'] = qt_env['QTDIR']
|
|
qt_env.Tool('qt3')
|
|
|
|
qt_env['CPPPATH'] += qt_dirs + ["#third_party/qrcode"]
|
|
qt_flags = [
|
|
"-D_REENTRANT",
|
|
"-DQT_NO_DEBUG",
|
|
"-DQT_WIDGETS_LIB",
|
|
"-DQT_GUI_LIB",
|
|
"-DQT_CORE_LIB",
|
|
"-DQT_MESSAGELOGCONTEXT",
|
|
]
|
|
qt_env['CXXFLAGS'] += qt_flags
|
|
qt_env['CXXFLAGS'] += ["-Wno-deprecated-declarations"]
|
|
qt_env['LIBPATH'] += ['#selfdrive/ui', ]
|
|
qt_env['LIBS'] = qt_libs
|
|
|
|
base_frameworks = qt_env['FRAMEWORKS']
|
|
base_libs = [common, messaging, cereal, visionipc, 'm', 'ssl', 'crypto', 'pthread'] + qt_env["LIBS"]
|
|
|
|
if arch == "Darwin":
|
|
base_frameworks.append('OpenCL')
|
|
base_frameworks.append('QtCharts')
|
|
base_frameworks.append('QtSerialBus')
|
|
else:
|
|
base_libs.append('OpenCL')
|
|
base_libs.append('Qt5Charts')
|
|
base_libs.append('Qt5SerialBus')
|
|
|
|
qt_libs = base_libs
|
|
|
|
cabana_env = qt_env.Clone()
|
|
|
|
cabana_libs = [cereal, messaging, visionipc, replay_lib, 'avutil', 'avcodec', 'avformat', 'bz2', 'zstd', 'curl', 'yuv', 'usb-1.0'] + qt_libs
|
|
opendbc_path = '-DOPENDBC_FILE_PATH=\'"%s"\'' % (cabana_env.Dir("../../opendbc/dbc").abspath)
|
|
cabana_env['CXXFLAGS'] += [opendbc_path]
|
|
|
|
# build assets
|
|
assets = "assets/assets.cc"
|
|
assets_src = "assets/assets.qrc"
|
|
cabana_env.Command(assets, assets_src, f"rcc $SOURCES -o $TARGET")
|
|
cabana_env.Depends(assets, Glob('/assets/*', exclude=[assets, assets_src, "assets/assets.o"]))
|
|
|
|
cabana_lib = cabana_env.Library("cabana_lib", ['mainwin.cc', 'streams/socketcanstream.cc', 'streams/pandastream.cc', 'streams/devicestream.cc', 'streams/livestream.cc', 'streams/abstractstream.cc', 'streams/replaystream.cc', 'binaryview.cc', 'historylog.cc', 'videowidget.cc', 'signalview.cc',
|
|
'streams/routes.cc', 'dbc/dbc.cc', 'dbc/dbcfile.cc', 'dbc/dbcmanager.cc',
|
|
'utils/export.cc', 'utils/util.cc', 'utils/elidedlabel.cc', 'utils/api.cc',
|
|
'chart/chartswidget.cc', 'chart/chart.cc', 'chart/signalselector.cc', 'chart/tiplabel.cc', 'chart/sparkline.cc',
|
|
'commands.cc', 'messageswidget.cc', 'streamselector.cc', 'settings.cc', 'panda.cc',
|
|
'cameraview.cc', 'detailwidget.cc', 'tools/findsimilarbits.cc', 'tools/findsignal.cc', 'tools/routeinfo.cc'], LIBS=cabana_libs, FRAMEWORKS=base_frameworks)
|
|
cabana_env.Program('cabana', ['cabana.cc', cabana_lib, assets], LIBS=cabana_libs, FRAMEWORKS=base_frameworks)
|
|
|
|
if GetOption('extras'):
|
|
cabana_env.Program('tests/test_cabana', ['tests/test_runner.cc', 'tests/test_cabana.cc', cabana_lib], LIBS=[cabana_libs])
|
|
|
|
output_json_file = 'tools/cabana/dbc/car_fingerprint_to_dbc.json'
|
|
generate_dbc = cabana_env.Command('#' + output_json_file,
|
|
['dbc/generate_dbc_json.py'],
|
|
"python3 tools/cabana/dbc/generate_dbc_json.py --out " + output_json_file)
|
|
cabana_env.Depends(generate_dbc, ["#common", '#opendbc_repo', "#cereal", "#msgq_repo"])
|
|
|