• Introducing XDA Computing: Discussion zones for Hardware, Software, and more!    Check it out!
  • Fill out your device list and let everyone know which phones you have!    Edit Your Device Inventory

breakfast - Can I build Halium for codename that contains a hyphen/dash?

Search This thread

adazem009

Senior Member
I'm trying to port Halium 7.1 to Asus Zenfone 2 Laser (ZE500KL/Z00ED) to port Ubuntu Touch. But, I'm stuck on the
Code:
breakfast [codename]
command.

This device is android_device_asus_msm8916-common on GitHub. But, when I try to execute
Code:
breakfast msm8916-common
it returns this error:

Code:
** Invalid variant: 'common'
** Must be one of user userdebug eng
build/core/product_config.mk:249: *** Can not locate config makefile for product "msm8916". Stop.
Device msm8916 not found. Attempting to retrieve device repository from LineageOS Github (http://github.com/LineageOS).
Repository for msm8916 not found in the LineageOS Github repository list. If this is in error, you may need to manually add it to your local_manifests/roomservice.xml.
build/core/product_config.mk:249: *** Can not locate config makefile for product "msm8916".  Stop.
build/core/product_config.mk:249: *** Can not locate config makefile for product "msm8916".  Stop.

** Don't have a product spec for: 'msm8916'
** Do you have the right repo manifest?

Is there a way to bypass this "feature" of breakfast? I tried to execute the command with 'msm8916-common' and "msm8916-common" but it returns the same error. I think that the hyphen/dash is a reserved character, but I can't change it in LineageOS repositories.
 

adazem009

Senior Member
The device tree name is not the device codename. The codename used to start a build us in the vendorsetup.sh file. For example in the https://github.com/2003Frost/android_device_asus_Z01M/blob/android-7.1/vendorsetup.sh
there are these lunch combos
add_lunch_combo lineage_Z01M-userdebug
add_lunch_combo lineage_Z01M-user
add_lunch_combo lineage_Z01M-eng.

So that means you can do "lunch lineage_Z01M-user" or the other combos.

Also breakfast is useless. A more info about Android "meals" is there https://www.trcompu.com/MySmartPhone/AndroidKitchen/Breakfast-Brunch-Lunch.html use lunch for building unofficial ROMs.

Thank you... I'm following this documentation of Halium. I want to port Ubuntu Touch to this device after that.
 

adazem009

Senior Member
The device tree name is not the device codename. The codename used to start a build us in the vendorsetup.sh file. For example in the https://github.com/2003Frost/android_device_asus_Z01M/blob/android-7.1/vendorsetup.sh
there are these lunch combos
add_lunch_combo lineage_Z01M-userdebug
add_lunch_combo lineage_Z01M-user
add_lunch_combo lineage_Z01M-eng.

So that means you can do "lunch lineage_Z01M-user" or the other combos.

Also breakfast is useless. A more info about Android "meals" is there https://www.trcompu.com/MySmartPhone/AndroidKitchen/Breakfast-Brunch-Lunch.html use lunch for building unofficial ROMs.

Also, I only found msm8916-common, not Z00ED. I know this device has published source code because there are lots of unofficial ROMs for it. If you know what "msm8916-common" means, could you explain it? I know it's the device's chipset but what do they mean by "common"?
 

adazem009

Senior Member
msm8916-common is the common tree for the msm8916. The msm is the SoC (system on chip) that it has the hardware to support every component and is a lot of components.

The SoC is the

CPU
GPU
Modem
Cellular (4G, 3G, 2G)
Wifi
Bluetooth
GPS
Camera
Etc.

This stuff that the SoC features needs its own configuration. So to separate the SoC config with the device configs they made the "common tree". The common tree won't work if you build with it. It's intended that there is the device-specific tree that calls the common SoC tree.

The " developers" that make custom ROMs for your phone are losers, which keep the device sources for themselves so they are the only people that make ROMs. And that's disgusting.

After pretty long searching I found a device tree for your phone. It uses the common tree, so have that too.
https://github.com/audahadi/android_device_asus_Z00ED

If you need any help with this, you can ask anything.

Ok, thank you. I'll try to start from the beginning. Could you look at the Halium documentation and tell me what am I doing wrong? I'm completely new to ROM porting. This is my device manifest that I made using the instructions: https://github.com/adazem009/halium-devices/blob/halium-7.1/manifests/asus_Z00ED.xml
The vendor blobs that I found are here: https://github.com/TheMuppets/proprietary_vendor_asus/tree/lineage-17.1/msm8916-common
Is it OK to use them? Also, how can I use the audahadi's device tree in breakfast? It says something that I need to add it to local_manifests/roomservice.xml. Does it mean ~/halium/.repo/local_manifests/roomservice.xml? How do I setup this file?
 

adazem009

Senior Member
msm8916-common is the common tree for the msm8916. The msm is the SoC (system on chip) that it has the hardware to support every component and is a lot of components.

The SoC is the

CPU
GPU
Modem
Cellular (4G, 3G, 2G)
Wifi
Bluetooth
GPS
Camera
Etc.

This stuff that the SoC features needs its own configuration. So to separate the SoC config with the device configs they made the "common tree". The common tree won't work if you build with it. It's intended that there is the device-specific tree that calls the common SoC tree.

The " developers" that make custom ROMs for your phone are losers, which keep the device sources for themselves so they are the only people that make ROMs. And that's disgusting.

After pretty long searching I found a device tree for your phone. It uses the common tree, so have that too.
https://github.com/audahadi/android_device_asus_Z00ED

If you need any help with this, you can ask anything.

Also, I found another device tree for LineageOS 16: https://github.com/Asus-MSM8916/android_device_asus_Z00ED
How do these device trees differ? According to Halium documentation, Halium is based on LineageOS 14.1. Does that mean I must use LineageOS 14.1 device tree for it? I was also thinking that I could build LineageOS 17 for this device. But what if we don't have LineageOS 17 device tree? Is it possible to build it?
 

adazem009

Senior Member
The documentation looks good.

The sources are required to be android 5.1 (cm12.1) or android 7.1 (cm14.) so you want the latest, which is android 7.1 (cm14.1) you can't use android 10 sources because they are too different. You can extract the vendor blobs from your phone with the device tree script. (extract-files.sh)

The manifest you have has the Z00ED device tree missing. And the common tree missing. And doesn't have a remote. The documentation explained this. And also doesn't have the repo location. Keep in mind that a manifest just downloads stuff (most of the times). You don't need it.

This is the right manifest.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

<remote name="github"
fetch="http://github.com" />

<project path="audahadi/android_device_asus_Z00ED" name=device_asus" remote="github" target_path": "device/asus/Z00ED" />

<project path="LineageOS /
android_device_asus_msm8916-common" name=msm8916_asus-common" remote="github" target_path": "device/asus/msm8916-common" />

<project path="kernel-hut/android_kernel_asus_msm8916" name=msm8916_asus-kernel" remote="github" target_path": "kernel/asus/msm8916-common" />

</manifest>

You don't use breakfast while building unofficial ROMs. Just simply ignore the step. You don't need to put anything to the roomservice. It's the same as the local manifest.

Look at AlaskaLinuxUser on YouTube he has great guides on building, device trees, kernels, etc. This is not self promotion. This is not my channel.

---------- Post added at 12:47 PM ---------- Previous post was at 12:44 PM ----------


They really differ, mostly because of project treble. You need to use cm14.1 device tree for halium.

You can also make the Los17 device tree yourself. It's not that hard and I can help you.

Ok, thanks for your help. I'll try to use your manifest and tell you if it works. I watched a Halium live porting video and followed them to create the manifest. What does the "path" attribute mean and how is it used?
 

adazem009

Senior Member
The documentation looks good.

The sources are required to be android 5.1 (cm12.1) or android 7.1 (cm14.) so you want the latest, which is android 7.1 (cm14.1) you can't use android 10 sources because they are too different. You can extract the vendor blobs from your phone with the device tree script. (extract-files.sh)

The manifest you have has the Z00ED device tree missing. And the common tree missing. And doesn't have a remote. The documentation explained this. And also doesn't have the repo location. Keep in mind that a manifest just downloads stuff (most of the times). You don't need it.

This is the right manifest.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

<remote name="github"
fetch="http://github.com" />

<project path="audahadi/android_device_asus_Z00ED" name=device_asus" remote="github" target_path": "device/asus/Z00ED" />

<project path="LineageOS /
android_device_asus_msm8916-common" name=msm8916_asus-common" remote="github" target_path": "device/asus/msm8916-common" />

<project path="kernel-hut/android_kernel_asus_msm8916" name=msm8916_asus-kernel" remote="github" target_path": "kernel/asus/msm8916-common" />

</manifest>

You don't use breakfast while building unofficial ROMs. Just simply ignore the step. You don't need to put anything to the roomservice. It's the same as the local manifest.

Look at AlaskaLinuxUser on YouTube he has great guides on building, device trees, kernels, etc. This is not self promotion. This is not my channel.

---------- Post added at 12:47 PM ---------- Previous post was at 12:44 PM ----------


They really differ, mostly because of project treble. You need to use cm14.1 device tree for halium.

You can also make the Los17 device tree yourself. It's not that hard and I can help you.

Also, I think you need to include vendor blobs in the manifest. But I'm having trouble adding it there. Look at this repository. I want to use the Z00xD directory but I think the build system will think my device is Z00ED and it'll try to find it. What's the correct syntax for this? Do I need to fork this repo and rename this directory?
 

adazem009

Senior Member
"Path" indicates the destination folder. Or simply where the downloaded stuff should be put to.

For all repo manifest commands you can look at https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.md

---------- Post added at 02:25 PM ---------- Previous post was at 02:18 PM ----------


OK I'll edit the manifest post and add the vendor blobs there.

You don't need to rename the blobs. If you look at the device tree it wants these blobs. It calls the vendor files with the name of Z00xD which is the exact same repo as you linked.

Oh ok. I'll try to create a manifest on my own, and if it doesn't work, I'll try the one that you created. There are some manifests for other devices in the Halium source, so I'm creating using them.
 

adazem009

Senior Member
I've edited the manifest added vendor blobs and fixed some errors. If you download with the manifest and run the build you should have a successful build.

Ok. I've created my manifest and the output of bulding seems fine... here it is:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
        <remote name="adh"
                fetch="https://github.com/audahadi"
                revision="N" />
        <remote name="krh"
                fetch="https://github.com/kernel-hut"
                revision="N" />
        <project path="device/asus/Z00ED" name="android_device_asus_Z00ED" remote="adh" />
        <project path="kernel/asus/msm8916" name="android_kernel_asus_msm8916" remote="krh" />
        <project path="vendor/asus" name="android_vendor_asus" remote="adh" />
</manifest>
I made it using Fairphone 2's manifest:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <project path="device/fairphone/FP2" name="Halium/android_device_fairphone_fp2" remote="hal" />
    <project path="kernel/fairphone/msm8974" name="Halium/android_kernel_fairphone_msm8974" remote="hal" />
    <project path="vendor/fairphone" name="proprietary_vendor_fairphone" remote="them" />
</manifest>
 

adazem009

Senior Member
The manifest works. I wouldn't like it because it has multiple remotes when only one is needed like in my manifest.

This doesn't make it bad, but it could be better at least in my opinion.

Also you are forgetting the common tree.

Oh yeah, that's right. I'm getting this error:
Code:
./setup-makefiles.sh: line 25: ./../../asus/msm8916-common/setup-makefiles.sh: No such file or directory
I'll try your manifest now.
 
Last edited:

adazem009

Senior Member
The manifest works. I wouldn't like it because it has multiple remotes when only one is needed like in my manifest.

This doesn't make it bad, but it could be better at least in my opinion.

Also you are forgetting the common tree.

You have some formatting errors near the "name" attributes. Now, I get this error:
Code:
fatal: error parsing manifest ~/halium/virt-parts/mounts/halium/.repo/local_manifests/device.xml: duplicate attribute: line 5, column 100
Why did you add path 2 times?
 

adazem009

Senior Member
The manifest works. I wouldn't like it because it has multiple remotes when only one is needed like in my manifest.

This doesn't make it bad, but it could be better at least in my opinion.

Also you are forgetting the common tree.

I've modified your manifest. Is everything OK here?
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
        <remote name="audahadi"
                fetch="https://github.com/audahadi"
                revision="N" />
        <remote name="kernelhut"
                fetch="https://github.com/kernel-hut"
                revision="N" />
        <project path="device/asus/Z00ED" name="android_device_asus_Z00ED" remote="audahadi" />
        <project path="device/asus/msm8916-common" name="android_device_asus_msm8916-common" remote="los" revision="cm-14.1" />
        <project path="kernel/asus/msm8916-common" name="android_kernel_asus_msm8916" remote="kernelhut" />
        <project path="vendor/asus/Z00xD" name="android_vendor_asus" remote="audahadi" />
</manifest>
It's now setting up the device and I didn't get any error so far.
 

adazem009

Senior Member
I think I know the error. Try this file

The link to that file is invalid (404 Not Found). I tried to use my manifest and I "think" the build was successful. I'm now stuck here. It's failing when I execute
Code:
mka hybris-boot
I get this error:
Code:
ninja: Entering directory `.'
ninja: error: '~/halium/out/target/product/Z00ED/kernel', needed by '/media/Disk2/virt-parts/mounts/halium/out/target/product/Z00ED/obj/ROOT/hybris-boot_intermediates/hybris-boot.img', missing and no known rule to make it
make: *** [build/core/ninja.mk:152: ninja_wrapper] Error 1
make: Leaving directory '~/halium'