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 " ] )