Skip to content

How Rebaze Works

Rebaze analyzes your existing build system and generates equivalent Bazel build files.

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Analyze │ ──▶ │ Parse │ ──▶ │ Transform │ ──▶ │ Generate │
│ │ │ │ │ │ │ │
│ Detect build│ │ Extract │ │ Map deps, │ │ Write Bazel │
│ system │ │ targets │ │ filter │ │ files │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘

Rebaze detects the build system by looking for marker files:

FileBuild System
CMakeLists.txtCMake
build.gradle / build.gradle.ktsGradle
pom.xmlMaven
MakefileMake
Cargo.tomlCargo

The CMake parser handles:

  • Commands: project(), add_executable(), add_library(), etc.
  • Variables: ${VAR}, $ENV{VAR}, $CACHE{VAR}
  • Control flow: if(), foreach(), function(), macro()
  • Generator expressions: $<TARGET_FILE:...>

Two parsing modes:

  1. CMakeLists.txt parsing - Analyzes CMake files directly
  2. cmake-file-api - Uses CMake’s File API for exact build info

Extracts:

  • Project structure from settings.gradle
  • Dependencies from build.gradle
  • Plugins and versions
  • Source sets
  1. Maps dependencies - Translates CMake/Gradle deps to Bazel targets
  2. Filters artifacts - Removes platform-specific files and flags
  3. Resolves includes - Converts include paths to Bazel format
  4. Groups sources - Organizes files into appropriate targets
CMake Bazel
───── ─────
find_package(ZLIB) ──▶ @zlib
target_link_libraries( deps = [
mylib "@zlib",
ZLIB::ZLIB "@openssl//:ssl",
OpenSSL::SSL ]
)

Rebaze filters out:

  • Platform-specific sources (.rc, .plist)
  • Build-type defines (_DEBUG, NDEBUG)
  • Compiler-specific flags (/W4, -march=native)
  • System include paths (/usr/include)
FilePurpose
MODULE.bazelModule definition, dependencies
BUILD.bazelBuild targets
.bazelversionPins Bazel version
.bazelrcBuild configuration
FilePurpose
third_party/BUILD.bazelDependency aliases
third_party/config.bzlStrategy configuration
GeneratorDescription
nativePure Rust implementation, always available
bazelleUses gazelle_cc for complex projects
autoPrefers bazelle if available
rebaze-cli Command-line interface
rebaze-core Orchestration, shared logic
├── rebaze-cmake CMake parser
├── rebaze-cmake-file-api CMake File API
├── rebaze-gradle Gradle parser
rebaze-bazel Bazel file generator
rebaze-starlark Starlark AST/serialization