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 1547ee733aSJeremy Sollerendif 1647ee733aSJeremy Soller 170a44d454SJeremy Sollerifeq ($(TARGET),aarch64-unknown-redox) 180a44d454SJeremy Soller export CC=aarch64-unknown-redox-gcc 190a44d454SJeremy Sollerendif 200a44d454SJeremy Soller 2147ee733aSJeremy Sollerifeq ($(TARGET),x86_64-unknown-redox) 22e102c234SAlexander Theißen export CC=x86_64-unknown-redox-gcc 23ae137dbcSJeremy Sollerendif 24ae137dbcSJeremy Soller 25adcd0c99SJeremy SollerSRC=\ 269eef8d7eSJeremy Soller Cargo.* \ 27adcd0c99SJeremy Soller src/* \ 28adcd0c99SJeremy Soller src/*/* \ 29adcd0c99SJeremy Soller src/*/*/* \ 30adcd0c99SJeremy Soller src/*/*/*/* 31adcd0c99SJeremy Soller 32*2b56f288SJeremy Soller.PHONY: all clean fmt headers install install-headers libs test 33d9e4622fSJeremy Soller 34*2b56f288SJeremy Sollerall: | headers libs 35d9e4622fSJeremy Soller 36d9e4622fSJeremy Sollerclean: 37c36ee723SJeremy Soller $(CARGO) clean 38cee4449fSJeremy Soller $(MAKE) -C tests clean 39950b4526SJeremy Soller rm -rf sysroot 40d9e4622fSJeremy Soller 41729709a8SJeremy Sollercheck: 42c36ee723SJeremy Soller $(CARGO) check 43729709a8SJeremy Soller 44d9e4622fSJeremy Sollerfmt: 45d9e4622fSJeremy Soller ./fmt.sh 46d9e4622fSJeremy Soller 472fdca9bdSJeremy Sollerheaders: $(BUILD)/include 482fdca9bdSJeremy Soller 492fdca9bdSJeremy Sollerinstall-headers: headers 5078c8c217SJeremy Soller mkdir -pv "$(DESTDIR)/include" 5178c8c217SJeremy Soller cp -rv "include"/* "$(DESTDIR)/include" 520258fb3fSJeremy Soller cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include" 53950b4526SJeremy Soller cp -v "openlibm/include"/*.h "$(DESTDIR)/include" 54950b4526SJeremy Soller cp -v "openlibm/src"/*.h "$(DESTDIR)/include" 55be035f88SJeremy Soller cp -v "pthreads-emb/"*.h "$(DESTDIR)/include" 562fdca9bdSJeremy Soller 57*2b56f288SJeremy Sollerlibs: $(BUILD)/release/libc.a $(BUILD)/release/libc.so $(BUILD)/release/crt0.o $(BUILD)/release/crti.o $(BUILD)/release/crtn.o 58*2b56f288SJeremy Soller 59*2b56f288SJeremy Sollerinstall-libs: libs 60950b4526SJeremy Soller mkdir -pv "$(DESTDIR)/lib" 614e3b6732SJeremy Soller cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib" 62*2b56f288SJeremy Soller cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib" 634e3b6732SJeremy Soller cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib" 64d659377bSjD91mZM2 cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib" 65d659377bSjD91mZM2 cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib" 6655378175SjD91mZM2 cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a" 67be035f88SJeremy Soller cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a" 6878c8c217SJeremy Soller 692fdca9bdSJeremy Sollerinstall: install-headers install-libs 702fdca9bdSJeremy Soller 7128f4da52SJeremy Sollersysroot: all 721acc2a1aSjD91mZM2 rm -rf $@ 7382b9715fSJeremy Soller rm -rf $@.partial 7482b9715fSJeremy Soller mkdir -p $@.partial 75cee4449fSJeremy Soller $(MAKE) install DESTDIR=$@.partial 7682b9715fSJeremy Soller mv $@.partial $@ 7782b9715fSJeremy Soller touch $@ 7882b9715fSJeremy Soller 79d659377bSjD91mZM2test: sysroot 80cee4449fSJeremy Soller $(MAKE) -C tests run 81d9e4622fSJeremy Soller 820c5abf03SJeremy Soller$(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 830c5abf03SJeremy Soller echo "create $@" > "$@.mri" 840c5abf03SJeremy Soller for lib in $^; do\ 850c5abf03SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 860c5abf03SJeremy Soller done 870c5abf03SJeremy Soller echo "save" >> "$@.mri" 880c5abf03SJeremy Soller echo "end" >> "$@.mri" 890c5abf03SJeremy Soller ar -M < "$@.mri" 900c5abf03SJeremy Soller 91*2b56f288SJeremy Soller$(BUILD)/release/libc.so: $(BUILD)/release/librelibc.patched.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 92*2b56f288SJeremy Soller $(CC) -shared -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ 93*2b56f288SJeremy Soller 940c5abf03SJeremy Soller$(BUILD)/debug/librelibc.a: $(SRC) 95*2b56f288SJeremy Soller $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 96afdc8062SJeremy Soller touch $@ 97d9e4622fSJeremy Soller 988c218b16SJeremy Soller$(BUILD)/debug/crt0.o: $(SRC) 99bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 100afdc8062SJeremy Soller touch $@ 101d9e4622fSJeremy Soller 1020c5abf03SJeremy Soller$(BUILD)/debug/crti.o: $(SRC) 103bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1040c5abf03SJeremy Soller touch $@ 1050c5abf03SJeremy Soller 1060c5abf03SJeremy Soller$(BUILD)/debug/crtn.o: $(SRC) 107bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1080c5abf03SJeremy Soller touch $@ 1090c5abf03SJeremy Soller 1100c5abf03SJeremy Soller$(BUILD)/release/librelibc.a: $(SRC) 111*2b56f288SJeremy Soller $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 112afdc8062SJeremy Soller touch $@ 11347ee733aSJeremy Soller 114*2b56f288SJeremy Soller$(BUILD)/release/librelibc.patched.a: $(BUILD)/release/librelibc.a 115*2b56f288SJeremy Soller # Patch out clzsi2.o from libgcc 116*2b56f288SJeremy Soller cp $< $@ 117*2b56f288SJeremy Soller ar d $@ clzsi2.o 118*2b56f288SJeremy Soller 1198c218b16SJeremy Soller$(BUILD)/release/crt0.o: $(SRC) 120bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 121afdc8062SJeremy Soller touch $@ 12247ee733aSJeremy Soller 123d659377bSjD91mZM2$(BUILD)/release/crti.o: $(SRC) 124bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 125d659377bSjD91mZM2 touch $@ 126d659377bSjD91mZM2 127d659377bSjD91mZM2$(BUILD)/release/crtn.o: $(SRC) 128bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 129d659377bSjD91mZM2 touch $@ 130d659377bSjD91mZM2 1317ab70031SJeremy Soller$(BUILD)/include: $(SRC) 1327ab70031SJeremy Soller rm -rf $@ $@.partial 1337ab70031SJeremy Soller mkdir -p $@.partial 1347ab70031SJeremy Soller ./include.sh $@.partial 1357ab70031SJeremy Soller mv $@.partial $@ 13682b9715fSJeremy Soller touch $@ 1377ab70031SJeremy Soller 138ae137dbcSJeremy Soller$(BUILD)/openlibm: openlibm 139ae137dbcSJeremy Soller rm -rf $@ $@.partial 14069993639SJeremy Soller mkdir -p $(BUILD) 141ae137dbcSJeremy Soller cp -r $< $@.partial 142ae137dbcSJeremy Soller mv $@.partial $@ 143afdc8062SJeremy Soller touch $@ 144ae137dbcSJeremy Soller 145124e118fSJeremy Soller$(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include 146cee4449fSJeremy Soller $(MAKE) CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a 1478aae8e15SJeremy Soller 1488aae8e15SJeremy Soller$(BUILD)/pthreads-emb: pthreads-emb 1498aae8e15SJeremy Soller rm -rf $@ $@.partial 1508aae8e15SJeremy Soller mkdir -p $(BUILD) 1518aae8e15SJeremy Soller cp -r $< $@.partial 1528aae8e15SJeremy Soller mv $@.partial $@ 1538aae8e15SJeremy Soller touch $@ 1548aae8e15SJeremy Soller 1558aae8e15SJeremy Soller$(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/include 156cee4449fSJeremy Soller $(MAKE) CC=$(CC) CFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libpthread.a 157