xref: /haiku/src/system/boot/Jamfile (revision 7bdeef54a24d3417300f251af891df962b638b9b)
1SubDir HAIKU_TOP src system boot ;
2
3SetupFeatureObjectsDir $(TARGET_BOOT_PLATFORM) ;
4
5DEFINES += _BOOT_MODE ;
6
7if $(TARGET_ARCH) = x86_64 && $(TARGET_BOOT_PLATFORM) = efi {
8	SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) libroot os arch
9				x86_64 ] ;
10} else {
11	SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) libroot os arch
12				$(TARGET_KERNEL_ARCH) ] ;
13}
14
15SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) libroot posix string ] ;
16SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) libroot posix stdlib ] ;
17SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) libroot posix locale ] ;
18SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) kernel lib ] ;
19
20UsePrivateHeaders [ FDirName libroot locale ] ;
21
22local extraSources = ;
23if $(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) = 2 {
24	extraSources += atomic.S ;
25}
26
27BootMergeObject boot_libroot.o :
28	abs.c
29	ctype.cpp
30	LocaleData.cpp
31	qsort.c
32	kernel_vsprintf.cpp
33	memchr.c
34	memcmp.c
35	memmove.c
36	strdup.cpp
37	strndup.cpp
38	strlen.cpp
39	strnlen.cpp
40	strcmp.c
41	strcasecmp.c
42	strncmp.c
43	strcat.c
44	strcpy.c
45	strerror.c
46	strlcat.c
47	strlcpy.c
48	strchr.c
49	strrchr.c
50	strtol.c
51	$(extraSources)
52;
53
54AddResources haiku_loader : boot_loader.rdef ;
55
56BootLd boot_loader_$(TARGET_BOOT_PLATFORM) :
57	boot_platform_$(TARGET_BOOT_PLATFORM).o
58	boot_arch_$(TARGET_KERNEL_ARCH).o
59	boot_loader.a
60	boot_net.a
61	boot_partitions.a
62
63	# file systems
64	boot_bfs.a
65	boot_amiga_ffs.a
66	boot_tarfs.a
67	boot_fatfs.a
68	boot_packagefs.a
69
70	boot_loader.a
71		# a second time, so undefined references in the file systems can be
72		# resolved
73
74	# needed by tarfs, packagefs, and video_splash.cpp
75	boot_zlib.a
76
77	# libroot functions needed by the stage2 boot loader
78	boot_libroot.o
79
80	: $(HAIKU_TOP)/src/system/ldscripts/$(TARGET_ARCH)/boot_loader_$(TARGET_BOOT_PLATFORM).ld
81	: $(TARGET_BOOT_LDFLAGS)
82;
83
84rule BuildCoffLoader {
85	local coffLoader = $(1) ;
86	local bootLoader = $(2) ;
87	# XXX: eventually switch on arch
88	COFF_FORMAT on $(coffLoader) = xcoff-powermac ;
89	HACK_COFF on $(coffLoader) = <build>hack-coff ;
90
91	Depends $(coffLoader) : <build>hack-coff ;
92	Depends $(coffLoader) : $(bootLoader) ;
93	MakeLocateDebug $(coffLoader) ;
94}
95
96actions BuildCoffLoader bind HACK_COFF {
97	rm -f $(1)
98	# get the address of the COFF entry
99	$(TARGET_OBJCOPY_$(TARGET_PACKAGING_ARCH)) -O symbolsrec $(2) $(2).syms
100	EP=`grep _coff_start $(2).syms | tr -d '\r' | cut -d'$' -f2`
101	rm -f $(2).syms
102	# copy to XCOFF format and patch the entry point
103	$(TARGET_OBJCOPY_$(TARGET_PACKAGING_ARCH)) -O $(COFF_FORMAT) --set-start="0x${EP}" $(2) $(1)
104	#$(CP) $(2) $(1)
105	# fill-in some fields objcopy missed
106	$(HACK_COFF) $(1)
107}
108
109BuildCoffLoader boot_loader_$(TARGET_BOOT_PLATFORM)_coff : boot_loader_$(TARGET_BOOT_PLATFORM) ;
110
111rule BuildBiosLoader {
112	local haikuLoader = $(1) ;
113	local bootLoader = $(2) ;
114
115	Depends $(haikuLoader) : $(bootLoader) ;
116	MakeLocateDebug $(haikuLoader) ;
117
118	on $(1) ResAttr $(1) : $(RESFILES) : false ;
119	if ! [ on $(1) return $(DONT_USE_BEOS_RULES) ] {
120		SetType $(1) ;
121		MimeSet $(1) ;
122	}
123}
124
125actions BuildBiosLoader {
126	rm -f $(1)
127	$(TARGET_OBJCOPY_$(TARGET_PACKAGING_ARCH)) -O binary $(2) $(1)
128}
129
130BuildBiosLoader haiku_loader : boot_loader_$(TARGET_BOOT_PLATFORM) ;
131
132# different target for PXE, to be build with TARGET_BOOT_PLATFORM=pxe_ia32 jam pxehaiku-loader
133BuildBiosLoader pxehaiku-loader : boot_loader_$(TARGET_BOOT_PLATFORM) ;
134
135rule BuildEFILoader {
136	local efiLoader = $(1) ;
137	local bootLoader = $(2) ;
138
139	Depends $(efiLoader) : $(bootLoader) ;
140	MakeLocateDebug $(efiLoader) ;
141}
142
143actions BuildEFILoader {
144	rm -f $(1)
145	$(TARGET_OBJCOPY_$(TARGET_PACKAGING_ARCH)) -j .text -j .sdata -j .data -j .dynamic -j .dynsym \
146	-j .rel -j .rela -j .reloc --target=efi-app-x86_64 $(2) $(1)
147}
148
149BuildEFILoader haiku_loader.efi : boot_loader_$(TARGET_BOOT_PLATFORM) ;
150
151SubInclude HAIKU_TOP src system boot arch $(TARGET_KERNEL_ARCH) ;
152SubInclude HAIKU_TOP src system boot loader ;
153SubInclude HAIKU_TOP src system boot platform ;
154