diff --git a/build/jam/ArchitectureRules b/build/jam/ArchitectureRules index 1ea26991d7..8ae0113531 100644 --- a/build/jam/ArchitectureRules +++ b/build/jam/ArchitectureRules @@ -323,7 +323,7 @@ rule KernelArchitectureSetup architecture case m68k : HAIKU_KERNEL_PLATFORM ?= atari_m68k ; - HAIKU_BOOT_TARGETS += atari_m68k ; + HAIKU_BOOT_TARGETS += amiga_m68k atari_m68k ; switch $(HAIKU_KERNEL_PLATFORM) { case atari_m68k : { diff --git a/build/jam/repositories/HaikuPortsCross/m68k b/build/jam/repositories/HaikuPortsCross/m68k index 6aa82af2d0..af22126a4c 100644 --- a/build/jam/repositories/HaikuPortsCross/m68k +++ b/build/jam/repositories/HaikuPortsCross/m68k @@ -20,6 +20,8 @@ BootstrapPackageRepository HaikuPortsCross : # source packages + binutils_bootstrap + gcc_bootstrap libsolv_bootstrap zlib_bootstrap : diff --git a/src/system/boot/Jamfile b/src/system/boot/Jamfile index c55e2b3293..826c677197 100644 --- a/src/system/boot/Jamfile +++ b/src/system/boot/Jamfile @@ -150,6 +150,71 @@ actions BuildUImageScript1 rm -f $(<).txt } +# the bootsector on haiku_loader.amiga_m68k must be checksummed +rule ChecksumAmigaLoader +{ + local haikuLoader = $(1) ; + local checksummer = fixup_amiga_boot_checksum ; + + Depends $(haikuLoader) : $(checksummer) ; + + TARGET_CHECKSUM on $(haikuLoader) = $(checksummer) ; +} + +actions ChecksumAmigaLoader bind TARGET_CHECKSUM +{ + $(TARGET_CHECKSUM) $(1) +} + +# the bootsector on haiku_loader.atari_m68k must be checksummed +rule ChecksumAtariLoader +{ + local haikuLoader = $(1) ; + local checksummer = fixup_tos_boot_checksum ; + + Depends $(haikuLoader) : $(checksummer) ; + + TARGET_CHECKSUM on $(haikuLoader) = $(checksummer) ; +} + +actions ChecksumAtariLoader bind TARGET_CHECKSUM { + $(TARGET_CHECKSUM) $(1) +} + + + +# atari_m68k: AUTO folder PRG target +# based on KernelLd +rule AtariBootPrgLd +{ + # AtariBootPrgLd : : : ; + + LINK on $(1) = $(TARGET_LD_$(TARGET_PACKAGING_ARCH)) ; + + LINKFLAGS on $(1) = $(4) ; + if $(3) { LINKFLAGS on $(1) += --script=$(3) ; } + + # Remove any preset LINKLIBS + LINKLIBS on $(1) = ; + + # TODO: Do we really want to invoke SetupKernel here? The objects should + # have been compiled with KernelObjects anyway, so we're doing that twice. + SetupKernel $(2) ; + + # Show that we depend on the libraries we need + LocalClean clean : $(1) ; + LocalDepends all : $(1) ; + Depends $(1) : $(2) ; + + MakeLocateDebug $(1) ; + +} + +actions AtariBootPrgLd +{ + $(LINK) $(LINKFLAGS) -o "$(1)" "$(2)" $(LINKLIBS) ; +} + local extraSources = ; if $(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) = 2 { @@ -265,6 +330,20 @@ for platform in [ MultiBootSubDirSetup ] { -n 'Haiku $(TARGET_KERNEL_ARCH) floppyboot' ; BuildUImageScript boot.scr : $(HAIKU_MMC_UBOOT_SCRIPT) ; + case amiga_m68k : + BuildBiosLoader haiku_loader.$(TARGET_BOOT_PLATFORM) : boot_loader_$(TARGET_BOOT_PLATFORM) ; + ChecksumAmigaLoader haiku_loader.$(TARGET_BOOT_PLATFORM) ; + + case atari_m68k : + BuildBiosLoader haiku_loader.$(TARGET_BOOT_PLATFORM) : boot_loader_$(TARGET_BOOT_PLATFORM) ; + ChecksumAtariLoader haiku_loader.$(TARGET_BOOT_PLATFORM) ; + + AtariBootPrgLd haiku.prg : + boot_loader_$(TARGET_BOOT_PLATFORM) + : $(HAIKU_TOP)/src/system/ldscripts/$(TARGET_ARCH)/boot_prg_$(TARGET_BOOT_PLATFORM).ld + : -Bstatic + ; + case * : Exit "Currently unsupported haiku_loader:" $(TARGET_BOOT_PLATFORM) ; } diff --git a/src/system/boot/arch/m68k/Jamfile b/src/system/boot/arch/m68k/Jamfile index e6e5b947a6..3460f071f7 100644 --- a/src/system/boot/arch/m68k/Jamfile +++ b/src/system/boot/arch/m68k/Jamfile @@ -1,43 +1,57 @@ SubDir HAIKU_TOP src system boot arch m68k ; -DEFINES += _BOOT_MODE ; +local platform ; +for platform in [ MultiBootSubDirSetup amiga_m68k atari_m68k ] { + on $(platform) { + DEFINES += _BOOT_MODE ; -# TODO: Is there any reason to recompile arch_string.S here? -local librootArchObjects = -# arch_string.o - arch_string.S -; + local kernelArchSources = + arch_elf.cpp + ; -local kernelLibArchObjects = - byteorder.o - memset.o -; + local librootStringArchSources = + arch_string.S + ; -BootMergeObject boot_arch_$(TARGET_KERNEL_ARCH).o : - arch_elf.cpp - $(librootArchObjects) - : - : - $(kernelLibArchObjects) -; + local librootOsArchSources = + byteorder.S + ; -BootMergeObject boot_arch_m68k_030.o : - mmu_030.cpp - : -Wno-unused -mcpu=68030 -; + local librootStringGenericSources = + #memcpy.c + memset.c + ; -BootMergeObject boot_arch_m68k_040.o : - mmu_040.cpp - : -Wno-unused -mcpu=68040 -Wa,-m68040 -; + BootMergeObject [ FGristFiles boot_arch_$(TARGET_KERNEL_ARCH).o ] : + $(kernelArchSources) + $(librootStringArchSources) + $(librootOsArchSources) + $(librootStringGenericSources) + : + ; -BootMergeObject boot_arch_m68k_060.o : - mmu_060.cpp - : -Wno-unused -mcpu=68060 -; + BootMergeObject boot_arch_m68k_030.o : + mmu_030.cpp + : -Wno-unused -mcpu=68030 + ; -SEARCH on [ FGristFiles arch_elf.cpp ] - = [ FDirName $(HAIKU_TOP) src system kernel arch $(TARGET_KERNEL_ARCH) ] ; + BootMergeObject boot_arch_m68k_040.o : + mmu_040.cpp + : -Wno-unused -mcpu=68040 -Wa,-m68040 + ; -SEARCH on [ FGristFiles $(librootArchObjects) ] - = [ FDirName $(HAIKU_TOP) src system libroot posix string arch $(TARGET_ARCH) ] ; + BootMergeObject boot_arch_m68k_060.o : + mmu_060.cpp + : -Wno-unused -mcpu=68060 + ; + + SEARCH on [ FGristFiles $(kernelArchSources) ] + = [ FDirName $(HAIKU_TOP) src system kernel arch m68k ] ; + SEARCH on [ FGristFiles $(librootStringArchSources) ] + = [ FDirName $(HAIKU_TOP) src system libroot posix string arch m68k ] ; + SEARCH on [ FGristFiles $(librootOsArchSources) ] + = [ FDirName $(HAIKU_TOP) src system libroot os arch m68k ] ; + SEARCH on [ FGristFiles $(librootStringGenericSources) ] + = [ FDirName $(HAIKU_TOP) src system libroot posix string arch generic ] ; + } +} diff --git a/src/system/boot/platform/amiga_m68k/Jamfile b/src/system/boot/platform/amiga_m68k/Jamfile index e923167fe0..def1729c43 100644 --- a/src/system/boot/platform/amiga_m68k/Jamfile +++ b/src/system/boot/platform/amiga_m68k/Jamfile @@ -1,8 +1,8 @@ SubDir HAIKU_TOP src system boot platform amiga_m68k ; -SubDirHdrs $(HAIKU_TOP) headers private kernel boot platform $(TARGET_BOOT_PLATFORM) ; +SubDirHdrs $(HAIKU_TOP) headers private kernel boot platform amiga_m68k ; -UsePrivateHeaders [ FDirName kernel boot platform $(TARGET_BOOT_PLATFORM) ] ; +UsePrivateHeaders [ FDirName kernel boot platform amiga_m68k ] ; UsePrivateHeaders [ FDirName kernel platform $(TARGET_BOOT_PLATFORM) ] ; UsePrivateHeaders [ FDirName kernel disk_device_manager ] ; UsePrivateHeaders [ FDirName graphics common ] ; @@ -17,74 +17,56 @@ UsePrivateHeaders [ FDirName storage ] ; SubDirC++Flags $(defines) -fno-rtti ; } -#SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons accelerants common ] ; +local platform ; +for platform in [ MultiBootSubDirSetup amiga_m68k ] { + on $(platform) { + #SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons accelerants common ] ; -BootMergeObject boot_platform_amiga_m68k_shell.o : - shell.S - : -Wa,--pcrel -; + BootMergeObject boot_platform_amiga_m68k_shell.o : + shell.S + : -Wa,--pcrel + ; -BootMergeObject boot_platform_amiga_m68k_other.o : -# shell.S - start.cpp - rom_calls.cpp - debug.cpp - #bios.S - console.cpp - #serial.cpp - Handle.cpp - devices.cpp - keyboard.cpp - menu.cpp - mmu.cpp - cpu.cpp - #smp.cpp - #smp_trampoline.S -# support.S - video.cpp - #apm.cpp + BootMergeObject boot_platform_amiga_m68k_other.o : + # shell.S + start.cpp + rom_calls.cpp + debug.cpp + #bios.S + console.cpp + #serial.cpp + Handle.cpp + devices.cpp + keyboard.cpp + menu.cpp + mmu.cpp + cpu.cpp + #smp.cpp + #smp_trampoline.S + # support.S + video.cpp + #apm.cpp - # VESA/DDC EDID - #decode_edid.c - #dump_edid.c + # VESA/DDC EDID + #decode_edid.c + #dump_edid.c - : #-Wa,--pcrel - : boot_platform_generic.a -; + : #-Wa,--pcrel + : boot_platform_generic_amiga_m68k.a + ; -BootMergeObject boot_platform_amiga_m68k.o : - : : - boot_platform_amiga_m68k_shell.o - boot_platform_amiga_m68k_other.o - boot_arch_m68k_030.o - boot_arch_m68k_040.o -; - - -# the bootsector in haiku_loader must be checksummed -rule ChecksumAmigaLoader -{ - local haikuLoader = $(1) ; - local checksummer = fixup_amiga_boot_checksum ; - - Depends $(haikuLoader) : $(checksummer) ; - - TARGET_CHECKSUM on $(haikuLoader) = $(checksummer) ; - + BootMergeObject boot_platform_amiga_m68k.o : + : : + boot_platform_amiga_m68k_shell.o + boot_platform_amiga_m68k_other.o + boot_arch_m68k_030.o + boot_arch_m68k_040.o + ; + } } - -actions ChecksumAmigaLoader bind TARGET_CHECKSUM -{ - $(TARGET_CHECKSUM) $(1) -} - - -ChecksumAmigaLoader haiku_loader ; - - SEARCH on [ FGristFiles $(genericPlatformSources) ] = [ FDirName $(HAIKU_TOP) src system boot platform generic ] ; diff --git a/src/system/boot/platform/atari_m68k/Jamfile b/src/system/boot/platform/atari_m68k/Jamfile index 0332881c8c..a8b5ba5fe7 100644 --- a/src/system/boot/platform/atari_m68k/Jamfile +++ b/src/system/boot/platform/atari_m68k/Jamfile @@ -1,6 +1,6 @@ SubDir HAIKU_TOP src system boot platform atari_m68k ; -SubDirHdrs $(HAIKU_TOP) headers private kernel boot platform $(TARGET_BOOT_PLATFORM) ; +SubDirHdrs $(HAIKU_TOP) headers private kernel boot platform atari_m68k ; UsePrivateHeaders [ FDirName kernel boot platform $(TARGET_BOOT_PLATFORM) ] ; UsePrivateHeaders [ FDirName kernel platform $(TARGET_BOOT_PLATFORM) ] ; @@ -17,123 +17,61 @@ UsePrivateHeaders [ FDirName storage ] ; SubDirC++Flags $(defines) -fno-rtti ; } -#SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons accelerants common ] ; +local platform ; +for platform in [ MultiBootSubDirSetup atari_m68k ] { + on $(platform) { + #SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons accelerants common ] ; -BootMergeObject boot_platform_atari_m68k_shell.o : - shell.S - : -Wa,--pcrel -; + BootMergeObject boot_platform_atari_m68k_shell.o : + shell.S + : -Wa,--pcrel + ; -# cpu-specific stuff -# should be moved to boot/arch/m68k/... -# TODO: add 020+68851 support + # cpu-specific stuff + # should be moved to boot/arch/m68k/... + # TODO: add 020+68851 support -BootMergeObject boot_platform_atari_m68k_other.o : -# shell.S - start.cpp - toscalls.cpp - debug.cpp - #bios.S - console.cpp - #serial.cpp - Handle.cpp - devices.cpp - keyboard.cpp - menu.cpp - mmu.cpp - cpu.cpp - #smp.cpp - #smp_trampoline.S -# support.S - video.cpp - #apm.cpp + BootMergeObject boot_platform_atari_m68k_other.o : + # shell.S + start.cpp + toscalls.cpp + debug.cpp + #bios.S + console.cpp + #serial.cpp + Handle.cpp + devices.cpp + keyboard.cpp + menu.cpp + mmu.cpp + cpu.cpp + #smp.cpp + #smp_trampoline.S + # support.S + video.cpp + #apm.cpp - # VESA/DDC EDID - #decode_edid.c - #dump_edid.c + # VESA/DDC EDID + #decode_edid.c + #dump_edid.c - : #-Wa,--pcrel - : boot_platform_generic.a -; + : #-Wa,--pcrel + : boot_platform_generic.a + ; -BootMergeObject boot_platform_atari_m68k.o : - : : - boot_platform_atari_m68k_shell.o - boot_platform_atari_m68k_other.o - boot_arch_m68k_030.o - boot_arch_m68k_040.o -; - - -# the bootsector in haiku_loader must be checksummed - - -rule ChecksumAtariLoader -{ - local haikuLoader = $(1) ; - local checksummer = fixup_tos_boot_checksum ; - - Depends $(haikuLoader) : $(checksummer) ; - - TARGET_CHECKSUM on $(haikuLoader) = $(checksummer) ; - + BootMergeObject boot_platform_atari_m68k.o : + : : + boot_platform_atari_m68k_shell.o + boot_platform_atari_m68k_other.o + boot_arch_m68k_030.o + boot_arch_m68k_040.o + ; + } } - -actions ChecksumAtariLoader bind TARGET_CHECKSUM { - $(TARGET_CHECKSUM) $(1) -} - - -ChecksumAtariLoader haiku_loader ; - - -# AUTO folder PRG target - - -# based on KernelLd -rule AtariBootPrgLd -{ - # AtariBootPrgLd : : : ; - - LINK on $(1) = $(TARGET_LD_$(TARGET_PACKAGING_ARCH)) ; - - LINKFLAGS on $(1) = $(4) ; - if $(3) { LINKFLAGS on $(1) += --script=$(3) ; } - - # Remove any preset LINKLIBS - LINKLIBS on $(1) = ; - - # TODO: Do we really want to invoke SetupKernel here? The objects should - # have been compiled with KernelObjects anyway, so we're doing that twice. - SetupKernel $(2) ; - - # Show that we depend on the libraries we need - LocalClean clean : $(1) ; - LocalDepends all : $(1) ; - Depends $(1) : $(2) ; - - MakeLocateDebug $(1) ; - -} - - -actions AtariBootPrgLd -{ - $(LINK) $(LINKFLAGS) -o "$(1)" "$(2)" $(LINKLIBS) ; -} - - -AtariBootPrgLd haiku.prg : - boot_loader_$(TARGET_BOOT_PLATFORM) - : $(HAIKU_TOP)/src/system/ldscripts/$(TARGET_ARCH)/boot_prg_$(TARGET_BOOT_PLATFORM).ld - : -Bstatic -; - - SEARCH on [ FGristFiles $(genericPlatformSources) ] = [ FDirName $(HAIKU_TOP) src system boot platform generic ] ;