@@ -408,7 +408,7 @@ def _get_sdk_root_dir_lazy(self) -> Path:
408408 xtarget = self .target .get_rootfs_target ()
409409 # We don't want to call setup() yet on the FreeBSD instance (not needed to get the compiler)
410410 # noinspection PyProtectedMember
411- fbsd = self ._get_rootfs_class (xtarget )._get_instance_no_setup (self .project , cross_target = xtarget )
411+ fbsd = self ._get_sdk_root_class (xtarget )._get_instance_no_setup (self .project , cross_target = xtarget )
412412 configured_path = fbsd .build_toolchain_root_dir # pytype: disable=attribute-error
413413 if configured_path is None :
414414 # If we couldn't find a working system compiler, default to cheribuild-compiled upstream LLVM.
@@ -439,6 +439,7 @@ def is_freebsd(cls) -> bool:
439439
440440 @classmethod
441441 def triple_for_target (cls , target : "CrossCompileTarget" , config : "CheriConfig" , * , include_version : bool ):
442+ assert not target .is_nocpu ()
442443 common_suffix = "-unknown-freebsd"
443444 if include_version :
444445 common_suffix += str (cls .FREEBSD_VERSION )
@@ -514,6 +515,11 @@ def localbase(self) -> Path:
514515 def _get_rootfs_class (self , xtarget : "CrossCompileTarget" ) -> "type[SimpleProject]" :
515516 return SimpleProject .get_class_for_target_name ("freebsd" , xtarget )
516517
518+ def _get_sdk_root_class (self , xtarget : "CrossCompileTarget" ) -> "type[SimpleProject]" :
519+ if xtarget .is_nocpu ():
520+ return SimpleProject .get_class_for_target_name ("freebsd-universe" , xtarget )
521+ return self ._get_rootfs_class (xtarget )
522+
517523 def _get_run_project (self , xtarget : "CrossCompileTarget" , caller : AbstractProject ) -> LaunchFreeBSDInterface :
518524 result = SimpleProject .get_instance_for_target_name ("run-freebsd" , xtarget , caller .config , caller )
519525 return typing .cast (LaunchFreeBSDInterface , result )
@@ -758,6 +764,11 @@ def pkgconfig_dirs(self) -> "list[str]":
758764 def _get_rootfs_class (self , xtarget : "CrossCompileTarget" ) -> "type[SimpleProject]" :
759765 return SimpleProject .get_class_for_target_name ("cheribsd" , xtarget )
760766
767+ def _get_sdk_root_class (self , xtarget : "CrossCompileTarget" ) -> "type[SimpleProject]" :
768+ if xtarget .is_nocpu ():
769+ return SimpleProject .get_class_for_target_name ("cheribsd-universe" , xtarget )
770+ return self ._get_rootfs_class (xtarget )
771+
761772 def cheribsd_version (self ) -> "Optional[int]" :
762773 return sys_param_h_cheribsd_version (self .sysroot_dir )
763774
@@ -1769,6 +1780,10 @@ class CompilationTargets(BasicCompilationTargets):
17691780 ALL_SUPPORTED_CHERIBSD_AND_HOST_TARGETS + ALL_SUPPORTED_BAREMETAL_TARGETS
17701781 )
17711782
1783+ # Special targets for use in freebsd/cheribsd-universe
1784+ CHERIBSD_NOCPU = CrossCompileTarget ("nocpu" , CPUArchitecture .NOCPU , CheriBSDTargetInfo )
1785+ FREEBSD_NOCPU = CrossCompileTarget ("nocpu" , CPUArchitecture .NOCPU , FreeBSDTargetInfo )
1786+
17721787 @staticmethod
17731788 def _dump_cheribsd_target_relations () -> None :
17741789 for target in (
0 commit comments