| commit | 0ac5f1c2ed400593db2a4dfef3c0d02ce029d08a | [log] [tgz] |
|---|---|---|
| author | Gurchetan Singh <[email protected]> | Tue May 30 17:57:43 2023 -0700 |
| committer | Gurchetan Singh <[email protected]> | Wed Jun 07 09:09:56 2023 -0700 |
| tree | 2c1664785359290a6c5002b74d20ec08cca4621d | |
| parent | 29ee21e43ed8e1d469817f91cc6d649a3efa3a1a [diff] |
gfxstream: add meson build
Right now, gfxstream downloads dependencies it needs via CMake
`FetchContent`, and that's generally in-advisable when writing
a package for distribution.
The CMake build also exports libraries and symbols that ideally
should be kept internal to gfxstream (like opengles.cpp symbols).
This is due to AEMU CMake compatibility, but even upstream
QEMU has moved to a meson based system. Meson should work well
on Unix systems, and Windows the standard strategy is to use a
mingw cross-compiler.
This allows gfxstream to be a completely external and versioned
dependency.
Note, tests were not compiled and only Linux has been tested so
far. Also, meson configure -Ddecoders=auto is recommended until
decoder specific code can be further isolated.
BUG=284306280
TEST=Compile using the following options:
(Linux dependencies)
sudo apt-get install libdrm
sudo apt-get install libglm-dev
sudo apt-get install libstb-dev
mkdir aemu-build
(in platform/hardware/google/aemu)
cmake -DAEMU_COMMON_GEN_PKGCONFIG=ON -DAEMU_COMMON_BUILD_CONFIG=gfxstream
-DENABLE_VKCEREAL_TESTS=OFF . ../
make -j && sudo make install
(in gfxstream)
mkdir amd64-build
meson -Ddefault_library=static amd64-build/
ninja -C amd64-build
sudo ninja -C amd64-build/ install
Change-Id: I1722d84e4810ec5e3377797b6951cef4209c278e
Graphics Streaming Kit is a code generator that makes it easier to serialize and forward graphics API calls from one place to another:
Make sure the latest CMake is installed. Make sure the opengl lib is installed. Otherwise, sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev Make sure you are using Clang as your CC and clang++ as yourCXX. Then
mkdir build cd build cmake . ../ make -j24
Unit tests:
make test
Make sure the latest CMake is installed. Make sure Visual Studio 2019 is installed on your system along with all the Clang C++ toolchain components. Then
mkdir build cd build cmake . ../ -A x64 -T ClangCL
A solution file should be generated. Then open the solution file in Visual studio and build the gfxstream_backend target.
Be in the Android build system. Then
m libgfxstream_backend
It then ends up in out/host
This also builds for Android on-device.
libgfxstream_backend.(dll|so|dylib)
Check out the gfxstream-protocols repo at ../../../external/gfxstream-protocols relative to the root directory of this repo, and run the scripts/generate-vulkan-sources.sh script in the gfxstream-protocols root folder.
If you're in an AOSP checkout, this will also modify contents of the guest Vulkan encoder in ../goldfish-opengl.
First, build build/gfxstream-generic-apigen. Then run
scripts/generate-apigen-source.sh
There are a bunch of test executables generated. They require libEGL.so and libGLESv2.so and libvulkan.so to be available, possibly from your GPU vendor or ANGLE, in the $LD_LIBRARY_PATH.
There are a bunch of test executables generated. They require libEGL.dll and libGLESv2.dll and vulkan-1.dll to be available, possibly from your GPU vendor or ANGLE, in the %PATH%.
These are currently not built due to the dependency on system libEGL/libvulkan to run correctly.
CMakeLists.txt: specifies all host-side build targets. This includes all backends along with client/server setups that live only on the host. SomeAndroid.bp: specifies all guest-side build targets for Android:BUILD.gn: specifies all guest-side build targets for Fuchsiabase/: common libraries that are built for both the guest and host. Contains utility code related to synchronization, threading, and suballocation.protocols/: implementations of protocols for various graphics APIs. May contain code generators to make it easy to regen the protocol based on certain things.host-common/: implementations of host-side support code that makes it easier to run the server in a variety of virtual device environments. Contains concrete implementations of auxiliary virtual devices such as Address Space Device and Goldfish Pipe.stream-servers/: implementations of various backends for various graphics APIs that consume protocol. gfxstream-virtio-gpu-renderer.cpp contains a virtio-gpu backend implementation.