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