e102c234c1
We cannot use ?= because CC is set by default to "cc". Therefore CC was never set. In addition we need to export the variable in order to have the rust cc crate pick it up. Otherwise it is only used by openlibm where it is explicitly passed.
109 lines
2.5 KiB
Makefile
109 lines
2.5 KiB
Makefile
TARGET?=
|
|
|
|
CARGO?=cargo
|
|
CARGOFLAGS=
|
|
|
|
BUILD=target
|
|
ifneq ($(TARGET),)
|
|
BUILD="target/$(TARGET)"
|
|
CARGOFLAGS="--target=$(TARGET)"
|
|
endif
|
|
|
|
ifeq ($(TARGET),aarch64-unknown-linux-gnu)
|
|
export CC=aarch64-linux-gnu-gcc
|
|
endif
|
|
|
|
ifeq ($(TARGET),x86_64-unknown-redox)
|
|
export CC=x86_64-unknown-redox-gcc
|
|
endif
|
|
|
|
SRC=\
|
|
Cargo.* \
|
|
src/* \
|
|
src/*/* \
|
|
src/*/*/* \
|
|
src/*/*/*/*
|
|
|
|
.PHONY: all clean fmt include install libc libm test
|
|
|
|
all: | libc libm
|
|
|
|
clean:
|
|
$(CARGO) clean
|
|
make -C tests clean
|
|
|
|
check:
|
|
$(CARGO) check
|
|
|
|
fmt:
|
|
./fmt.sh
|
|
|
|
install: all
|
|
mkdir -pv "$(DESTDIR)/lib"
|
|
mkdir -pv "$(DESTDIR)/include"
|
|
cp -rv "include"/* "$(DESTDIR)/include"
|
|
cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include"
|
|
cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib"
|
|
cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib"
|
|
cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib"
|
|
cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib"
|
|
cp -rv "openlibm/include"/* "$(DESTDIR)/include"
|
|
cp -rv "openlibm/src"/*.h "$(DESTDIR)/include"
|
|
cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a"
|
|
|
|
libc: $(BUILD)/release/libc.a $(BUILD)/release/crt0.o $(BUILD)/release/crti.o $(BUILD)/release/crtn.o $(BUILD)/include
|
|
|
|
libm: $(BUILD)/openlibm/libopenlibm.a
|
|
|
|
sysroot: all
|
|
rm -rf $@
|
|
rm -rf $@.partial
|
|
mkdir -p $@.partial
|
|
make install DESTDIR=$@.partial
|
|
mv $@.partial $@
|
|
touch $@
|
|
|
|
test: sysroot
|
|
make -C tests run
|
|
|
|
$(BUILD)/debug/libc.a: $(SRC)
|
|
$(CARGO) build $(CARGOFLAGS)
|
|
touch $@
|
|
|
|
$(BUILD)/debug/crt0.o: $(SRC)
|
|
CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@
|
|
touch $@
|
|
|
|
$(BUILD)/release/libc.a: $(SRC)
|
|
$(CARGO) build --release $(CARGOFLAGS)
|
|
touch $@
|
|
|
|
$(BUILD)/release/crt0.o: $(SRC)
|
|
CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@
|
|
touch $@
|
|
|
|
$(BUILD)/release/crti.o: $(SRC)
|
|
CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@
|
|
touch $@
|
|
|
|
$(BUILD)/release/crtn.o: $(SRC)
|
|
CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@
|
|
touch $@
|
|
|
|
$(BUILD)/include: $(SRC)
|
|
rm -rf $@ $@.partial
|
|
mkdir -p $@.partial
|
|
./include.sh $@.partial
|
|
mv $@.partial $@
|
|
touch $@
|
|
|
|
$(BUILD)/openlibm: openlibm
|
|
rm -rf $@ $@.partial
|
|
mkdir -p $(BUILD)
|
|
cp -r $< $@.partial
|
|
mv $@.partial $@
|
|
touch $@
|
|
|
|
$(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include
|
|
make CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a
|