In order to satisfy dependencies, the recipes must declare what they need to have available during the build process. When an application depends on something to run, it is called a runtime dependency (these are packages necessary on the target in order to guarantee proper functioning). In this case, we don’t need to set the DEPENDS variable but the RDEPENDS variable in a recipe in order to inform BitBake. So in a nutshell,

DEPENDS -> Build Time Dependency
RDEPENDS -> Run Time Dependency

DEPENDS: When a recipe ‘A’ is DEPENDS on recipe ‘B’. In this case, Bitbake first builds recipe ‘B’ and then recipe ‘A’. For example, you need ‘dbus’ to be built before ‘wpa_supplicant’.

RDEPENDS: When a recipe ‘A’ is RDEPENDS on recipe ‘B’. In this case, Bitbake deploys ‘B’ on the target system when it deploys ‘A’. For example, ‘perf’ RDEPENDS on ‘bash’

In other words, DEPENDS are those set of packages that should be available while building package, whereas RDEPENDS are set of packages that should be available during execution of the program.

Build-time dependencies

BitBake uses the DEPENDS variable to manage build-time dependencies. The deptask varflag for a task signifies the task that must complete for each item in DEPENDS before that task can be executed.

Runtime dependencies

BitBake uses the PACKAGES and RDEPENDS variables to manage runtime dependencies. The PACKAGES variable lists all the runtime packages a recipe creates. Each of those packages can have RDEPENDS runtime dependencies. These are packages that must be installed for a given package to run. The rdeptask varflag for a task specifies which tasks must be completed for every runtime dependency before that task can be executed