# How to compile on a Raspberry Pi ### Install prerequisites sudo apt-get install cmake sudo apt remove libvulkan1 vulkan-headers The Vulkan-Loader version distributed with Raspbian (1.1.97-2) does not support the required performance counters. ### Clone, build, and install RPi VK Driver git clone https://github.com/Yours3lf/rpi-vk-driver.git cd rpi-vk-driver mkdir build && cd build cmake .. make sudo make install # How to run tests on a Raspberry Pi ### Prerequisites * Enable Full Desktop KDM using `sudo raspi-config` under Advanced if you haven't already * Reboot into CLI using `sudo raspi-config` ### Clone, build, and run tests git clone https://github.com/Yours3lf/rpi-vk-driver.git cd rpi-vk-driver mkdir build && cd build cmake .. make install make test ### Gotchas * You cannot run tests from the desktop environment as there can only be one DRM-Master. Tests can only be run after rebooting into CLI. # How to cross-compile on Linux desktop git clone https://github.com/Yours3lf/rpi-vk-driver.git cd rpi-vk-driver git clone https://github.com/raspberrypi/tools.git export PATH=`pwd`/tools/arm-bcm2708/arm-linux-gnueabihf/bin:$PATH mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../gcc.toolchain.cmake -DCMAKE_STAGING_PREFIX=./out/usr/local make install -j # How to cross-compile on Linux desktop for specific device git clone https://github.com/Yours3lf/rpi-vk-driver.git cd rpi-vk-driver git clone https://github.com/raspberrypi/tools.git export PATH=`pwd`/tools/arm-bcm2708/arm-linux-gnueabihf/bin:$PATH mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../gcc.toolchain.cmake -DCMAKE_STAGING_PREFIX=./out/usr/local -DRPI_ARCH=armv8-a make -j make package cmake .. -DRPI_ARCH=armv7-a make -j make package cmake .. -DRPI_ARCH=armv6z make -j make package # How to generate Debian package git clone https://github.com/Yours3lf/rpi-vk-driver.git cd rpi-vk-driver mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../gcc.toolchain.cmake make package -j # How to check contents of Debian package dpkg -c rpi-vulkan-driver-1.0.0-1.2.141.Linux-arm.deb # Using gcc.toolchain.cmake In order to use this toolchain file, it is passed in to CMake as a variable. cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../gcc.toolchain.cmake If you pass variables before the toolchain, they will be available in the toolchain file. Here the updated TARGET_SYSROOT value is available for use in the toolchain file. cmake .. -DTARGET_SYSROOT=/mnt/rootfs -DCMAKE_TOOLCHAIN_FILE=`pwd`/../gcc.toolchain.cmake ## TOOLCHAIN_TRIPLE The toolchain will use this value to determine the toolchain path. If you are using the default `arm-linux-gnueabihf` value, the bin folder of this toolchain needs to be added to your path. ## TARGET_SYSROOT If using the default Raspberry Pi toolchain it will use the sysroot from this toolchain. If you use a different toolchain, you will need to update this variable. `-DSYSROOT=/mnt/rootfs` ## RPI_ARCH `RPI_ARCH` | RPi ---|:---: `armv8-a` | 2B 1.2, 3B, 3B+ `armv7-a` | 2B `armv8` | 3A+ `armv6z` | 1A, 1A+, 1B, Zero 1.2, Zero 1.3, Zero W The default value is `armv8-a` # CMAKE Variables ### BUILD_NUMBER For CI system. Default is `1.0.0` ### CMAKE_BUILD_TYPE Sets the build type. Options are `Debug`, `Release`, or `MinSizeRel`. Default is `Release` ### TARGET_SYSROOT Point to the target sysroot. ### CMAKE_STAGING_PREFIX The sysroot staging path. See Linux Cross-compile example above for usage. Default value is "" ### CMAKE_INSTALL_PREFIX This is what the prefix should be when installed on the target sysroot. The default for this value on Linux is `/usr/local`. ### BUILD_TESTING Enables building Unit Test Cases. If Cross-compiling, `make test` will not run any tests. Default is `ON` ### VULKAN_VERSION Selects the sdk version for Vulkan-Headers, and Vulkan-Loader. Default branch is `sdk-1.2.141` ### BUILD_WSI_XCB_SUPPORT Builds the Vulkan-Loader with XCB Support. Default is `OFF` ### BUILD_WSI_XLIB_SUPPORT Builds the Vulkan-Loader with XLIB Support. Default is `OFF` ### BUILD_WSI_WAYLAND_SUPPORT Builds the Vulkan-Loader with Wayland Support. Default is `OFF`