1ae137dbcSJeremy SollerTARGET?= 2ae137dbcSJeremy Soller 38a972542SJeremy SollerCARGO?=cargo 426299181SJeremy SollerCARGO_TEST?=$(CARGO) 5604f1c11SJeremy SollerCARGOFLAGS?= 6604f1c11SJeremy SollerRUSTCFLAGS?= 7604f1c11SJeremy Soller 8604f1c11SJeremy Soller# When using xargo, build it in local location 9604f1c11SJeremy Sollerexport XARGO_HOME=$(CURDIR)/target/xargo 108a972542SJeremy Soller 116952a079SjD91mZM2export OBJCOPY=objcopy 126952a079SjD91mZM2 1347ee733aSJeremy SollerBUILD=target 14ae137dbcSJeremy Sollerifneq ($(TARGET),) 1547ee733aSJeremy Soller BUILD="target/$(TARGET)" 16604f1c11SJeremy Soller CARGOFLAGS+="--target=$(TARGET)" 1747ee733aSJeremy Sollerendif 1847ee733aSJeremy Soller 1947ee733aSJeremy Sollerifeq ($(TARGET),aarch64-unknown-linux-gnu) 20e102c234SAlexander Theißen export CC=aarch64-linux-gnu-gcc 215c0b37a2SJeremy Soller export LD=aarch64-linux-gnu-ld 220be4208aSsamuela export AR=aarch64-linux-gnu-ar 232073d2a8SJeremy Soller export OBJCOPY=aarch64-linux-gnu-objcopy 2447ee733aSJeremy Sollerendif 2547ee733aSJeremy Soller 260a44d454SJeremy Sollerifeq ($(TARGET),aarch64-unknown-redox) 270a44d454SJeremy Soller export CC=aarch64-unknown-redox-gcc 285c0b37a2SJeremy Soller export LD=aarch64-unknown-redox-ld 290be4208aSsamuela export AR=aarch64-unknown-redox-ar 302073d2a8SJeremy Soller export OBJCOPY=aarch64-unknown-redox-objcopy 310a44d454SJeremy Sollerendif 320a44d454SJeremy Soller 3347ee733aSJeremy Sollerifeq ($(TARGET),x86_64-unknown-redox) 34e102c234SAlexander Theißen export CC=x86_64-unknown-redox-gcc 355c0b37a2SJeremy Soller export LD=x86_64-unknown-redox-ld 360be4208aSsamuela export AR=x86_64-unknown-redox-ar 372073d2a8SJeremy Soller export OBJCOPY=x86_64-unknown-redox-objcopy 38ae137dbcSJeremy Sollerendif 39ae137dbcSJeremy Soller 40adcd0c99SJeremy SollerSRC=\ 419eef8d7eSJeremy Soller Cargo.* \ 427f702720SjD91mZM2 $(shell find src -type f) 43adcd0c99SJeremy Soller 442253ef60SGraham MacDonald.PHONY: all clean fmt install install-headers libs test 45d9e4622fSJeremy Soller 462253ef60SGraham MacDonaldall: | libs 47d9e4622fSJeremy Soller 48d9e4622fSJeremy Sollerclean: 49c36ee723SJeremy Soller $(CARGO) clean 50cee4449fSJeremy Soller $(MAKE) -C tests clean 51950b4526SJeremy Soller rm -rf sysroot 52d9e4622fSJeremy Soller 53729709a8SJeremy Sollercheck: 54c36ee723SJeremy Soller $(CARGO) check 55729709a8SJeremy Soller 56d9e4622fSJeremy Sollerfmt: 57d9e4622fSJeremy Soller ./fmt.sh 58d9e4622fSJeremy Soller 592253ef60SGraham MacDonaldinstall-headers: libs 6078c8c217SJeremy Soller mkdir -pv "$(DESTDIR)/include" 6178c8c217SJeremy Soller cp -rv "include"/* "$(DESTDIR)/include" 622253ef60SGraham MacDonald cp -rv "target/include"/* "$(DESTDIR)/include" 63950b4526SJeremy Soller cp -v "openlibm/include"/*.h "$(DESTDIR)/include" 64950b4526SJeremy Soller cp -v "openlibm/src"/*.h "$(DESTDIR)/include" 65be035f88SJeremy Soller cp -v "pthreads-emb/"*.h "$(DESTDIR)/include" 662fdca9bdSJeremy Soller 676a162758SJeremy Sollerlibs: \ 686a162758SJeremy Soller $(BUILD)/release/libc.a \ 696a162758SJeremy Soller $(BUILD)/release/libc.so \ 706a162758SJeremy Soller $(BUILD)/release/crt0.o \ 716a162758SJeremy Soller $(BUILD)/release/crti.o \ 726a162758SJeremy Soller $(BUILD)/release/crtn.o \ 736a162758SJeremy Soller $(BUILD)/release/ld_so 742b56f288SJeremy Soller 752b56f288SJeremy Sollerinstall-libs: libs 76950b4526SJeremy Soller mkdir -pv "$(DESTDIR)/lib" 774e3b6732SJeremy Soller cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib" 782b56f288SJeremy Soller cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib" 794e3b6732SJeremy Soller cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib" 80d659377bSjD91mZM2 cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib" 81d659377bSjD91mZM2 cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib" 82cb9e779cSJeremy Soller cp -v "$(BUILD)/release/ld_so" "$(DESTDIR)/lib/ld64.so.1" 8355378175SjD91mZM2 cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a" 84be035f88SJeremy Soller cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a" 8578c8c217SJeremy Soller 862fdca9bdSJeremy Sollerinstall: install-headers install-libs 872fdca9bdSJeremy Soller 8828f4da52SJeremy Sollersysroot: all 891acc2a1aSjD91mZM2 rm -rf $@ 9082b9715fSJeremy Soller rm -rf $@.partial 9182b9715fSJeremy Soller mkdir -p $@.partial 92cee4449fSJeremy Soller $(MAKE) install DESTDIR=$@.partial 9382b9715fSJeremy Soller mv $@.partial $@ 9482b9715fSJeremy Soller touch $@ 9582b9715fSJeremy Soller 96d659377bSjD91mZM2test: sysroot 97d827c0f1SjD91mZM2 # TODO: Fix SIGILL when running cargo test 98d827c0f1SjD91mZM2 # $(CARGO_TEST) test 995c0b37a2SJeremy Soller $(MAKE) -C tests verify 100d9e4622fSJeremy Soller 101084b69b3SJeremy Soller# Debug targets 102084b69b3SJeremy Soller 103084b69b3SJeremy Soller$(BUILD)/debug/libc.a: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 1040c5abf03SJeremy Soller echo "create $@" > "$@.mri" 1050c5abf03SJeremy Soller for lib in $^; do\ 1060c5abf03SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 1070c5abf03SJeremy Soller done 1080c5abf03SJeremy Soller echo "save" >> "$@.mri" 1090c5abf03SJeremy Soller echo "end" >> "$@.mri" 1100be4208aSsamuela $(AR) -M < "$@.mri" 1110c5abf03SJeremy Soller 1122606266cSJeremy Soller$(BUILD)/debug/libc.so: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 113*9826cea0Soddcoder $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -Wl,-soname,libc.so.6 -o $@ 1142b56f288SJeremy Soller 1150c5abf03SJeremy Soller$(BUILD)/debug/librelibc.a: $(SRC) 11627cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 1172073d2a8SJeremy Soller # FIXME: Remove the following line. It's only required since xargo automatically links with compiler_builtins, which conflicts with the compiler_builtins that rustc always links with. 11800b08605SJames Graves $(OBJCOPY) $@ -W __divti3 -W __muloti4 -W __udivti3 -W __floattidf 119afdc8062SJeremy Soller touch $@ 120d9e4622fSJeremy Soller 1218c218b16SJeremy Soller$(BUILD)/debug/crt0.o: $(SRC) 122bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 123afdc8062SJeremy Soller touch $@ 124d9e4622fSJeremy Soller 1250c5abf03SJeremy Soller$(BUILD)/debug/crti.o: $(SRC) 126bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1270c5abf03SJeremy Soller touch $@ 1280c5abf03SJeremy Soller 1290c5abf03SJeremy Soller$(BUILD)/debug/crtn.o: $(SRC) 130bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1310c5abf03SJeremy Soller touch $@ 1320c5abf03SJeremy Soller 133084b69b3SJeremy Soller$(BUILD)/debug/ld_so.o: $(SRC) 134084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 135084b69b3SJeremy Soller touch $@ 136084b69b3SJeremy Soller 137084b69b3SJeremy Soller$(BUILD)/debug/ld_so: $(BUILD)/debug/ld_so.o $(BUILD)/debug/crti.o $(BUILD)/debug/libc.a $(BUILD)/debug/crtn.o 1380178565fSjD91mZM2 $(LD) -T src/ld_so/ld_script --allow-multiple-definition --gc-sections --gc-keep-exported $^ -o $@ 139084b69b3SJeremy Soller 140084b69b3SJeremy Soller# Release targets 141084b69b3SJeremy Soller 142084b69b3SJeremy Soller$(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 143084b69b3SJeremy Soller echo "create $@" > "$@.mri" 144084b69b3SJeremy Soller for lib in $^; do\ 145084b69b3SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 146084b69b3SJeremy Soller done 147084b69b3SJeremy Soller echo "save" >> "$@.mri" 148084b69b3SJeremy Soller echo "end" >> "$@.mri" 1490be4208aSsamuela $(AR) -M < "$@.mri" 150084b69b3SJeremy Soller 1512606266cSJeremy Soller$(BUILD)/release/libc.so: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 152*9826cea0Soddcoder $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -Wl,-soname,libc.so.6 -o $@ 153084b69b3SJeremy Soller 1540c5abf03SJeremy Soller$(BUILD)/release/librelibc.a: $(SRC) 15527cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 1562073d2a8SJeremy Soller # FIXME: Remove the following line. It's only required since xargo automatically links with compiler_builtins, which conflicts with the compiler_builtins that rustc always links with. 15700b08605SJames Graves $(OBJCOPY) $@ -W __divti3 -W __muloti4 -W __udivti3 -W __floattidf 158afdc8062SJeremy Soller touch $@ 15947ee733aSJeremy Soller 1608c218b16SJeremy Soller$(BUILD)/release/crt0.o: $(SRC) 161bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 162afdc8062SJeremy Soller touch $@ 16347ee733aSJeremy Soller 164d659377bSjD91mZM2$(BUILD)/release/crti.o: $(SRC) 165bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 166d659377bSjD91mZM2 touch $@ 167d659377bSjD91mZM2 168d659377bSjD91mZM2$(BUILD)/release/crtn.o: $(SRC) 169bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 170d659377bSjD91mZM2 touch $@ 171d659377bSjD91mZM2 172084b69b3SJeremy Soller$(BUILD)/release/ld_so.o: $(SRC) 173084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 174084b69b3SJeremy Soller touch $@ 175084b69b3SJeremy Soller 176084b69b3SJeremy Soller$(BUILD)/release/ld_so: $(BUILD)/release/ld_so.o $(BUILD)/release/crti.o $(BUILD)/release/libc.a $(BUILD)/release/crtn.o 1770178565fSjD91mZM2 $(LD) -T src/ld_so/ld_script --allow-multiple-definition --gc-sections --gc-keep-exported $^ -o $@ 178084b69b3SJeremy Soller 179084b69b3SJeremy Soller# Other targets 180084b69b3SJeremy Soller 181ae137dbcSJeremy Soller$(BUILD)/openlibm: openlibm 182ae137dbcSJeremy Soller rm -rf $@ $@.partial 18369993639SJeremy Soller mkdir -p $(BUILD) 184ae137dbcSJeremy Soller cp -r $< $@.partial 185ae137dbcSJeremy Soller mv $@.partial $@ 186afdc8062SJeremy Soller touch $@ 187ae137dbcSJeremy Soller 1882253ef60SGraham MacDonald$(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/release/librelibc.a 1892253ef60SGraham MacDonald $(MAKE) CC=$(CC) CPPFLAGS="-fno-stack-protector -I $(shell pwd)/include -I $(shell pwd)/target/include" -C $< libopenlibm.a 1908aae8e15SJeremy Soller 1918aae8e15SJeremy Soller$(BUILD)/pthreads-emb: pthreads-emb 1928aae8e15SJeremy Soller rm -rf $@ $@.partial 1938aae8e15SJeremy Soller mkdir -p $(BUILD) 1948aae8e15SJeremy Soller cp -r $< $@.partial 1958aae8e15SJeremy Soller mv $@.partial $@ 1968aae8e15SJeremy Soller touch $@ 1978aae8e15SJeremy Soller 1982253ef60SGraham MacDonald$(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/release/librelibc.a 1992253ef60SGraham MacDonald $(MAKE) CC=$(CC) CFLAGS="-fno-stack-protector -I $(shell pwd)/include -I $(shell pwd)/target/include" -C $< libpthread.a 200