⛏️ index : haiku.git

SubDir HAIKU_TOP src system boot loader ;

SubDirHdrs $(HAIKU_TOP) src add-ons kernel partitioning_systems amiga ;
SubDirHdrs $(HAIKU_TOP) src add-ons kernel partitioning_systems apple ;
SubDirHdrs $(HAIKU_TOP) src add-ons kernel partitioning_systems gpt ;
SubDirHdrs $(HAIKU_TOP) src add-ons kernel partitioning_systems intel ;
UsePrivateKernelHeaders ;
UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
UsePrivateHeaders [ FDirName kernel util ] ;
UsePrivateHeaders shared storage ;

local defines = $(DEFINES) ;

local platform ;
for platform in [ MultiBootSubDirSetup ] {
	on $(platform) {
		{
			DEFINES = $(defines) ;

			DEFINES +=
				BOOT_ARCH=\\\"$(TARGET_KERNEL_ARCH_DIR)\\\"
				KMESSAGE_CONTAINER_ONLY

				BOOT_SUPPORT_PARTITION_INTEL

				BOOT_SUPPORT_FILE_SYSTEM_BFS
				BOOT_SUPPORT_FILE_SYSTEM_TARFS
				#BOOT_SUPPORT_FILE_MAP_DISK
				BOOT_SUPPORT_FILE_SYSTEM_FAT
			;

			if $(TARGET_BOOT_PLATFORM) = efi {
				DEFINES +=
					_BOOT_PLATFORM_EFI
					BOOT_SUPPORT_PARTITION_EFI
				;
			}

			# Add architecture specific partition/file system modules

			switch $(TARGET_KERNEL_ARCH_DIR) {
				case "ppc" :
				{
					DEFINES +=
						BOOT_SUPPORT_ELF32 #How to deal with PPC970 ?
						BOOT_SUPPORT_PARTITION_AMIGA
						BOOT_SUPPORT_PARTITION_APPLE

						BOOT_SUPPORT_FILE_SYSTEM_AMIGA_FFS
					;
				}
				case "x86" :
				{
					DEFINES +=
						ALTERNATE_BOOT_ARCH=\\\"x86_64\\\"
						BOOT_SUPPORT_PARTITION_EFI

						#BOOT_SUPPORT_FILE_SYSTEM_FAT
					;

					if $(TARGET_BOOT_PLATFORM) != efi {
						DEFINES +=
							_BOOT_PLATFORM_BIOS
							BOOT_SUPPORT_ELF32
							BOOT_SUPPORT_ELF64
						;
					} else {
						if $(TARGET_ARCH) = x86_64 {
							DEFINES += BOOT_SUPPORT_ELF64 ;
						} else {
							DEFINES += BOOT_SUPPORT_ELF32 ;
						}
					}
				}
				case "sparc" :
				{
					DEFINES += BOOT_SUPPORT_ELF64 ;
				}
				case "riscv64" :
				{
					DEFINES += BOOT_SUPPORT_ELF64 ;
				}
				case "m68k" :
				{
					DEFINES += BOOT_SUPPORT_ELF32 ;
				}
				case "arm" :
				{
					DEFINES += BOOT_SUPPORT_ELF32 ;
				}
				case "arm64" :
				{
					DEFINES += BOOT_SUPPORT_ELF64 ;
				}
			}

			local kernelC++Header = [ FDirName $(HAIKU_TOP) headers private kernel util
				kernel_cpp.h ] ;

			SubDirC++Flags -fno-rtti -include $(kernelC++Header) ;
		}


		BootStaticLibrary [ MultiBootGristFiles boot_loader ] :
			PathBlocklist.cpp
			elf.cpp
			heap.cpp
			kernel_args.cpp
			load_driver_settings.cpp
			loader.cpp
			main.cpp
			menu.cpp
			package_support.cpp
			pager.cpp
			partitions.cpp
			RootFileSystem.cpp
			stdio.cpp
			system_revision.c
			vfs.cpp
			misc.cpp

			# libroot
			driver_settings.cpp

			# utils
			kernel_cpp.cpp
			KMessage.cpp
			list.cpp
			ring_buffer.cpp
			safemode_settings.cpp
			StringHash.cpp

			DataIO.cpp
			Referenceable.cpp
			;

		# The partition support is built in an extra static library
		# so that only the ones that are used will be included.

		BootStaticLibrary [ MultiBootGristFiles boot_partitions ] :
			FileMapDisk.cpp
			amiga_rdb.cpp
			apple.cpp

			gpt.cpp
			Header.cpp
			crc32.cpp
			utility.cpp

			intel.cpp
			PartitionMap.cpp
			PartitionMapParser.cpp
			;

		# Tell Jam where to find the utility sources
		SEARCH on [ FGristFiles kernel_cpp.cpp list.cpp ring_buffer.cpp StringHash.cpp ]
			= [ FDirName $(HAIKU_TOP) src system kernel util ] ;

		SEARCH on [ FGristFiles KMessage.cpp ]
			= [ FDirName $(HAIKU_TOP) src system kernel messaging ] ;

		SEARCH on [ FGristFiles safemode_settings.cpp ]
			= [ FDirName $(HAIKU_TOP) src system kernel debug ] ;

		SEARCH on [ FGristFiles driver_settings.cpp system_revision.c ]
			= [ FDirName $(HAIKU_TOP) src system libroot os ] ;

		SEARCH on [ FGristFiles amiga_rdb.cpp ]
			= [ FDirName $(HAIKU_TOP) src add-ons kernel partitioning_systems amiga ] ;

		SEARCH on [ FGristFiles apple.cpp ]
			= [ FDirName $(HAIKU_TOP) src add-ons kernel partitioning_systems apple ] ;

		SEARCH on [ FGristFiles gpt.cpp Header.cpp crc32.cpp utility.cpp ]
			= [ FDirName $(HAIKU_TOP) src add-ons kernel partitioning_systems gpt ] ;

		SEARCH on [ FGristFiles intel.cpp PartitionMap.cpp PartitionMapParser.cpp ]
			= [ FDirName $(HAIKU_TOP) src add-ons kernel partitioning_systems intel ] ;

		SEARCH on [ FGristFiles stage2_crt0.S ]
			= [ FDirName $(HAIKU_TOP) src system boot arch $(TARGET_KERNEL_ARCH_DIR) ] ;

		SEARCH on [ FGristFiles DataIO.cpp Referenceable.cpp ]
			= [ FDirName $(HAIKU_TOP) src kits support ] ;
	}
}

SubInclude HAIKU_TOP src system boot loader file_systems ;
SubInclude HAIKU_TOP src system boot loader net ;