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