xref: /haiku/src/system/kernel/Jamfile (revision c80809a3ab0b0a2ce53ea861a2b00ace24ff452d)
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	heap.cpp
34	image.cpp
35	int.cpp
36	kernel_daemon.cpp
37	linkhack.c
38	listeners.cpp
39	low_resource_manager.cpp
40	main.cpp
41	module.cpp
42	Notifications.cpp
43	port.cpp
44	real_time_clock.cpp
45	sem.cpp
46	shutdown.cpp
47	signal.cpp
48	system_info.cpp
49	smp.cpp
50	syscalls.cpp
51	team.cpp
52	thread.cpp
53	timer.cpp
54	UserEvent.cpp
55	usergroup.cpp
56	UserTimer.cpp
57	wait_for_objects.cpp
58
59	# locks
60	lock.cpp
61	user_mutex.cpp
62
63	# scheduler
64	scheduler.cpp
65	scheduler_affine.cpp
66	scheduler_simple.cpp
67	scheduler_simple_smp.cpp
68	scheduler_tracing.cpp
69	scheduling_analysis.cpp
70
71	: $(TARGET_KERNEL_PIC_CCFLAGS)
72;
73
74# Generate the header defining macros for C++ structure sizes.
75local kernelC++StructSizesHeader = [ FGristFiles kernel_c++_struct_sizes.h ] ;
76TARGET_HDRS on $(kernelC++StructSizesHeader)
77	= [ on $(kernelC++StructSizesHeader) return $(TARGET_HDRS) ]
78		$(TARGET_PRIVATE_KERNEL_HEADERS) ;
79CreateAsmStructOffsetsHeader $(kernelC++StructSizesHeader)
80	: kernel_c++_structs.cpp ;
81
82# We need to specify the dependency on the generated syscalls files explicitly.
83Includes [ FGristFiles syscalls.cpp ]
84	: <syscalls>syscall_dispatcher.h <syscalls>syscall_table.h
85	  <syscalls>syscall_numbers.h
86;
87
88# TODO: fix or update binutils for ppc, in the meantime this should get things going.
89local linkHackLdFlags ;
90if $(TARGET_ARCH) = ppc {
91	linkHackLdFlags = -Bdynamic ;
92} else {
93	linkHackLdFlags = -shared -Bdynamic ;
94}
95
96KernelLd linkhack.so :
97	<$(SOURCE_GRIST)>linkhack.o
98	:
99	:
100	$(linkHackLdFlags)
101;
102
103KernelLd kernel_$(TARGET_ARCH) :
104	kernel_cache.o
105	kernel_core.o
106	kernel_debug.o
107	kernel_device_manager.o
108	kernel_disk_device_manager.o
109	kernel_fs.o
110	kernel_messaging.o
111	kernel_posix.o
112	kernel_slab.o
113	kernel_util.o
114	kernel_vm.o
115
116	kernel_arch_$(TARGET_ARCH).o
117	kernel_platform_$(TARGET_BOOT_PLATFORM).o
118
119	linkhack.so
120
121	# kernel parts borrowed from libroot and others
122	kernel_os_main.o
123	kernel_os_arch_$(TARGET_ARCH).o
124	kernel_lib_posix.o
125	kernel_lib_posix_arch_$(TARGET_ARCH).o
126	kernel_misc.o
127
128	$(HAIKU_STATIC_LIBSUPC++)
129
130	: $(HAIKU_TOP)/src/system/ldscripts/$(TARGET_ARCH)/kernel.ld
131	: -Bdynamic -export-dynamic -dynamic-linker /foo/bar
132	  $(TARGET_KERNEL_PIC_LINKFLAGS)
133	:
134;
135
136KernelLd kernel.so :
137	kernel_cache.o
138	kernel_core.o
139	kernel_debug.o
140	kernel_device_manager.o
141	kernel_disk_device_manager.o
142	kernel_fs.o
143	kernel_messaging.o
144	kernel_posix.o
145	kernel_slab.o
146	kernel_util.o
147	kernel_vm.o
148
149	kernel_arch_$(TARGET_ARCH).o
150	kernel_platform_$(TARGET_BOOT_PLATFORM).o
151
152	linkhack.so
153
154	# kernel libroot parts
155	kernel_os_main.o
156	kernel_os_arch_$(TARGET_ARCH).o
157	kernel_lib_posix.o
158	kernel_lib_posix_arch_$(TARGET_ARCH).o
159	kernel_misc.o
160
161	$(HAIKU_STATIC_LIBSUPC++)
162
163	: $(HAIKU_TOP)/src/system/ldscripts/$(TARGET_ARCH)/kernel.ld
164	: -Bdynamic -shared -export-dynamic -dynamic-linker /foo/bar
165	  $(TARGET_KERNEL_PIC_LINKFLAGS)
166;
167
168NotFile kernel ;
169Depends kernel : kernel_$(TARGET_ARCH) ;
170Depends kernel.so : kernel ;
171	# kernel.so will be rebuilt with the kernel
172
173# propagate HAIKU_INCLUDE_IN_IMAGE variable from kernel to kernel_$(TARGET_ARCH)
174HAIKU_INCLUDE_IN_IMAGE on kernel_$(TARGET_ARCH)
175		= [ on kernel return $(HAIKU_INCLUDE_IN_IMAGE) ] ;
176
177# Copy kernel and update the copy's revision section. We link everything
178# against the original, but the copy will end up on the disk image (this way
179# we avoid unnecessary dependencies). The copy will be located in a subdirectory.
180if $(TARGET_PLATFORM) = haiku {
181	MakeLocate <revisioned>kernel_$(TARGET_ARCH)
182		: [ FDirName $(TARGET_DEBUG_$(DEBUG)_LOCATE_TARGET) revisioned ] ;
183	CopySetHaikuRevision <revisioned>kernel_$(TARGET_ARCH)
184		: kernel_$(TARGET_ARCH) ;
185}
186
187
188SubInclude HAIKU_TOP src system kernel arch ;
189SubInclude HAIKU_TOP src system kernel cache ;
190SubInclude HAIKU_TOP src system kernel device_manager ;
191SubInclude HAIKU_TOP src system kernel debug ;
192SubInclude HAIKU_TOP src system kernel disk_device_manager ;
193SubInclude HAIKU_TOP src system kernel fs ;
194SubInclude HAIKU_TOP src system kernel lib ;
195SubInclude HAIKU_TOP src system kernel messaging ;
196SubInclude HAIKU_TOP src system kernel posix ;
197SubInclude HAIKU_TOP src system kernel slab ;
198SubInclude HAIKU_TOP src system kernel util ;
199SubInclude HAIKU_TOP src system kernel vm ;
200
201if $(TARGET_BOOT_PLATFORM) {
202	SubInclude HAIKU_TOP src system kernel platform $(TARGET_BOOT_PLATFORM) ;
203}
204