1ae137dbcSJeremy SollerTARGET?= 2ae137dbcSJeremy Soller 38a972542SJeremy SollerCARGO?=cargo 481dc1442SJeremy SollerCARGOFLAGS= 562b0b0d5SJeremy SollerRUSTCFLAGS= 68a972542SJeremy Soller 747ee733aSJeremy SollerBUILD=target 8ae137dbcSJeremy Sollerifneq ($(TARGET),) 947ee733aSJeremy Soller BUILD="target/$(TARGET)" 1081dc1442SJeremy Soller CARGOFLAGS="--target=$(TARGET)" 1147ee733aSJeremy Sollerendif 1247ee733aSJeremy Soller 1347ee733aSJeremy Sollerifeq ($(TARGET),aarch64-unknown-linux-gnu) 14e102c234SAlexander Theißen export CC=aarch64-linux-gnu-gcc 155c0b37a2SJeremy Soller export LD=aarch64-linux-gnu-ld 16*0be4208aSsamuela export AR=aarch64-linux-gnu-ar 1747ee733aSJeremy Sollerendif 1847ee733aSJeremy Soller 190a44d454SJeremy Sollerifeq ($(TARGET),aarch64-unknown-redox) 200a44d454SJeremy Soller export CC=aarch64-unknown-redox-gcc 215c0b37a2SJeremy Soller export LD=aarch64-unknown-redox-ld 22*0be4208aSsamuela export AR=aarch64-unknown-redox-ar 230a44d454SJeremy Sollerendif 240a44d454SJeremy Soller 2547ee733aSJeremy Sollerifeq ($(TARGET),x86_64-unknown-redox) 26e102c234SAlexander Theißen export CC=x86_64-unknown-redox-gcc 275c0b37a2SJeremy Soller export LD=x86_64-unknown-redox-ld 28*0be4208aSsamuela export AR=x86_64-unknown-redox-ar 29ae137dbcSJeremy Sollerendif 30ae137dbcSJeremy Soller 31adcd0c99SJeremy SollerSRC=\ 329eef8d7eSJeremy Soller Cargo.* \ 337f702720SjD91mZM2 $(shell find src -type f) 34adcd0c99SJeremy Soller 352b56f288SJeremy Soller.PHONY: all clean fmt headers install install-headers libs test 36d9e4622fSJeremy Soller 372b56f288SJeremy Sollerall: | headers libs 38d9e4622fSJeremy Soller 39d9e4622fSJeremy Sollerclean: 40c36ee723SJeremy Soller $(CARGO) clean 4163a1319eSMateusz Mikuła $(CARGO) clean --manifest-path cbindgen/Cargo.toml 42cee4449fSJeremy Soller $(MAKE) -C tests clean 43950b4526SJeremy Soller rm -rf sysroot 44d9e4622fSJeremy Soller 45729709a8SJeremy Sollercheck: 46c36ee723SJeremy Soller $(CARGO) check 47729709a8SJeremy Soller 48d9e4622fSJeremy Sollerfmt: 49d9e4622fSJeremy Soller ./fmt.sh 50d9e4622fSJeremy Soller 512fdca9bdSJeremy Sollerheaders: $(BUILD)/include 522fdca9bdSJeremy Soller 532fdca9bdSJeremy Sollerinstall-headers: headers 5478c8c217SJeremy Soller mkdir -pv "$(DESTDIR)/include" 5578c8c217SJeremy Soller cp -rv "include"/* "$(DESTDIR)/include" 560258fb3fSJeremy Soller cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include" 57950b4526SJeremy Soller cp -v "openlibm/include"/*.h "$(DESTDIR)/include" 58950b4526SJeremy Soller cp -v "openlibm/src"/*.h "$(DESTDIR)/include" 59be035f88SJeremy Soller cp -v "pthreads-emb/"*.h "$(DESTDIR)/include" 602fdca9bdSJeremy Soller 616a162758SJeremy Sollerlibs: \ 626a162758SJeremy Soller $(BUILD)/release/libc.a \ 636a162758SJeremy Soller $(BUILD)/release/libc.so \ 646a162758SJeremy Soller $(BUILD)/release/crt0.o \ 656a162758SJeremy Soller $(BUILD)/release/crti.o \ 666a162758SJeremy Soller $(BUILD)/release/crtn.o \ 676a162758SJeremy Soller $(BUILD)/release/ld_so 682b56f288SJeremy Soller 692b56f288SJeremy Sollerinstall-libs: libs 70950b4526SJeremy Soller mkdir -pv "$(DESTDIR)/lib" 714e3b6732SJeremy Soller cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib" 722b56f288SJeremy Soller cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib" 734e3b6732SJeremy Soller cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib" 74d659377bSjD91mZM2 cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib" 75d659377bSjD91mZM2 cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib" 76cb9e779cSJeremy Soller cp -v "$(BUILD)/release/ld_so" "$(DESTDIR)/lib/ld64.so.1" 7755378175SjD91mZM2 cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a" 78be035f88SJeremy Soller cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a" 7978c8c217SJeremy Soller 802fdca9bdSJeremy Sollerinstall: install-headers install-libs 812fdca9bdSJeremy Soller 8228f4da52SJeremy Sollersysroot: all 831acc2a1aSjD91mZM2 rm -rf $@ 8482b9715fSJeremy Soller rm -rf $@.partial 8582b9715fSJeremy Soller mkdir -p $@.partial 86cee4449fSJeremy Soller $(MAKE) install DESTDIR=$@.partial 8782b9715fSJeremy Soller mv $@.partial $@ 8882b9715fSJeremy Soller touch $@ 8982b9715fSJeremy Soller 90d659377bSjD91mZM2test: sysroot 915c0b37a2SJeremy Soller $(MAKE) -C tests verify 92d9e4622fSJeremy Soller 93084b69b3SJeremy Soller# Debug targets 94084b69b3SJeremy Soller 95084b69b3SJeremy Soller$(BUILD)/debug/libc.a: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 960c5abf03SJeremy Soller echo "create $@" > "$@.mri" 970c5abf03SJeremy Soller for lib in $^; do\ 980c5abf03SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 990c5abf03SJeremy Soller done 1000c5abf03SJeremy Soller echo "save" >> "$@.mri" 1010c5abf03SJeremy Soller echo "end" >> "$@.mri" 102*0be4208aSsamuela $(AR) -M < "$@.mri" 1030c5abf03SJeremy Soller 1042606266cSJeremy Soller$(BUILD)/debug/libc.so: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 105e146cb36SJeremy Soller $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ 1062b56f288SJeremy Soller 1070c5abf03SJeremy Soller$(BUILD)/debug/librelibc.a: $(SRC) 10827cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 109afdc8062SJeremy Soller touch $@ 110d9e4622fSJeremy Soller 1118c218b16SJeremy Soller$(BUILD)/debug/crt0.o: $(SRC) 112bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 113afdc8062SJeremy Soller touch $@ 114d9e4622fSJeremy Soller 1150c5abf03SJeremy Soller$(BUILD)/debug/crti.o: $(SRC) 116bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1170c5abf03SJeremy Soller touch $@ 1180c5abf03SJeremy Soller 1190c5abf03SJeremy Soller$(BUILD)/debug/crtn.o: $(SRC) 120bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1210c5abf03SJeremy Soller touch $@ 1220c5abf03SJeremy Soller 123084b69b3SJeremy Soller$(BUILD)/debug/ld_so.o: $(SRC) 124084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 125084b69b3SJeremy Soller touch $@ 126084b69b3SJeremy Soller 127084b69b3SJeremy Soller$(BUILD)/debug/ld_so: $(BUILD)/debug/ld_so.o $(BUILD)/debug/crti.o $(BUILD)/debug/libc.a $(BUILD)/debug/crtn.o 128e146cb36SJeremy Soller $(LD) --allow-multiple-definition --gc-sections $^ -o $@ 129084b69b3SJeremy Soller 130084b69b3SJeremy Soller# Release targets 131084b69b3SJeremy Soller 132084b69b3SJeremy Soller$(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 133084b69b3SJeremy Soller echo "create $@" > "$@.mri" 134084b69b3SJeremy Soller for lib in $^; do\ 135084b69b3SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 136084b69b3SJeremy Soller done 137084b69b3SJeremy Soller echo "save" >> "$@.mri" 138084b69b3SJeremy Soller echo "end" >> "$@.mri" 139*0be4208aSsamuela $(AR) -M < "$@.mri" 140084b69b3SJeremy Soller 1412606266cSJeremy Soller$(BUILD)/release/libc.so: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 142e146cb36SJeremy Soller $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ 143084b69b3SJeremy Soller 1440c5abf03SJeremy Soller$(BUILD)/release/librelibc.a: $(SRC) 14527cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 146afdc8062SJeremy Soller touch $@ 14747ee733aSJeremy Soller 1488c218b16SJeremy Soller$(BUILD)/release/crt0.o: $(SRC) 149bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 150afdc8062SJeremy Soller touch $@ 15147ee733aSJeremy Soller 152d659377bSjD91mZM2$(BUILD)/release/crti.o: $(SRC) 153bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 154d659377bSjD91mZM2 touch $@ 155d659377bSjD91mZM2 156d659377bSjD91mZM2$(BUILD)/release/crtn.o: $(SRC) 157bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 158d659377bSjD91mZM2 touch $@ 159d659377bSjD91mZM2 160084b69b3SJeremy Soller$(BUILD)/release/ld_so.o: $(SRC) 161084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 162084b69b3SJeremy Soller touch $@ 163084b69b3SJeremy Soller 164084b69b3SJeremy Soller$(BUILD)/release/ld_so: $(BUILD)/release/ld_so.o $(BUILD)/release/crti.o $(BUILD)/release/libc.a $(BUILD)/release/crtn.o 165e146cb36SJeremy Soller $(LD) --allow-multiple-definition --gc-sections $^ -o $@ 166084b69b3SJeremy Soller 167084b69b3SJeremy Soller# Other targets 168084b69b3SJeremy Soller 1697ab70031SJeremy Soller$(BUILD)/include: $(SRC) 1707ab70031SJeremy Soller rm -rf $@ $@.partial 1717ab70031SJeremy Soller mkdir -p $@.partial 1727ab70031SJeremy Soller ./include.sh $@.partial 1737ab70031SJeremy Soller mv $@.partial $@ 17482b9715fSJeremy Soller touch $@ 1757ab70031SJeremy Soller 176ae137dbcSJeremy Soller$(BUILD)/openlibm: openlibm 177ae137dbcSJeremy Soller rm -rf $@ $@.partial 17869993639SJeremy Soller mkdir -p $(BUILD) 179ae137dbcSJeremy Soller cp -r $< $@.partial 180ae137dbcSJeremy Soller mv $@.partial $@ 181afdc8062SJeremy Soller touch $@ 182ae137dbcSJeremy Soller 183124e118fSJeremy Soller$(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include 184cee4449fSJeremy Soller $(MAKE) CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a 1858aae8e15SJeremy Soller 1868aae8e15SJeremy Soller$(BUILD)/pthreads-emb: pthreads-emb 1878aae8e15SJeremy Soller rm -rf $@ $@.partial 1888aae8e15SJeremy Soller mkdir -p $(BUILD) 1898aae8e15SJeremy Soller cp -r $< $@.partial 1908aae8e15SJeremy Soller mv $@.partial $@ 1918aae8e15SJeremy Soller touch $@ 1928aae8e15SJeremy Soller 1938aae8e15SJeremy Soller$(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/include 194cee4449fSJeremy Soller $(MAKE) CC=$(CC) CFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libpthread.a 195