mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-18 11:06:19 +00:00
`release.linux.yaml` now declares `architecture: [x64, arm64]` and the runner loops the entire pipeline once per architecture. depot_tools fetches both Linux sysroots automatically — `git_setup` idempotently ensures `target_cpus = ['x64', 'arm64']` is in `.gclient` before `gclient sync`, so cross-compiling arm64 from an x64 host just works. The resolver returns `List[Context]` (single-element for the common single-arch case), and `build/cli/build.py` loops `execute_pipeline` over the per-arch contexts. Modules stay 100% arch-agnostic — no new orchestration module, no new YAML schema beyond the list form. Also fix a cross-compile bug in `build/modules/package/linux.py`: the appimagetool binary must match the BUILD machine's arch (it executes locally), not the target arch. Split into a host-keyed `LINUX_HOST_APPIMAGETOOL` lookup vs the existing target-keyed `LINUX_ARCHITECTURE_CONFIG`. Target arch is still passed to appimagetool via the `ARCH` env var. - build/common/resolver.py: scalar OR list `architecture` -> List[Context] - build/cli/build.py: loop pipeline per arch, log multi-arch headers - build/config/release.linux.yaml: `architecture: [x64, arm64]` - build/modules/setup/git.py: idempotent `target_cpus` edit on Linux - build/modules/package/linux.py: host vs target appimagetool split - build/modules/package/linux_test.py: cover the host/target split
64 lines
2.2 KiB
Python
Generated
64 lines
2.2 KiB
Python
Generated
#!/usr/bin/env python3
|
|
"""Tests for Linux packaging architecture helpers."""
|
|
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from build.modules.package.linux import (
|
|
LINUX_HOST_APPIMAGETOOL,
|
|
get_host_appimagetool,
|
|
get_linux_architecture_config,
|
|
)
|
|
|
|
|
|
class LinuxArchitectureConfigTest(unittest.TestCase):
|
|
def test_returns_x64_packaging_config(self) -> None:
|
|
config = get_linux_architecture_config("x64")
|
|
|
|
self.assertEqual(config["appimage_arch"], "x86_64")
|
|
self.assertEqual(config["deb_arch"], "amd64")
|
|
|
|
def test_returns_arm64_packaging_config(self) -> None:
|
|
config = get_linux_architecture_config("arm64")
|
|
|
|
self.assertEqual(config["appimage_arch"], "aarch64")
|
|
self.assertEqual(config["deb_arch"], "arm64")
|
|
|
|
def test_rejects_unsupported_architecture(self) -> None:
|
|
with self.assertRaisesRegex(ValueError, "Unsupported Linux architecture"):
|
|
get_linux_architecture_config("universal")
|
|
|
|
|
|
class HostAppImageToolTest(unittest.TestCase):
|
|
"""The appimagetool binary must match the BUILD machine's arch, not
|
|
the target arch — otherwise cross-compiling arm64 packages from an x64
|
|
host fails because the aarch64 tool can't execute on x64."""
|
|
|
|
def test_x64_host_picks_x86_64_tool(self) -> None:
|
|
with patch(
|
|
"build.modules.package.linux.get_platform_arch", return_value="x64"
|
|
):
|
|
filename, url = get_host_appimagetool()
|
|
|
|
self.assertEqual(filename, "appimagetool-x86_64.AppImage")
|
|
self.assertIn("x86_64", url)
|
|
|
|
def test_arm64_host_picks_aarch64_tool(self) -> None:
|
|
with patch(
|
|
"build.modules.package.linux.get_platform_arch", return_value="arm64"
|
|
):
|
|
filename, url = get_host_appimagetool()
|
|
|
|
self.assertEqual(filename, "appimagetool-aarch64.AppImage")
|
|
self.assertIn("aarch64", url)
|
|
|
|
def test_host_lookup_independent_of_target(self) -> None:
|
|
# Both architectures must be present in the host lookup so cross
|
|
# builds work in either direction.
|
|
self.assertIn("x64", LINUX_HOST_APPIMAGETOOL)
|
|
self.assertIn("arm64", LINUX_HOST_APPIMAGETOOL)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|