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