1SubDir HAIKU_TOP src system kernel ; 2 3{ 4 local defines = 5 HAIKU_ARCH=\\\"$(TARGET_ARCH)\\\" 6 ; 7 8 defines = [ FDefines $(defines) ] ; 9 SubDirCcFlags $(defines) ; 10 SubDirC++Flags $(defines) ; 11} 12 13SEARCH_SOURCE += [ FDirName $(SUBDIR) locks ] ; 14SEARCH_SOURCE += [ FDirName $(SUBDIR) scheduler ] ; 15 16UsePrivateHeaders libroot ; 17UsePrivateHeaders shared ; 18UsePrivateHeaders runtime_loader ; 19 20AddResources kernel_$(TARGET_ARCH) : kernel.rdef ; 21 22SetVersionScript kernel_$(TARGET_ARCH) : kernel_versions ; 23SetVersionScript kernel.so : kernel_versions ; 24 25KernelMergeObject kernel_core.o : 26 boot_item.cpp 27 boot_splash.cpp 28 commpage.cpp 29 condition_variable.cpp 30 cpu.cpp 31 DPC.cpp 32 elf.cpp 33 guarded_heap.cpp 34 heap.cpp 35 image.cpp 36 int.cpp 37 kernel_daemon.cpp 38 linkhack.c 39 listeners.cpp 40 low_resource_manager.cpp 41 main.cpp 42 module.cpp 43 Notifications.cpp 44 port.cpp 45 real_time_clock.cpp 46 sem.cpp 47 shutdown.cpp 48 signal.cpp 49 system_info.cpp 50 smp.cpp 51 syscalls.cpp 52 team.cpp 53 thread.cpp 54 timer.cpp 55 UserEvent.cpp 56 usergroup.cpp 57 UserTimer.cpp 58 wait_for_objects.cpp 59 60 # locks 61 lock.cpp 62 user_mutex.cpp 63 64 # scheduler 65 scheduler.cpp 66 scheduler_affine.cpp 67 scheduler_simple.cpp 68 scheduler_simple_smp.cpp 69 scheduler_tracing.cpp 70 scheduling_analysis.cpp 71 72 : $(TARGET_KERNEL_PIC_CCFLAGS) 73; 74 75# Generate the header defining macros for C++ structure sizes. 76local kernelC++StructSizesHeader = [ FGristFiles kernel_c++_struct_sizes.h ] ; 77TARGET_HDRS_$(TARGET_PACKAGING_ARCH) on $(kernelC++StructSizesHeader) 78 = [ on $(kernelC++StructSizesHeader) 79 return $(TARGET_HDRS_$(TARGET_PACKAGING_ARCH)) ] 80 $(TARGET_PRIVATE_KERNEL_HEADERS) ; 81CreateAsmStructOffsetsHeader $(kernelC++StructSizesHeader) 82 : kernel_c++_structs.cpp ; 83 84# We need to specify the dependency on the generated syscalls files explicitly. 85Includes [ FGristFiles syscalls.cpp ] 86 : 87 <syscalls!$(TARGET_PACKAGING_ARCH)>syscall_dispatcher.h 88 <syscalls!$(TARGET_PACKAGING_ARCH)>syscall_table.h 89 <syscalls!$(TARGET_PACKAGING_ARCH)>syscall_numbers.h 90; 91 92# TODO: fix or update binutils for ppc, in the meantime this should get things going. 93local linkHackLdFlags ; 94if $(TARGET_ARCH) = ppc { 95 linkHackLdFlags = -Bdynamic ; 96} else { 97 linkHackLdFlags = -shared -Bdynamic ; 98} 99 100KernelLd linkhack.so : 101 <$(SOURCE_GRIST)>linkhack.o 102 : 103 : 104 $(linkHackLdFlags) 105; 106 107KernelLd kernel_$(TARGET_ARCH) : 108 kernel_cache.o 109 kernel_core.o 110 kernel_debug.o 111 kernel_device_manager.o 112 kernel_disk_device_manager.o 113 kernel_fs.o 114 kernel_messaging.o 115 kernel_posix.o 116 kernel_slab.o 117 kernel_util.o 118 kernel_vm.o 119 120 kernel_arch_$(TARGET_KERNEL_ARCH).o 121 kernel_platform_$(TARGET_BOOT_PLATFORM).o 122 123 linkhack.so 124 125 # kernel parts borrowed from libroot and others 126 kernel_os_main.o 127 kernel_os_arch_$(TARGET_ARCH).o 128 kernel_lib_posix.o 129 kernel_lib_posix_arch_$(TARGET_ARCH).o 130 kernel_misc.o 131 132 $(TARGET_KERNEL_LIBSUPC++) 133 134 : $(HAIKU_TOP)/src/system/ldscripts/$(TARGET_ARCH)/kernel.ld 135 : -Bdynamic -export-dynamic -dynamic-linker /foo/bar 136 $(TARGET_KERNEL_PIC_LINKFLAGS) 137 : 138; 139 140if $(HAIKU_ARCH) = x86_64 { 141 # Cannot relink everything as a shared object on x86_64 as shared library 142 # code is required to be position-independent. Instead create a copy of the 143 # executable kernel image and change the ELF header type to DYN. A bit of 144 # a hack, but avoids having to recompile a PIC copy of the kernel code. 145 # kernel.so is only used when linking modules to provide symbol information, 146 # this is sufficient for that purpose. 147 KernelSo kernel.so : kernel_$(TARGET_ARCH) ; 148} else { 149 KernelLd kernel.so : 150 kernel_cache.o 151 kernel_core.o 152 kernel_debug.o 153 kernel_device_manager.o 154 kernel_disk_device_manager.o 155 kernel_fs.o 156 kernel_messaging.o 157 kernel_posix.o 158 kernel_slab.o 159 kernel_util.o 160 kernel_vm.o 161 162 kernel_arch_$(TARGET_KERNEL_ARCH).o 163 kernel_platform_$(TARGET_BOOT_PLATFORM).o 164 165 linkhack.so 166 167 # kernel libroot parts 168 kernel_os_main.o 169 kernel_os_arch_$(TARGET_ARCH).o 170 kernel_lib_posix.o 171 kernel_lib_posix_arch_$(TARGET_ARCH).o 172 kernel_misc.o 173 174 $(TARGET_KERNEL_LIBSUPC++) 175 176 : $(HAIKU_TOP)/src/system/ldscripts/$(TARGET_ARCH)/kernel.ld 177 : -Bdynamic -shared -export-dynamic -dynamic-linker /foo/bar 178 $(TARGET_KERNEL_PIC_LINKFLAGS) 179 ; 180} 181 182NotFile kernel ; 183Depends kernel : kernel_$(TARGET_ARCH) ; 184Depends kernel.so : kernel ; 185 # kernel.so will be rebuilt with the kernel 186 187# propagate the container update variable from kernel to kernel_$(TARGET_ARCH) 188PropagateContainerUpdateTargetFlags kernel_$(TARGET_ARCH) : kernel ; 189 190# Copy kernel and update the copy's revision section. We link everything 191# against the original, but the copy will end up on the disk image (this way 192# we avoid unnecessary dependencies). The copy will be located in a subdirectory. 193if $(TARGET_PLATFORM) = haiku { 194 MakeLocate <revisioned>kernel_$(TARGET_ARCH) 195 : [ FDirName $(TARGET_DEBUG_$(DEBUG)_LOCATE_TARGET) revisioned ] ; 196 CopySetHaikuRevision <revisioned>kernel_$(TARGET_ARCH) 197 : kernel_$(TARGET_ARCH) ; 198} 199 200 201SubInclude HAIKU_TOP src system kernel arch ; 202SubInclude HAIKU_TOP src system kernel cache ; 203SubInclude HAIKU_TOP src system kernel device_manager ; 204SubInclude HAIKU_TOP src system kernel debug ; 205SubInclude HAIKU_TOP src system kernel disk_device_manager ; 206SubInclude HAIKU_TOP src system kernel fs ; 207SubInclude HAIKU_TOP src system kernel lib ; 208SubInclude HAIKU_TOP src system kernel messaging ; 209SubInclude HAIKU_TOP src system kernel posix ; 210SubInclude HAIKU_TOP src system kernel slab ; 211SubInclude HAIKU_TOP src system kernel util ; 212SubInclude HAIKU_TOP src system kernel vm ; 213 214if $(TARGET_BOOT_PLATFORM) { 215 SubInclude HAIKU_TOP src system kernel platform $(TARGET_BOOT_PLATFORM) ; 216} 217