@startuml start :Parse STB config file and operator config for syntax errors; :Determine arch of selected device; if (Image contains suitable manifest for platform arch?) then (Yes) :Determine image type (""imageLayout"" / ""image"" / ""imageZip""); :Unpack OCI image based on manifest for required platform/arch; :Read application requirements and STB platform config; if (Target STB can support app?) then (Yes) :Begin lib matching algorithm; :Run ""ldd"" on application to find dependencies; note left How would we manually loaded libs with ""dlopen"" - ldd won't show these? end note repeat if (Platform already contains same (major) version of library?) then (Yes) :Add bind mount for library to ""config.json""; :Delete library from ""rootfs"" directory in bundle; else (No) :Do nothing - use version in rootfs; endif repeat while (More dependencies?) is (Yes) :Add bind mounts for platform specific GPU libraries; :Add additional bind mounts specified in platform config; :Add bind mounts for any devices in platform config; :Add devices to ""devices"" array in config; :Add environment variables specified in platform/operator config; :Process application capabilites; :Add ""rdkPlugins"" section to the config accordingly; :Write any remaining config sections; :Create tarball of ""rootfs"" directory and ""config.json"" file; stop else (No) #PaleVioletRed:ReturnError ==== Platformcannotsupportapplication Apprequiressomethingplatformcannotprovide; stop endif else (No) #PaleVioletRed:ReturnError ==== Appdoesnotsupporttargetarchitecture; stop endif @enduml |