⛏️ index : haiku.git

SubDir HAIKU_TOP src system runtime_loader ;


if $(TARGET_ARCH) = x86_64
	&& ( x86 in $(HAIKU_ARCHS[2-]) || x86_gcc2 in $(HAIKU_ARCHS[2-]) ) {
	DEFINES += _COMPAT_MODE ;
}

local architectureObject ;
for architectureObject in [ MultiArchSubDirSetup ] {
	on $(architectureObject) {
		local architecture = $(TARGET_PACKAGING_ARCH) ;

		UsePrivateHeaders libroot runtime_loader shared ;
		UsePrivateHeaders kernel ;
			# for <util/KMessage.h>
		UsePrivateHeaders libroot os ;
			# for "PathBuffer.h"
		UsePrivateSystemHeaders ;

		ObjectHdrs find_directory.cpp : $(HAIKU_TOP)/src/system/libroot/os ;
		ObjectC++Flags kernel_cpp.cpp : -fno-builtin ;

		SubDirC++Flags -fno-exceptions ;

		DEFINES +=
			KMESSAGE_CONTAINER_ONLY
			_LOADER_MODE
			USING_LIBGCC=1
		;

		AddResources [ MultiArchDefaultGristFiles runtime_loader ]
			: runtime_loader.rdef ;

		# needed for "runtime_loader" only
		StaticLibrary <$(architecture)>libruntime_loader.a :
			kernel_vsprintf.cpp
			kernel_cpp.cpp
			KMessage.cpp
			find_directory.cpp
			:
			<src!system!libroot!os!$(architecture)>mutex.o
			<src!system!libroot!os!$(architecture)>recursive_lock.o
			<src!system!libroot!os!$(architecture)>syscalls.o
			<src!system!libroot!os!$(architecture)>sem.o
			<src!system!libroot!os!arch!$(TARGET_ARCH)!$(architecture)>tls.o

			<src!system!libroot!posix!$(architecture)>errno.o
			<src!system!libroot!posix!$(architecture)>fcntl.o

			<src!system!libroot!posix!locale!$(architecture)>ctype.o
			<src!system!libroot!posix!locale!$(architecture)>ctype_loc.o
			<src!system!libroot!posix!locale!$(architecture)>LocaleData.o

			<src!system!libroot!posix!musl!string!$(architecture)>memchr.o
			<src!system!libroot!posix!musl!string!$(architecture)>memmove.o
			<src!system!libroot!posix!musl!string!$(architecture)>strcat.o
			<src!system!libroot!posix!musl!string!$(architecture)>strchrnul.o
			<src!system!libroot!posix!musl!string!$(architecture)>strcspn.o
			<src!system!libroot!posix!musl!string!$(architecture)>strlcat.o
			<src!system!libroot!posix!musl!string!$(architecture)>strlcpy.o
			<src!system!libroot!posix!musl!string!$(architecture)>strlen.o
			<src!system!libroot!posix!musl!string!$(architecture)>strnlen.o
			<src!system!libroot!posix!musl!string!$(architecture)>strpbrk.o
			<src!system!libroot!posix!musl!string!$(architecture)>strspn.o
			<src!system!libroot!posix!musl!string!$(architecture)>strstr.o

			<src!system!libroot!posix!string!$(architecture)>memcmp.o
			<src!system!libroot!posix!string!$(architecture)>strcasecmp.o
			<src!system!libroot!posix!string!$(architecture)>strchr.o
			<src!system!libroot!posix!string!$(architecture)>strcmp.o
			<src!system!libroot!posix!string!$(architecture)>strcpy.o
			<src!system!libroot!posix!string!$(architecture)>strdup.o
			<src!system!libroot!posix!string!$(architecture)>strerror.o
			<src!system!libroot!posix!string!$(architecture)>strncmp.o
			<src!system!libroot!posix!string!$(architecture)>strrchr.o
		;

		SEARCH on [ FGristFiles kernel_cpp.cpp ]
			= [ FDirName $(HAIKU_TOP) src system kernel util ] ;
		SEARCH on [ FGristFiles kernel_vsprintf.cpp ]
			= [ FDirName $(HAIKU_TOP) src system kernel lib ] ;
		SEARCH on [ FGristFiles KMessage.cpp ]
			= [ FDirName $(HAIKU_TOP) src system kernel messaging ] ;
		SEARCH on [ FGristFiles find_directory.cpp ]
			= [ FDirName $(HAIKU_TOP) src system libroot os ] ;

		local sources =
			add_ons.cpp
			commpage.cpp
			elf.cpp
			elf_haiku_version.cpp
			elf_load_image.cpp
			elf_symbol_lookup.cpp
			elf_tls.cpp
			elf_versioning.cpp
			pe.cpp
			errors.cpp
			export.cpp
			heap.cpp
			images.cpp
			runtime_loader.cpp
			utility.cpp
		;

		Objects [ FGristFiles $(sources) ] ;

		Ld [ MultiArchDefaultGristFiles runtime_loader ] :
			[ FGristFiles $(sources:S=$(SUFOBJ)) ]
			<$(architecture)>libruntime_loader.a
			<$(architecture)>libruntime_loader_$(TARGET_ARCH).a
			[ TargetKernelLibsupc++ ]
			[ TargetKernelLibgcc ]
			[ TargetKernelLibgcceh ]
			:
			: --no-undefined -shared -Bsymbolic -soname=runtime_loader -entry=runtime_loader
		;
	}
}


local arch ;
for arch in $(TARGET_ARCHS) {
	HaikuSubInclude arch $(arch) ;
}