xref: /relibc/Makefile (revision 0be4208aa71152ced73b23b4242fa7ae8119bcaa)
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