Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 24 additions & 10 deletions pycheribuild/projects/cross/linux.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

from .crosscompileproject import CrossCompileAutotoolsProject
from ..project import (
ComputedDefaultValue,
DefaultInstallDir,
GitRepository,
MakeCommandKind,
Expand Down Expand Up @@ -114,8 +115,20 @@ def setup(self) -> None:
# Don't overwrite our manually edited .config file with default values
self.make_args.set_env(KCONFIG_NOSILENTUPDATE=1)

@property
def defconfig(self) -> str:
@classmethod
def setup_config_options(cls, **kwargs) -> None:
super().setup_config_options(**kwargs)

cls.defconfig = cls.add_config_option(
"defconfig",
default=ComputedDefaultValue(
function=lambda _, p: p.default_defconfig(),
as_string="platform-dependent, usually defconfig",
),
help="The Linux kernel's defconfig to use",
)

def default_defconfig(self) -> str:
return "defconfig"

def _apply_build_patches(self):
Expand All @@ -142,7 +155,8 @@ def _apply_patch_from_url(self, patch_output_path: Path, patch_url: str):
self.info(f"Patch from {patch_url} already applied, skipping.")

def configure(self, **kwargs):
self.run_make(self.defconfig, cwd=self.source_dir, parallel=False)
assert self.defconfig is not None
self.run_make(str(self.defconfig), cwd=self.source_dir, parallel=False)

def install(self, **kwargs):
self.install_file(self.build_dir / "vmlinux", self.install_dir / "boot/vmlinux")
Expand All @@ -163,9 +177,9 @@ class BuildCheriAllianceLinux(BuildLinux):
supported_riscv_cheri_standard = RiscvCheriISA.EXPERIMENTAL_STD093
_default_architecture = CompilationTargets.CHERI_LINUX_RISCV64_PURECAP_093

@property
def defconfig(self) -> str:
if self.crosscompile_target.is_hybrid_or_purecap_cheri([CPUArchitecture.RISCV64]):
# Override default defconfig for CHERI-enabled kernels
def default_defconfig(self) -> str:
if self.crosscompile_target.is_cheri_purecap([CPUArchitecture.RISCV64]):
return "qemu_riscv64cheripc_defconfig"
elif self.crosscompile_target.is_cheri_purecap([CPUArchitecture.AARCH64]):
return "morello_pcuabi_defconfig"
Expand Down Expand Up @@ -198,10 +212,10 @@ class BuildMorelloLinux(BuildLinux):
_supported_architectures = CompilationTargets.ALL_MORELLO_LINUX_TARGETS
_default_architecture = CompilationTargets.MORELLO_LINUX_MORELLO_PURECAP

@property
def defconfig(self) -> str:
if self.crosscompile_target.is_hybrid_or_purecap_cheri([CPUArchitecture.AARCH64]):
return "morello_transitional_pcuabi_defconfig"
# Override default defconfig for CHERI-enabled kernels
def default_defconfig(self) -> str:
if self.crosscompile_target.is_cheri_purecap([CPUArchitecture.AARCH64]):
return "morello_pcuabi_defconfig"
else:
return "defconfig"

Expand Down
33 changes: 22 additions & 11 deletions pycheribuild/projects/cross/u_boot.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,19 @@ class BuildUBoot(Project):
function=uboot_install_dir, as_string="$SDK_ROOT/u-boot/riscv{32,64}{,-hybrid,-purecap}"
)

@classmethod
def setup_config_options(cls, **kwargs) -> None:
super().setup_config_options(**kwargs)

cls.defconfig = cls.add_config_option(
"defconfig",
default=ComputedDefaultValue(
function=lambda _, p: p.default_defconfig(),
as_string="platform-dependent, usually defconfig",
),
help="The u-boot's defconfig to use",
)

def check_system_dependencies(self) -> None:
super().check_system_dependencies()
self.check_required_system_tool("dtc", apt="device-tree-compiler", homebrew="dtc")
Expand Down Expand Up @@ -107,11 +120,10 @@ def setup(self) -> None:
if self.config.verbose:
self.make_args.set(V=True)

@property
def platform(self) -> str:
def default_defconfig(self) -> str:
if self.crosscompile_target.is_riscv(include_purecap=True):
return "qemu-riscv64_smode"
assert False, "unhandled target"
return "qemu-riscv64_smode_defconfig"
assert False, "unhandled target/defconfig"

@property
def uboot_suffix(self) -> str:
Expand All @@ -132,7 +144,7 @@ def get_firmware_path(
return cls.get_instance(caller, config=config, cross_target=cross_target).firmware_path

def configure(self, **kwargs):
self.run_make(self.platform + "_defconfig")
self.run_make(str(self.defconfig))

def override_config(old):
new = []
Expand Down Expand Up @@ -181,15 +193,14 @@ def setup_config_options(cls, **kwargs):
super().setup_config_options(**kwargs)
cls.secure_boot = cls.add_bool_option("secure-boot", default=False, help="Enable secure boot image")

@property
def platform(self) -> str:
def default_defconfig(self) -> str:
if self.crosscompile_target.is_cheri_purecap([CPUArchitecture.RISCV64]):
if self.secure_boot:
return "codasip-a730-hobgoblin_secure-boot_cheri_purecap_smode"
return "codasip-a730-hobgoblin_cheri_purecap_smode"
return "codasip-a730-hobgoblin_secure-boot_cheri_purecap_smode_defconfig"
return "codasip-a730-hobgoblin_cheri_purecap_smode_defconfig"
elif self.crosscompile_target.is_riscv():
if self.secure_boot:
return "codasip-a730-hobgoblin_secure-boot_smode"
return "codasip-a730-hobgoblin_smode"
return "codasip-a730-hobgoblin_secure-boot_smode_defconfig"
return "codasip-a730-hobgoblin_smode_defconfig"

assert False, "unhandled target"
Loading