# Firebase Cpp Builder

> Instructions and workflows for building the Firebase C++ SDK natively. Use this skill when you need to compile the C++ SDK per-product (e.g., auth, database) across different platforms (Desktop, iOS, Android).

- Skill: `firebase/firebase-cpp-builder` (Agent Skill)
- Install (CLI): `npx skillmds@latest add firebase/firebase-cpp-builder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/firebase/firebase-cpp-builder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: firebase (https://skillmd.com/u/firebase)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/firebase/firebase-cpp-builder

---


# Building the Firebase C++ SDK

This skill provides instructions on how to build the Firebase C++ SDK directly
from source, specifically tailored for building individual products (like
`firebase_auth`, `firebase_database`, etc.).

## Prerequisites

Before building, ensure that your Python environment is set up with all required dependencies, especially if you plan to use helper scripts:

- **Python Dependencies**: Run `pip install -r scripts/gha/python_requirements.txt` to install required libraries (such as `attrs`, `absl-py`, etc.).

## 1. Desktop Builds (Mac, Linux, Windows)

The easiest way to build for Desktop is to use the Python helper script from the
repository root:

```bash
python3 scripts/gha/build_desktop.py -a <arch> --build_dir <dir>
```

_(Plenty more options: run `python3 scripts/gha/build_desktop.py --help` for
info.)_

Alternatively, you can build manually with CMake. The build process will
automatically download necessary dependencies.

```bash
mkdir desktop_build
cd desktop_build
cmake ..
cmake --build . --target firebase_<product> -j
```

_Example: `cmake --build . --target firebase_auth -j`_

## 2. iOS Builds

For iOS, you can use the convenience script from the repository root:

```bash
./build_scripts/ios/build.sh -b ios_build_dir -s .
```

_(Run `./build_scripts/ios/build.sh -h` for more options.)_

Alternatively, you can use CMake's native Xcode generator manually. Ensure you
have CocoaPods installed if building products that depend on iOS SDK Pods.

```bash
mkdir ios_build
cd ios_build
cmake .. -G Xcode -DCMAKE_SYSTEM_NAME=iOS
cmake --build . --target firebase_<product> -j
```

Alternatively, you can build XCFrameworks using the helper script:

```bash
python3 scripts/gha/build_ios_tvos.py -s . -b ios_tvos_build
```

## 3. Android Builds

For Android, use the convenience script from the repository root:

```bash
./build_scripts/android/build.sh android_build_dir .
```

_(You can also specify an STL variant with the 3rd parameter. Run the script
without any parameters to see the usage.)_

Alternatively, when building the Firebase C++ SDK manually for Android, the
repository uses a Gradle wrapper where each product has its own subproject.

To build a specific product's AARs, run the gradle build task for that module:

```bash
./gradlew :<product>:build
```

_Example: `./gradlew :auth:build` or `./gradlew :database:build`_

Note that as part of the build process, each library generates a ProGuard file
in its build directory (e.g., `<product>/build/<product>.pro`).

## CMake Target Naming Convention

When using CMake directly (for Desktop or iOS/tvOS), the targets are
consistently named `firebase_<product>`.

Common targets include:

- `firebase_app`
- `firebase_analytics`
- `firebase_auth`
- `firebase_database`
- `firebase_firestore`
- `firebase_functions`
- `firebase_messaging`
- `firebase_remote_config`
- `firebase_storage`

## Product Naming Disambiguation (`firebase_auth` vs `auth`)

Different build tools use different naming conventions for products in this repository:

- **CMake Targets (Desktop/iOS)**: Typically prefixed with `firebase_` (e.g., `firebase_auth`).
- **Gradle Subprojects (Android)**: Typically use the raw module name (e.g., `:auth:build`).
- **Python Scripts** (e.g., `build_desktop.py`, `build_testapps.py`): Typically use the raw module name (e.g., `--t auth`).

> [!TIP]
> If you are unsure about the exact product name or supported flags, run Python scripts with `--help` (e.g., `build_desktop.py --help`). For shell scripts, run without parameters (Android) or with `-h` (iOS) to see usage.

