⛏️ index : haiku.git

# This file defines what ends up in the network boot archive and it executes the
# rules building the archive.


SYSTEM_NETWORK_DEVICES = ethernet loopback ;
SYSTEM_NETWORK_DATALINK_PROTOCOLS = ethernet_frame <module>arp loopback_frame ;
SYSTEM_NETWORK_PROTOCOLS = ipv4 tcp udp icmp unix ;

SYSTEM_ADD_ONS_DRIVERS_NET = [ FFilterByBuildFeatures
	x86,x86_64 @{
		3com
		atheros813x
		atheros81xx
		attansic_l2
		broadcom440x
		broadcom570x
		ipro100
		ipro1000
		marvell_yukon
		nforce
		rtl8139
		sis900
		syskonnect
		via_rhine
	}@ # x86,x86_64

	etherpci
	pegasus
	rtl81xx
	usb_ecm
	wb840
] ;
SYSTEM_ADD_ONS_BUS_MANAGERS = [ FFilterByBuildFeatures
	pci
	<pci>x86@x86,x86_64
	isa@x86
	usb
	ata
	scsi
	agp_gart
	dpc
	acpi
] ;
SYSTEM_ADD_ONS_FILE_SYSTEMS =
	bfs
	packagefs
	;


# modules
AddFilesToNetBootArchive system add-ons kernel bus_managers
	: $(SYSTEM_ADD_ONS_BUS_MANAGERS) ;
AddFilesToNetBootArchive system add-ons kernel busses agp_gart :
	<agp_gart>intel@x86
	;
AddFilesToNetBootArchive system add-ons kernel busses ide :
	generic_ide_pci
	ide_isa@x86
	silicon_image_3112
	;
AddFilesToNetBootArchive system add-ons kernel busses scsi :
	ahci
	;
AddFilesToNetBootArchive system add-ons kernel console :
	vga_text
	;
AddFilesToNetBootArchive system add-ons kernel file_systems
	: $(SYSTEM_ADD_ONS_FILE_SYSTEMS) ;
AddFilesToNetBootArchive system add-ons kernel generic :
	ata_adapter
	scsi_periph
	;
AddFilesToNetBootArchive system add-ons kernel partitioning_systems :
	intel
	session
	;
AddFilesToNetBootArchive system add-ons kernel interrupt_controllers :
	openpic@ppc
	;
if $(TARGET_ARCH) = x86 || $(TARGET_ARCH) = x86_64 {
	AddFilesToNetBootArchive system add-ons kernel cpu
		:
		generic_x86
		;
}
# drivers
AddNewDriversToNetBootArchive disk scsi :
	scsi_cd
	scsi_disk
	;
AddDriversToNetBootArchive disk virtual :
#	nbd
	;
AddDriversToNetBootArchive disk virtual :
	remote_disk
	;
AddDriversToNetBootArchive net
	: $(SYSTEM_ADD_ONS_DRIVERS_NET) ;

# kernel
AddFilesToNetBootArchive system
	: <revisioned>kernel_$(TARGET_ARCH) ;

# scripts and data files

local driverSettingsFiles = <driver-settings>kernel ;
SEARCH on $(driverSettingsFiles)
	= [ FDirName $(HAIKU_TOP) data settings kernel drivers ] ;
AddFilesToNetBootArchive home config settings kernel drivers
	: $(driverSettingsFiles) ;

# add-ons
AddFilesToNetBootArchive system add-ons kernel network :
	stack
	;
AddFilesToNetBootArchive system add-ons kernel network devices
	: $(SYSTEM_NETWORK_DEVICES) ;
AddFilesToNetBootArchive
	system add-ons kernel network datalink_protocols
	: $(SYSTEM_NETWORK_DATALINK_PROTOCOLS) ;
AddFilesToNetBootArchive system add-ons kernel network ppp
	: $(SYSTEM_NETWORK_PPP) ;
AddFilesToNetBootArchive
	system add-ons kernel network protocols
	: $(SYSTEM_NETWORK_PROTOCOLS) ;

# boot module links
AddBootModuleSymlinksToNetBootArchive
	$(SYSTEM_ADD_ONS_BUS_MANAGERS)
	ahci
	generic_ide_pci
	ide_isa@x86
	silicon_image_3112
	$(SYSTEM_ADD_ONS_FILE_SYSTEMS)
	ata_adapter
	scsi_periph
	intel
	session
	openpic@ppc
	generic_x86@x86
#	generic_x86@x86_64
#	nbd
	remote_disk
	$(SYSTEM_ADD_ONS_DRIVERS_NET)
	stack
	$(SYSTEM_NETWORK_DEVICES)
	$(SYSTEM_NETWORK_DATALINK_PROTOCOLS)
	$(SYSTEM_NETWORK_PPP)
	$(SYSTEM_NETWORK_PROTOCOLS)
;


#pragma mark - Build The Archive

# archive target
HAIKU_NET_BOOT_ARCHIVE = haiku-netboot.tgz ;
MakeLocate $(HAIKU_NET_BOOT_ARCHIVE) : $(HAIKU_OUTPUT_DIR) ;

# the pseudo target all archive contents is attached to
NotFile $(HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME) ;

# prepare the script that initializes the shell variables
local initVarsScript = <NetBootArchive>haiku-netboot-init-vars ;
local script = $(initVarsScript) ;
MakeLocate $(script) : $(HAIKU_OUTPUT_DIR) ;
Always $(script) ;

AddVariableToScript $(script) : tmpDir : $(HAIKU_TMP_DIR) ;
AddVariableToScript $(script) : addBuildCompatibilityLibDir
	: "export $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR)" ;
AddTargetVariableToScript $(script) : <build>copyattr ;

# create the other scripts
local makeDirsScript = <NetBootArchive>haiku-netboot-make-dirs ;
local copyFilesScript = <NetBootArchive>haiku-netboot-copy-files ;
MakeLocate $(makeDirsScript) $(copyFilesScript) : $(HAIKU_OUTPUT_DIR) ;

CreateNetBootArchiveMakeDirectoriesScript $(makeDirsScript) ;
CreateNetBootArchiveCopyFilesScript $(copyFilesScript) ;

# build the archive

BuildNetBootArchive $(HAIKU_NET_BOOT_ARCHIVE) :
	$(initVarsScript)
	$(makeDirsScript)
	$(copyFilesScript)
;

# remove the scripts we have generated
RmTemps $(HAIKU_NET_BOOT_ARCHIVE) :
	$(initVarsScript)
	$(makeDirsScript)
	$(copyFilesScript)
;

NotFile haiku-netboot-archive ;
Depends haiku-netboot-archive : $(HAIKU_NET_BOOT_ARCHIVE) ;