diff --git a/Makefile b/Makefile index 47ba77c97f..bf5570fc5e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,4 @@ -ifndef TARGET - export TARGET:=$(shell rustc -Z unstable-options --print target-spec-json | grep llvm-target | cut -d '"' -f4) -endif +include config.mk CARGO?=cargo CARGO_TEST?=$(CARGO) @@ -23,76 +21,6 @@ HEADERS_UNPARSED=$(shell find src/header -mindepth 1 -maxdepth 1 -type d -not -n HEADERS_DEPS=$(shell find src/header -type f \( -name "cbindgen.toml" -o -name "*.rs" \)) #HEADERS=$(patsubst %,%.h,$(subst _,/,$(HEADERS_UNPARSED))) -ifeq ($(TARGET),aarch64-unknown-linux-gnu) - export CC=aarch64-linux-gnu-gcc - export LD=aarch64-linux-gnu-ld - export AR=aarch64-linux-gnu-ar - export NM=aarch64-linux-gnu-nm - export OBJCOPY=aarch64-linux-gnu-objcopy - export CPPFLAGS= - LD_SO_PATH=lib/ld.so.1 -endif - -ifeq ($(TARGET),aarch64-unknown-redox) - export CC=aarch64-unknown-redox-gcc - export LD=aarch64-unknown-redox-ld - export AR=aarch64-unknown-redox-ar - export NM=aarch64-unknown-redox-nm - export OBJCOPY=aarch64-unknown-redox-objcopy - export CPPFLAGS= - LD_SO_PATH=lib/ld.so.1 -endif - -ifeq ($(TARGET),i586-unknown-redox) - export CC=i586-unknown-redox-gcc - export LD=i586-unknown-redox-ld - export AR=i586-unknown-redox-ar - export NM=i586-unknown-redox-nm - export OBJCOPY=i586-unknown-redox-objcopy - export CPPFLAGS= - LD_SO_PATH=lib/libc.so.1 -endif - -ifeq ($(TARGET),i686-unknown-redox) - export CC=i686-unknown-redox-gcc - export LD=i686-unknown-redox-ld - export AR=i686-unknown-redox-ar - export NM=i686-unknown-redox-nm - export OBJCOPY=i686-unknown-redox-objcopy - export CPPFLAGS= - LD_SO_PATH=lib/libc.so.1 -endif - -ifeq ($(TARGET),x86_64-unknown-linux-gnu) - export CC=x86_64-linux-gnu-gcc - export LD=x86_64-linux-gnu-ld - export AR=x86_64-linux-gnu-ar - export NM=x86_64-linux-gnu-nm - export OBJCOPY=objcopy - export CPPFLAGS= - LD_SO_PATH=lib/ld64.so.1 -endif - -ifeq ($(TARGET),x86_64-unknown-redox) - export CC=x86_64-unknown-redox-gcc - export LD=x86_64-unknown-redox-ld - export AR=x86_64-unknown-redox-ar - export NM=x86_64-unknown-redox-nm - export OBJCOPY=x86_64-unknown-redox-objcopy - export CPPFLAGS= - LD_SO_PATH=lib/ld64.so.1 -endif - -ifeq ($(TARGET),riscv64gc-unknown-redox) - export CC=riscv64-unknown-redox-gcc - export LD=riscv64-unknown-redox-ld - export AR=riscv64-unknown-redox-ar - export NM=riscv64-unknown-redox-nm - export OBJCOPY=riscv64-unknown-redox-objcopy - export CPPFLAGS=-march=rv64gc -mabi=lp64d - LD_SO_PATH=lib/ld.so.1 -endif - SRC=\ Cargo.* \ $(shell find src -type f) @@ -171,14 +99,18 @@ submodules: git submodule update --init --recursive sysroot: + @mkdir -p $@ + +.PHONY: sysroot/$(TARGET) +sysroot/$(TARGET): | sysroot rm -rf $@ rm -rf $@.partial mkdir -p $@.partial - $(MAKE) install DESTDIR=$@.partial + $(MAKE) install DESTDIR=$(shell pwd)/$@.partial mv $@.partial $@ touch $@ -test: sysroot +test: sysroot/$(TARGET) # TODO: Fix SIGILL when running cargo test # $(CARGO_TEST) test $(MAKE) -C tests run diff --git a/README.md b/README.md index 3c803293f7..44d5cfc13f 100644 --- a/README.md +++ b/README.md @@ -153,17 +153,22 @@ tests/bins_static/test-name The Makefile expects GNU compiler tools prefixed with the platform specifier, as would be present when you installed a cross compiler. Since you are building for your own platform, some Linux distributions (like Manjaro) don't install/symlink the prefixed executables. -An easy fix would be to replace the corresponding lines in the Makefile, e.g. +An easy fix would be to replace the corresponding lines in `config.mk`, e.g. ```diff - ifeq ($(TARGET),x86_64-unknown-linux-gnu) - export CC=x86_64-linux-gnu-gcc -- export LD=x86_64-linux-gnu-ld -- export AR=x86_64-linux-gnu-ar +ifeq ($(TARGET),x86_64-unknown-linux-gnu) +- export CC=x86_64-linux-gnu-gcc +- export LD=x86_64-linux-gnu-ld +- export AR=x86_64-linux-gnu-ar +- export NM=x86_64-linux-gnu-nm ++ export CC=gcc + export LD=ld + export AR=ar - export OBJCOPY=x86_64-linux-gnu-objcopy - endif ++ export NM=nm + export OBJCOPY=objcopy + export CPPFLAGS= + LD_SO_PATH=lib/ld64.so.1 +endif ``` ## Contributing diff --git a/config.mk b/config.mk new file mode 100644 index 0000000000..e9ffa218ae --- /dev/null +++ b/config.mk @@ -0,0 +1,73 @@ +ifndef TARGET + export TARGET:=$(shell rustc -Z unstable-options --print target-spec-json | grep llvm-target | cut -d '"' -f4) +endif + +ifeq ($(TARGET),aarch64-unknown-linux-gnu) + export CC=aarch64-linux-gnu-gcc + export LD=aarch64-linux-gnu-ld + export AR=aarch64-linux-gnu-ar + export NM=aarch64-linux-gnu-nm + export OBJCOPY=aarch64-linux-gnu-objcopy + export CPPFLAGS= + LD_SO_PATH=lib/ld.so.1 +endif + +ifeq ($(TARGET),aarch64-unknown-redox) + export CC=aarch64-unknown-redox-gcc + export LD=aarch64-unknown-redox-ld + export AR=aarch64-unknown-redox-ar + export NM=aarch64-unknown-redox-nm + export OBJCOPY=aarch64-unknown-redox-objcopy + export CPPFLAGS= + LD_SO_PATH=lib/ld.so.1 +endif + +ifeq ($(TARGET),i586-unknown-redox) + export CC=i586-unknown-redox-gcc + export LD=i586-unknown-redox-ld + export AR=i586-unknown-redox-ar + export NM=i586-unknown-redox-nm + export OBJCOPY=i586-unknown-redox-objcopy + export CPPFLAGS= + LD_SO_PATH=lib/libc.so.1 +endif + +ifeq ($(TARGET),i686-unknown-redox) + export CC=i686-unknown-redox-gcc + export LD=i686-unknown-redox-ld + export AR=i686-unknown-redox-ar + export NM=i686-unknown-redox-nm + export OBJCOPY=i686-unknown-redox-objcopy + export CPPFLAGS= + LD_SO_PATH=lib/libc.so.1 +endif + +ifeq ($(TARGET),x86_64-unknown-linux-gnu) + export CC=x86_64-linux-gnu-gcc + export LD=x86_64-linux-gnu-ld + export AR=x86_64-linux-gnu-ar + export NM=x86_64-linux-gnu-nm + export OBJCOPY=objcopy + export CPPFLAGS= + LD_SO_PATH=lib/ld64.so.1 +endif + +ifeq ($(TARGET),x86_64-unknown-redox) + export CC=x86_64-unknown-redox-gcc + export LD=x86_64-unknown-redox-ld + export AR=x86_64-unknown-redox-ar + export NM=x86_64-unknown-redox-nm + export OBJCOPY=x86_64-unknown-redox-objcopy + export CPPFLAGS= + LD_SO_PATH=lib/ld64.so.1 +endif + +ifeq ($(TARGET),riscv64gc-unknown-redox) + export CC=riscv64-unknown-redox-gcc + export LD=riscv64-unknown-redox-ld + export AR=riscv64-unknown-redox-ar + export NM=riscv64-unknown-redox-nm + export OBJCOPY=riscv64-unknown-redox-objcopy + export CPPFLAGS=-march=rv64gc -mabi=lp64d + LD_SO_PATH=lib/ld.so.1 +endif diff --git a/tests/Makefile b/tests/Makefile index d7d3f2bbdc..44d74bbc47 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,3 +1,5 @@ +include ../config.mk + SKIP_REDOX?=0 # If compiling for Redox, SKIP_REDOX must be 1 @@ -371,7 +373,9 @@ DYNAMIC_FLAGS=\ -Wl,--enable-new-dtags \ -Wl,-export-dynamic -../sysroot: +SYSROOT?=../sysroot/$(TARGET)/ + +$(SYSROOT): $(MAKE) -C .. sysroot NATIVE_RELIBC?=0 @@ -379,12 +383,12 @@ ifeq ($(NATIVE_RELIBC),0) FLAGS+=\ -nostdinc \ -nostdlib \ - -isystem ../sysroot/include \ - ../sysroot/lib/crt0.o \ - ../sysroot/lib/crti.o \ - ../sysroot/lib/crtn.o + -isystem $(SYSROOT)/include \ + $(SYSROOT)/lib/crt0.o \ + $(SYSROOT)/lib/crti.o \ + $(SYSROOT)/lib/crtn.o -SYSROOT_LIB=$(shell realpath ../sysroot/lib/) +SYSROOT_LIB=$(shell realpath ../sysroot/$(TARGET)/lib/) STATIC_FLAGS+=\ $(SYSROOT_LIB)/libc.a @@ -396,7 +400,7 @@ DYNAMIC_FLAGS+=\ -lc \ -fpic -DEPS=../sysroot +DEPS=../sysroot/$(TARGET) else DYNAMIC_FLAGS+=\ -Wl,-rpath=\$$ORIGIN