1[![Build Status](https://travis-ci.org/tomba/kmsxx.svg?branch=master)](https://travis-ci.org/tomba/kmsxx) 2 3# kms++ - C++ library for kernel mode setting 4 5kms++ is a C++11 library for kernel mode setting. 6 7Also included are some simple utilities for KMS and python bindings for kms++. 8 9## Utilities 10 11- kmstest - set modes and planes and show test pattern on crtcs/planes, and test page flips 12- kmsprint - print information about DRM objects 13- kmsview - view raw images 14- kmscube - rotating 3D cube on crtcs/planes 15- kmscapture - show captured frames from a camera on screen 16 17## Dependencies: 18 19- libdrm 20- Python 3.x (for python bindings) 21 22## Build instructions: 23 24To build the Python bindings you need to set up the git-submodule for pybind11: 25 26``` 27git submodule update --init 28``` 29 30And to compile: 31 32``` 33$ mkdir build 34$ cd build 35$ cmake .. 36$ make -j4 37``` 38 39## Cross compiling instructions: 40 41Directions for cross compiling depend on your environment. 42 43These are for mine with buildroot: 44 45``` 46$ mkdir build 47$ cd build 48$ cmake -DCMAKE_TOOLCHAIN_FILE=<buildrootpath>/output/host/usr/share/buildroot/toolchainfile.cmake .. 49$ make -j4 50``` 51 52Your environment may provide similar toolchainfile. If not, you can create a toolchainfile of your own, something along these lines: 53 54``` 55SET(CMAKE_SYSTEM_NAME Linux) 56 57SET(BROOT "<buildroot>/output/") 58 59# specify the cross compiler 60SET(CMAKE_C_COMPILER ${BROOT}/host/usr/bin/arm-buildroot-linux-gnueabihf-gcc) 61SET(CMAKE_CXX_COMPILER ${BROOT}/host/usr/bin/arm-buildroot-linux-gnueabihf-g++) 62 63# where is the target environment 64SET(CMAKE_FIND_ROOT_PATH ${BROOT}/target ${BROOT}/host) 65 66SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) 67SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 68SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 69``` 70 71## Build options 72 73You can use the following cmake flags to control the build. Use `-DFLAG=VALUE` to set them. 74 75Option name | Values | Default | Notes 76--------------------- | ------------- | --------------- | -------- 77CMAKE_BUILD_TYPE | Release/Debug | Release | 78BUILD_SHARED_LIBS | ON/OFF | OFF | 79KMSXX_ENABLE_PYTHON | ON/OFF | ON | 80KMSXX_ENABLE_KMSCUBE | ON/OFF | OFF | 81KMSXX_PYTHON_VERSION | python3/python2 | python3;python2 | Name of the python pkgconfig file 82 83## Env variables 84 85You can use the following runtime environmental variables to control the behavior of kms++. 86 87Variable | Description 88--------------------------------- | ------------- 89KMSXX_DISABLE_UNIVERSAL_PLANES | Set to disable the use of universal planes 90KMSXX_DISABLE_ATOMIC | Set to disable the use of atomic modesetting 91 92## Python notes 93 94You can run the python code directly from the build dir by defining PYTHONPATH env variable. For example: 95 96``` 97PYTHONPATH=build/py py/tests/hpd.py 98 99``` 100