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