diff --git a/Makefile b/Makefile index adf09ce..b8f33b5 100644 --- a/Makefile +++ b/Makefile @@ -86,7 +86,7 @@ FORCE: # A method of creating a listing for any binary %.list: % - objdump -C -M intel -D $< > $@ + $(OBJDUMP) -C -M intel -D $< > $@ # Wireshark wireshark: FORCE diff --git a/mk/config.mk b/mk/config.mk index 6d6ae1f..965ff74 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -1,23 +1,20 @@ # Configuration ARCH?=x86_64 INSTALLER_FLAGS?=--cookbook=cookbook +PREFIX_RUSTC?=0 # Per host variables UNAME := $(shell uname) ifeq ($(UNAME),Darwin) ECHO=/bin/echo FUMOUNT=sudo umount - export LD=$(ARCH)-elf-ld export NPROC=sysctl -n hw.ncpu - export STRIP=$(ARCH)-elf-strip VB_AUDIO=coreaudio VBM="/Applications/VirtualBox.app/Contents/MacOS/VBoxManage" else ECHO=echo FUMOUNT=fusermount -u - export LD=ld export NPROC=nproc - export STRIP=strip VB_AUDIO="pulse" VBM=VBoxManage endif @@ -28,6 +25,24 @@ export RUST_TARGET_PATH=$(ROOT)/kernel/targets export XARGO_HOME=$(ROOT)/build/xargo export XARGO_RUST_SRC=$(ROOT)/rust/src +# Cross compiler variables +AR=$(TARGET)-ar +AS=$(TARGET)-as +CC=$(TARGET)-gcc +CXX=$(TARGET)-g++ +LD=$(TARGET)-ld +NM=$(TARGET)-nm +OBJCOPY=$(TARGET)-objcopy +OBJDUMP=$(TARGET)-objdump +RANLIB=$(TARGET)-ranlib +READELF=$(TARGET)-readelf +STRIP=$(TARGET)-strip + +# Rust cross compile variables +export AR_$(subst -,_,$(TARGET))=$(TARGET)-ar +export CC_$(subst -,_,$(TARGET))=$(TARGET)-gcc +export CXX_$(subst -,_,$(TARGET))=$(TARGET)-g++ + # Kernel variables KTARGET=$(ARCH)-unknown-none KBUILD=build/kernel diff --git a/mk/kernel.mk b/mk/kernel.mk index db86199..71e0329 100644 --- a/mk/kernel.mk +++ b/mk/kernel.mk @@ -1,27 +1,22 @@ build/libkernel.a: kernel/Cargo.lock kernel/Cargo.toml kernel/src/* kernel/src/*/* kernel/src/*/*/* kernel/src/*/*/*/* build/initfs.tag -# Temporary fix for https://gitlab.redox-os.org/redox-os/redox/issues/963 allowing to build on macOS -ifeq ($(UNAME),Darwin) - cd kernel && CC=$(ARCH)-elf-gcc AR=$(ARCH)-elf-ar CFLAGS=-ffreestanding INITFS_FOLDER=$(ROOT)/build/initfs xargo rustc --lib --target $(KTARGET) --release -- -C soft-float -C debuginfo=2 --emit link=../$@ -else cd kernel && INITFS_FOLDER=$(ROOT)/build/initfs xargo rustc --lib --target $(KTARGET) --release -- -C soft-float -C debuginfo=2 --emit link=../$@ -endif build/libkernel_live.a: kernel/Cargo.toml kernel/src/* kernel/src/*/* kernel/src/*/*/* kernel/src/*/*/*/* build/initfs_live.tag cd kernel && INITFS_FOLDER=$(ROOT)/build/initfs_live xargo rustc --lib --features live --target $(KTARGET) --release -- -C soft-float -C debuginfo=2 --emit link=../$@ build/kernel: kernel/linkers/$(ARCH).ld build/libkernel.a $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel.a - objcopy --only-keep-debug $@ $@.sym - objcopy --strip-debug $@ + $(OBJCOPY) --only-keep-debug $@ $@.sym + $(OBJCOPY) --strip-debug $@ build/kernel_live: kernel/linkers/$(ARCH).ld build/libkernel_live.a build/live.o $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel_live.a build/live.o - objcopy --only-keep-debug $@ $@.sym - objcopy --strip-debug $@ + $(OBJCOPY) --only-keep-debug $@ $@.sym + $(OBJCOPY) --strip-debug $@ build/live.o: build/filesystem.bin #TODO: More general use of $(ARCH) - objcopy -I binary -O elf64-x86-64 -B i386:x86-64 $< $@ \ + $(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 $< $@ \ --redefine-sym _binary_build_filesystem_bin_start=__live_start \ --redefine-sym _binary_build_filesystem_bin_end=__live_end \ --redefine-sym _binary_build_filesystem_bin_size=__live_size diff --git a/mk/prefix.mk b/mk/prefix.mk index 2790e5f..5afde14 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -1,25 +1,22 @@ -PREFIX=$(ROOT)/prefix +PREFIX=$(ROOT)/prefix/$(TARGET) -PREFIX_BINUTILS_PATH=$(PREFIX)/binutils-install/bin -PREFIX_FREESTANDING_PATH=$(PREFIX_BINUTILS_PATH):$(PREFIX)/gcc-freestanding-install/bin -PREFIX_PATH=$(PREFIX_BINUTILS_PATH):$(PREFIX)/gcc-install/bin +PREFIX_FREESTANDING_INSTALL=$(PREFIX)/gcc-freestanding-install +PREFIX_INSTALL=$(PREFIX)/gcc-install -PREFIX_FREESTANDING_TARGETS=\ - $(PREFIX)/binutils-install \ - $(PREFIX)/gcc-freestanding-install +ifeq ($(PREFIX_RUSTC),1) + PREFIX_FREESTANDING_INSTALL=$(PREFIX)/rust-freestanding-install + export RUSTUP_TOOLCHAIN=$(PREFIX)/rust-freestanding-install +endif -PREFIX_TARGETS=\ - $(PREFIX)/binutils-install \ - $(PREFIX)/gcc-install +PREFIX_PATH=$(PREFIX_INSTALL)/bin -prefix-freestanding: $(PREFIX_FREESTANDING_TARGETS) +prefix-freestanding: $(PREFIX_FREESTANDING_INSTALL) -prefix: $(PREFIX_TARGETS) - touch "$@" +prefix: $(PREFIX_INSTALL) $(PREFIX)/binutils.tar.bz2: mkdir -p "$(@D)" - wget -O $@.partial "https://gitlab.redox-os.org/redox-os/binutils-gdb/-/archive/master/binutils-gdb-master.tar.bz2" + wget -O $@.partial "https://gitlab.redox-os.org/redox-os/binutils-gdb/-/archive/redox/binutils-gdb-redox.tar.bz2" mv $@.partial $@ $(PREFIX)/binutils: $(PREFIX)/binutils.tar.bz2 @@ -32,7 +29,7 @@ $(PREFIX)/binutils-install: $(PREFIX)/binutils rm -rf "$<-build" "$@" mkdir -p "$<-build" "$@" cd "$<-build" && \ - "$