1ae137dbcSJeremy SollerTARGET?= 2ae137dbcSJeremy Soller 38a972542SJeremy SollerCARGO?=cargo 4*26299181SJeremy SollerCARGO_TEST?=$(CARGO) 581dc1442SJeremy SollerCARGOFLAGS= 662b0b0d5SJeremy SollerRUSTCFLAGS= 78a972542SJeremy Soller 847ee733aSJeremy SollerBUILD=target 9ae137dbcSJeremy Sollerifneq ($(TARGET),) 1047ee733aSJeremy Soller BUILD="target/$(TARGET)" 1181dc1442SJeremy Soller CARGOFLAGS="--target=$(TARGET)" 1247ee733aSJeremy Sollerendif 1347ee733aSJeremy Soller 1447ee733aSJeremy Sollerifeq ($(TARGET),aarch64-unknown-linux-gnu) 15e102c234SAlexander Theißen export CC=aarch64-linux-gnu-gcc 165c0b37a2SJeremy Soller export LD=aarch64-linux-gnu-ld 170be4208aSsamuela export AR=aarch64-linux-gnu-ar 1847ee733aSJeremy Sollerendif 1947ee733aSJeremy Soller 200a44d454SJeremy Sollerifeq ($(TARGET),aarch64-unknown-redox) 210a44d454SJeremy Soller export CC=aarch64-unknown-redox-gcc 225c0b37a2SJeremy Soller export LD=aarch64-unknown-redox-ld 230be4208aSsamuela export AR=aarch64-unknown-redox-ar 240a44d454SJeremy Sollerendif 250a44d454SJeremy Soller 2647ee733aSJeremy Sollerifeq ($(TARGET),x86_64-unknown-redox) 27e102c234SAlexander Theißen export CC=x86_64-unknown-redox-gcc 285c0b37a2SJeremy Soller export LD=x86_64-unknown-redox-ld 290be4208aSsamuela export AR=x86_64-unknown-redox-ar 30ae137dbcSJeremy Sollerendif 31ae137dbcSJeremy Soller 32adcd0c99SJeremy SollerSRC=\ 339eef8d7eSJeremy Soller Cargo.* \ 347f702720SjD91mZM2 $(shell find src -type f) 35adcd0c99SJeremy Soller 362b56f288SJeremy Soller.PHONY: all clean fmt headers install install-headers libs test 37d9e4622fSJeremy Soller 382b56f288SJeremy Sollerall: | headers libs 39d9e4622fSJeremy Soller 40d9e4622fSJeremy Sollerclean: 41c36ee723SJeremy Soller $(CARGO) clean 4263a1319eSMateusz Mikuła $(CARGO) clean --manifest-path cbindgen/Cargo.toml 43cee4449fSJeremy Soller $(MAKE) -C tests clean 44950b4526SJeremy Soller rm -rf sysroot 45d9e4622fSJeremy Soller 46729709a8SJeremy Sollercheck: 47c36ee723SJeremy Soller $(CARGO) check 48729709a8SJeremy Soller 49d9e4622fSJeremy Sollerfmt: 50d9e4622fSJeremy Soller ./fmt.sh 51d9e4622fSJeremy Soller 522fdca9bdSJeremy Sollerheaders: $(BUILD)/include 532fdca9bdSJeremy Soller 542fdca9bdSJeremy Sollerinstall-headers: headers 5578c8c217SJeremy Soller mkdir -pv "$(DESTDIR)/include" 5678c8c217SJeremy Soller cp -rv "include"/* "$(DESTDIR)/include" 570258fb3fSJeremy Soller cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include" 58950b4526SJeremy Soller cp -v "openlibm/include"/*.h "$(DESTDIR)/include" 59950b4526SJeremy Soller cp -v "openlibm/src"/*.h "$(DESTDIR)/include" 60be035f88SJeremy Soller cp -v "pthreads-emb/"*.h "$(DESTDIR)/include" 612fdca9bdSJeremy Soller 626a162758SJeremy Sollerlibs: \ 636a162758SJeremy Soller $(BUILD)/release/libc.a \ 646a162758SJeremy Soller $(BUILD)/release/libc.so \ 656a162758SJeremy Soller $(BUILD)/release/crt0.o \ 666a162758SJeremy Soller $(BUILD)/release/crti.o \ 676a162758SJeremy Soller $(BUILD)/release/crtn.o \ 686a162758SJeremy Soller $(BUILD)/release/ld_so 692b56f288SJeremy Soller 702b56f288SJeremy Sollerinstall-libs: libs 71950b4526SJeremy Soller mkdir -pv "$(DESTDIR)/lib" 724e3b6732SJeremy Soller cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib" 732b56f288SJeremy Soller cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib" 744e3b6732SJeremy Soller cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib" 75d659377bSjD91mZM2 cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib" 76d659377bSjD91mZM2 cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib" 77cb9e779cSJeremy Soller cp -v "$(BUILD)/release/ld_so" "$(DESTDIR)/lib/ld64.so.1" 7855378175SjD91mZM2 cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a" 79be035f88SJeremy Soller cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a" 8078c8c217SJeremy Soller 812fdca9bdSJeremy Sollerinstall: install-headers install-libs 822fdca9bdSJeremy Soller 8328f4da52SJeremy Sollersysroot: all 841acc2a1aSjD91mZM2 rm -rf $@ 8582b9715fSJeremy Soller rm -rf $@.partial 8682b9715fSJeremy Soller mkdir -p $@.partial 87cee4449fSJeremy Soller $(MAKE) install DESTDIR=$@.partial 8882b9715fSJeremy Soller mv $@.partial $@ 8982b9715fSJeremy Soller touch $@ 9082b9715fSJeremy Soller 91d659377bSjD91mZM2test: sysroot 92*26299181SJeremy Soller $(CARGO_TEST) test 935c0b37a2SJeremy Soller $(MAKE) -C tests verify 94d9e4622fSJeremy Soller 95084b69b3SJeremy Soller# Debug targets 96084b69b3SJeremy Soller 97084b69b3SJeremy Soller$(BUILD)/debug/libc.a: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 980c5abf03SJeremy Soller echo "create $@" > "$@.mri" 990c5abf03SJeremy Soller for lib in $^; do\ 1000c5abf03SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 1010c5abf03SJeremy Soller done 1020c5abf03SJeremy Soller echo "save" >> "$@.mri" 1030c5abf03SJeremy Soller echo "end" >> "$@.mri" 1040be4208aSsamuela $(AR) -M < "$@.mri" 1050c5abf03SJeremy Soller 1062606266cSJeremy Soller$(BUILD)/debug/libc.so: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 107e146cb36SJeremy Soller $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ 1082b56f288SJeremy Soller 1090c5abf03SJeremy Soller$(BUILD)/debug/librelibc.a: $(SRC) 11027cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 111afdc8062SJeremy Soller touch $@ 112d9e4622fSJeremy Soller 1138c218b16SJeremy Soller$(BUILD)/debug/crt0.o: $(SRC) 114bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 115afdc8062SJeremy Soller touch $@ 116d9e4622fSJeremy Soller 1170c5abf03SJeremy Soller$(BUILD)/debug/crti.o: $(SRC) 118bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1190c5abf03SJeremy Soller touch $@ 1200c5abf03SJeremy Soller 1210c5abf03SJeremy Soller$(BUILD)/debug/crtn.o: $(SRC) 122bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1230c5abf03SJeremy Soller touch $@ 1240c5abf03SJeremy Soller 125084b69b3SJeremy Soller$(BUILD)/debug/ld_so.o: $(SRC) 126084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 127084b69b3SJeremy Soller touch $@ 128084b69b3SJeremy Soller 129084b69b3SJeremy Soller$(BUILD)/debug/ld_so: $(BUILD)/debug/ld_so.o $(BUILD)/debug/crti.o $(BUILD)/debug/libc.a $(BUILD)/debug/crtn.o 130e146cb36SJeremy Soller $(LD) --allow-multiple-definition --gc-sections $^ -o $@ 131084b69b3SJeremy Soller 132084b69b3SJeremy Soller# Release targets 133084b69b3SJeremy Soller 134084b69b3SJeremy Soller$(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 135084b69b3SJeremy Soller echo "create $@" > "$@.mri" 136084b69b3SJeremy Soller for lib in $^; do\ 137084b69b3SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 138084b69b3SJeremy Soller done 139084b69b3SJeremy Soller echo "save" >> "$@.mri" 140084b69b3SJeremy Soller echo "end" >> "$@.mri" 1410be4208aSsamuela $(AR) -M < "$@.mri" 142084b69b3SJeremy Soller 1432606266cSJeremy Soller$(BUILD)/release/libc.so: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 144e146cb36SJeremy Soller $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ 145084b69b3SJeremy Soller 1460c5abf03SJeremy Soller$(BUILD)/release/librelibc.a: $(SRC) 14727cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 148afdc8062SJeremy Soller touch $@ 14947ee733aSJeremy Soller 1508c218b16SJeremy Soller$(BUILD)/release/crt0.o: $(SRC) 151bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 152afdc8062SJeremy Soller touch $@ 15347ee733aSJeremy Soller 154d659377bSjD91mZM2$(BUILD)/release/crti.o: $(SRC) 155bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 156d659377bSjD91mZM2 touch $@ 157d659377bSjD91mZM2 158d659377bSjD91mZM2$(BUILD)/release/crtn.o: $(SRC) 159bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 160d659377bSjD91mZM2 touch $@ 161d659377bSjD91mZM2 162084b69b3SJeremy Soller$(BUILD)/release/ld_so.o: $(SRC) 163084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 164084b69b3SJeremy Soller touch $@ 165084b69b3SJeremy Soller 166084b69b3SJeremy Soller$(BUILD)/release/ld_so: $(BUILD)/release/ld_so.o $(BUILD)/release/crti.o $(BUILD)/release/libc.a $(BUILD)/release/crtn.o 167e146cb36SJeremy Soller $(LD) --allow-multiple-definition --gc-sections $^ -o $@ 168084b69b3SJeremy Soller 169084b69b3SJeremy Soller# Other targets 170084b69b3SJeremy Soller 1717ab70031SJeremy Soller$(BUILD)/include: $(SRC) 1727ab70031SJeremy Soller rm -rf $@ $@.partial 1737ab70031SJeremy Soller mkdir -p $@.partial 1747ab70031SJeremy Soller ./include.sh $@.partial 1757ab70031SJeremy Soller mv $@.partial $@ 17682b9715fSJeremy Soller touch $@ 1777ab70031SJeremy Soller 178ae137dbcSJeremy Soller$(BUILD)/openlibm: openlibm 179ae137dbcSJeremy Soller rm -rf $@ $@.partial 18069993639SJeremy Soller mkdir -p $(BUILD) 181ae137dbcSJeremy Soller cp -r $< $@.partial 182ae137dbcSJeremy Soller mv $@.partial $@ 183afdc8062SJeremy Soller touch $@ 184ae137dbcSJeremy Soller 185124e118fSJeremy Soller$(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include 186cee4449fSJeremy Soller $(MAKE) CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a 1878aae8e15SJeremy Soller 1888aae8e15SJeremy Soller$(BUILD)/pthreads-emb: pthreads-emb 1898aae8e15SJeremy Soller rm -rf $@ $@.partial 1908aae8e15SJeremy Soller mkdir -p $(BUILD) 1918aae8e15SJeremy Soller cp -r $< $@.partial 1928aae8e15SJeremy Soller mv $@.partial $@ 1938aae8e15SJeremy Soller touch $@ 1948aae8e15SJeremy Soller 1958aae8e15SJeremy Soller$(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/include 196cee4449fSJeremy Soller $(MAKE) CC=$(CC) CFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libpthread.a 197