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