Skip to content

timvpGoogle/ninja-to-soong

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

429 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ninja to Soong CI badge

ninja-to-soong is a project to generate Soong files (Android.bp) for the Android build system.

Legal

ninja-to-soong is licensed under the terms of the Apache 2.0 license

How does it work?

  1. ninja-to-soong generates Ninja files using either:
  2. ninja-to-soong generates Soong files using Ninja files.

Dependencies

Using ninja-to-soong

<ninja-to-soong> $ cargo run --release -- --aosp-path <path> <project1> <project2>

Options

  • -p, --aosp-path <path>: Path to Android tree
  • -e, --ext-proj-path <path>: Path to external project rust file
  • -C, --clean-tmp: Remove the temporary directory before running
  • -c, --clean-gen-ninja: Remove selected projects old build directories before running
  • -a, --copy-to-aosp: Copy generated Soong files into the Android tree
  • -s, --skip-build: Skip build step
  • -S, --skip-gen-ninja: Skip generation of Ninja files
  • -h, --help: Display the help and exit

Environment variables

  • N2S_ANGLE_PATH: Path to angle sources (default: <aosp-path>/external/angle)
  • N2S_NDK: Android NDK (default: android-ndk-r27d)
  • N2S_NDK_PATH: Path to Android NDK (default: temporary directory)
  • N2S_TMP_PATH: Path used by ninja-to-soong to store its temporary directories (default: std::env::temp_dir())

Supported projects

Supported projects are not supposed to work with any version of the project/Android. They have been tested with the project version in the corresponding checkout.sh script (used in continuous integration) & Android top-of-tree (not publicly available) at the time of submission/update of the checkout.sh script.

For any other version, supported projects are expected to work, but might require slight changes.

Project Ninja Generator Targets
angle (WIP) GN libEGL_angle.so, libGLESv2_angle.so, libGLESv1_CM_angle.so
clpeak CMake clpeak
clspv CMake clvk dependencies
clvk CMake libclvk.so
fwupd (WIP) Meson fwupdmgr & fwupd-binder
libclc CMake clspv dependencies
llvm-project CMake clvk, clspv & libclc dependencies
media-driver CMake libiHD_drv_video.so
mesa meson libvulkan_${VENDOR}.so
OpenCL-CTS CMake Every binary in test_conformance/opencl_conformance_tests_full.csv
OpenCL-ICD-Loader CMake libOpenCL.so
SPIRV-Tools CMake clvk & OpenCL-CTS dependencies
SPIRV-Headers CMake clspv, OpenCL-CTS & SPIRV-Tools dependencies
vkoverhead Meson vkoverhead

Adding a project

To add a project, create a <project>.rs implementing the Project trait under the project folder.

Then add the project in define_ProjectId! in project.rs.

The following feature can be used to output debug information when writting a new project:

<ninja-to-soong> $ cargo run --release --features debug_project -- --aosp-path <path> <new_project>

Every code leading to a change in the generated Ninja files should be stored under <ninja-to-soong>/scripts/<project>. For most project, it consists into one single gen-ninja.sh file.

External project

ninja-to-soong is able to take a external rust project file, compile it and link with it at runtime.

This is useful for project where the configuration file cannot be shared upstream for example, or when a project prefer to have the configuration file hosted in the project repository.

An example of such a configuration file can be found here

The important points are:

  • Add ninja-to-soong crate: extern crate ninja_to_soong;, and use all modules needed for the project.
  • Expose a get_project function without mangling:
#[no_mangle]
pub fn get_project() -> Box<dyn Project>

Then the project can be run with the following command:

<ninja-to-soong> $ cargo run --release -- --ext-proj-path <path_to_rust_file>

Tests

ninja-to-soong uses github actions to check that changes do not bring regression. It checks that the generated files match their reference (located in the tests folder).

Each project in the tests folder contains the following files:

  • Android.bp.n2s: the reference file to generate
  • checkout.sh: a script to checkout the repository in the CI

Modification to checkout.sh or anything in the scripts/<project> directory trigger the generation of Ninja files in the CI, otherwise it uses the cached files from a previous CI run.

If you want more information take a look at the github action script

About

Generate Soong files from Ninja

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Rust 92.7%
  • Shell 7.3%