SubDir OBOS_TOP src kernel core disk_device_manager ;

SEARCH_SOURCE += [ FDirName $(SUBDIR) jobs ] ;
SEARCH_SOURCE += [ FDirName $(OBOS_TOP) src kits storage ] ;
	# DiskDeviceTypes.cpp

UsePrivateHeaders [ FDirName kernel boot platform $(OBOS_BOOT_PLATFORM) ] ;
UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
UsePrivateHeaders [ FDirName kernel util ] ;
UsePrivateHeaders shared ;
UsePrivateHeaders storage ;

# As long as we compile for R5 userland, we define the following macros.
SubDirCcFlags	[ FDefines USER R5_MEMORY_LAYOUT ] ;
SubDirC++Flags	[ FDefines USER R5_MEMORY_LAYOUT ] ;

SharedLibrary disk_device_manager :
	ddm_operation_validation.cpp
	ddm_userland_interface.cpp
	disk_device_manager.cpp
	KDiskDevice.cpp
	KDiskDeviceJob.cpp
	KDiskDeviceJobFactory.cpp
	KDiskDeviceJobGenerator.cpp
	KDiskDeviceJobQueue.cpp
	KDiskDeviceManager.cpp
	KFileDiskDevice.cpp
	KDiskSystem.cpp
	KFileSystem.cpp
	KPartition.cpp
	KPartitioningSystem.cpp
	KPartitionListener.cpp
	KPartitionVisitor.cpp
	KPhysicalPartition.cpp
	KShadowPartition.cpp
	UserDataWriter.cpp

	# jobs
	KCreateChildJob.cpp
	KDefragmentJob.cpp
	KDeleteChildJob.cpp
	KInitializeJob.cpp
	KMoveJob.cpp
	KRepairJob.cpp
	KResizeJob.cpp
	KScanPartitionJob.cpp
	KSetParametersJob.cpp
	KUninitializeJob.cpp

	# utilities
	Locker.cpp
	RWLocker.cpp

	# disk device types
	DiskDeviceTypes.cpp
;

LinkSharedOSLibs libdisk_device_manager.so
	: <boot!home!config!lib>libkernelland_emu.so ;

# Hack to enable ddm_userland_interface.cpp to include vm.h but not make
# kernel/stdio.h shadow the real stdio.h
ObjectHdrs [ FGristFiles ddm_userland_interface$(SUFOBJ) ]
	: [ PrivateHeaders kernel [ FDirName kernel arch $(OBOS_ARCH) ] ] ;

# KFileDiskDevice.cpp needs the virtualdrive.h Header. Add it here to not
# contaminate the include paths for the other files.
ObjectHdrs [ FGristFiles KFileDiskDevice$(SUFOBJ) ]
	: [ FDirName $(OBOS_TOP) src tests kits storage virtualdrive ] ;
