Project Flare is a CLO/CAF (CodeLinaro / Code Aurora Forum) based Android Custom ROM. This guide will walk you through bringing up your device for Flare — in simple steps anyone can follow.
No. You do not need an AOSPA tree or any special CLO tree to build Flare.
You can build Flare directly using your existing LineageOS device tree. Some small adaptations are needed, but everything is explained below with references.
The main difference is that LineageOS trees use some AOSP components where CLO uses Qualcomm's QTI CLO ones.
But here's the thing — if you have a Qualcomm device, you're most likely already using QTI components for display, audio, etc. from stock. The one area where LineageOS trees commonly differ is the power HAL:
- LineageOS uses
libperfmgr(Lineage Power HAL) - CLO/Stock uses
QTI Perf HAL
Flare ships both power HALs for your convenience, so you can boot the ROM right away even with the Lineage power HAL. However, it's not ideal to run a CLO ROM long-term with the Lineage power HAL — you'll miss out on a lot of the performance benefits. More on this below.
Start here. The goal is just to get your device to boot Flare.
CLO/CAF does not merge Google's QPR (Quarterly Platform Release) updates. Instead, all QPR features arrive in the next major Android version. This means:
- For Android 16 → use a LineageOS 23.0 tree, not 23.1 or 23.2
- For Android 15 → use a LineageOS 22.0 tree, not 22.1 or 22.2
- And so on for older versions
If you only have a QPR tree (23.1 / 23.2 etc.), you'll need to revert the QPR-related commits from it before using it with Flare.
Use our minimal bring-up template as a reference for your device tree: 👉 Minimal Bring-Up Reference
Delete any telephony lines from your device tree that are already defined in the Flare source. If they're defined in two places, you'll hit a build error. The reference above shows exactly which lines to remove.
Once you've done this, you should be able to build and boot Flare on your device.
Once your device boots, you can start switching over to proper QTI/CLO components for a better experience. This section assumes your device is already booting.
Only switch to a QTI component if something is broken. Examples:
- Telephony (calls/SMS) broken → switch to QTI telephony
- Audio broken → switch to QTI audio
- Bluetooth broken → switch to QTI BT
Don't switch things that already work fine. Stock display HAL for example is usually better than the common one — no need to change it unless there's a problem.
If you're already using the stock QTI perf HAL in your tree, you likely don't need to adapt anything at all. Just check what works and what doesn't.
If you were using the Lineage power HAL (libperfmgr) for your first boot, here's how to switch to QTI Perf HAL properly.
You need to switch three things together:
- Perf HAL blobs
- Common QTI init files
- Common QTI overlay
How to do it:
- Open our device_qcom_common repo
- You'll see two folders —
system/andvendor/ - Check the
init/,overlay/, andperf/directories in both - Remove from your device tree any files that are already defined in
device_qcom_common— no need to keep duplicates
For perf HAL specifically, the blobs are proprietary, so you also need to clean up your proprietary-files.txt:
- Check the proprietary file list inside the
perf/directory ofdevice_qcom_common(both system and vendor folders) - Remove any matching blobs from your device tree's proprietary list
You can use AI to speed up the comparison — just paste both lists and ask it to find duplicates.
Here are reference commits for each part of the switch:
Mostly the same across devices — might need minor tweaks for yours.
Switching blobs can be tedious, and for some components you can actually skip it entirely using exclude flags.
Check this commit for reference: 👉 Exclude flags commit
Add any of these flags to your device.mk to exclude the common prebuilt blobs for that component while still using the common configuration:
TARGET_EXCLUDE_QTI_PREBUILT_AUDIO := true
TARGET_EXCLUDE_QTI_PREBUILT_BT := true
TARGET_EXCLUDE_QTI_PREBUILT_DISPLAY := true
TARGET_EXCLUDE_QTI_PREBUILT_GPS := true
TARGET_EXCLUDE_QTI_PREBUILT_TELEPHONY := trueOr to exclude all common prebuilt blobs at once:
TARGET_EXCLUDE_QTI_PREBUILTS := trueThis is especially useful for telephony — just switch to the QTI telephony component and set the flag, no blob migration needed.
After cleaning up your proprietary files list, you need to regenerate the vendor tree so everything stays in sync.
If you've done this before, you already know how. If not, don't worry — you don't need to fully regenerate blobs from a device dump. You can just regenerate the vendor makefiles instead, which is much simpler. Note that this will leave some unused blobs in your vendor tree, but that's fine for now. Here's how:
- Make sure you've fully synced the Flare source and cloned all your trees (device, vendor, kernel)
cdinto your device tree directory- Run the setup script:
./setup-makefiles.sh
# or
./setup-makefiles.py
# (check your device tree for the actual filename)If you use a common device tree, you only need to run the script from your device tree — it will automatically regenerate makefiles for the common tree too.
- Commit and push your vendor tree
Note: Unused blobs may still remain in your vendor tree after this. That's fine for now. Later on, you should learn how to do a full blob regeneration from a stock device dump to fully clean things up.
| Situation | What to do |
|---|---|
| First bring-up | Use minimal bring-up reference, remove duplicate telephony lines, build and boot |
| Using Lineage perf HAL | Boot first, then switch to QTI perf HAL + init + overlay |
| Already using stock QTI perf HAL | You're good, just check what's broken and fix selectively |
| Something broken (audio/BT/telephony) | Switch that specific QTI component |
| Don't want to migrate blobs | Use TARGET_EXCLUDE_QTI_PREBUILT_* flags |
| After cleaning proprietary list | Run setup-makefiles.sh to regenerate vendor makefiles |
- 📦 Minimal Bring-Up Tree: GitHub
- 🔧 device_qcom_common: GitHub
- 🔖 Exclude flags reference: Commit
- 💬 Community Chat: t.me/ProjectFlare
- 📢 Updates Channel: @ProjectFlareChannel
That's pretty much it. Follow the steps, don't over-adapt things that already work, and you should have a working Flare build on your device. Happy building! 🔥