xref: /relibc/Makefile (revision 2629918100d3c23a8fd2086a28271d356f8034e9)
1ae137dbcSJeremy SollerTARGET?=
2ae137dbcSJeremy Soller
38a972542SJeremy SollerCARGO?=cargo
4*26299181SJeremy SollerCARGO_TEST?=$(CARGO)
581dc1442SJeremy SollerCARGOFLAGS=
662b0b0d5SJeremy SollerRUSTCFLAGS=
78a972542SJeremy Soller
847ee733aSJeremy SollerBUILD=target
9ae137dbcSJeremy Sollerifneq ($(TARGET),)
1047ee733aSJeremy Soller	BUILD="target/$(TARGET)"
1181dc1442SJeremy Soller	CARGOFLAGS="--target=$(TARGET)"
1247ee733aSJeremy Sollerendif
1347ee733aSJeremy Soller
1447ee733aSJeremy Sollerifeq ($(TARGET),aarch64-unknown-linux-gnu)
15e102c234SAlexander Theißen	export CC=aarch64-linux-gnu-gcc
165c0b37a2SJeremy Soller	export LD=aarch64-linux-gnu-ld
170be4208aSsamuela	export AR=aarch64-linux-gnu-ar
1847ee733aSJeremy Sollerendif
1947ee733aSJeremy Soller
200a44d454SJeremy Sollerifeq ($(TARGET),aarch64-unknown-redox)
210a44d454SJeremy Soller	export CC=aarch64-unknown-redox-gcc
225c0b37a2SJeremy Soller	export LD=aarch64-unknown-redox-ld
230be4208aSsamuela	export AR=aarch64-unknown-redox-ar
240a44d454SJeremy Sollerendif
250a44d454SJeremy Soller
2647ee733aSJeremy Sollerifeq ($(TARGET),x86_64-unknown-redox)
27e102c234SAlexander Theißen	export CC=x86_64-unknown-redox-gcc
285c0b37a2SJeremy Soller	export LD=x86_64-unknown-redox-ld
290be4208aSsamuela	export AR=x86_64-unknown-redox-ar
30ae137dbcSJeremy Sollerendif
31ae137dbcSJeremy Soller
32adcd0c99SJeremy SollerSRC=\
339eef8d7eSJeremy Soller	Cargo.* \
347f702720SjD91mZM2	$(shell find src -type f)
35adcd0c99SJeremy Soller
362b56f288SJeremy Soller.PHONY: all clean fmt headers install install-headers libs test
37d9e4622fSJeremy Soller
382b56f288SJeremy Sollerall: | headers libs
39d9e4622fSJeremy Soller
40d9e4622fSJeremy Sollerclean:
41c36ee723SJeremy Soller	$(CARGO) clean
4263a1319eSMateusz Mikuła	$(CARGO) clean --manifest-path cbindgen/Cargo.toml
43cee4449fSJeremy Soller	$(MAKE) -C tests clean
44950b4526SJeremy Soller	rm -rf sysroot
45d9e4622fSJeremy Soller
46729709a8SJeremy Sollercheck:
47c36ee723SJeremy Soller	$(CARGO) check
48729709a8SJeremy Soller
49d9e4622fSJeremy Sollerfmt:
50d9e4622fSJeremy Soller	./fmt.sh
51d9e4622fSJeremy Soller
522fdca9bdSJeremy Sollerheaders: $(BUILD)/include
532fdca9bdSJeremy Soller
542fdca9bdSJeremy Sollerinstall-headers: headers
5578c8c217SJeremy Soller	mkdir -pv "$(DESTDIR)/include"
5678c8c217SJeremy Soller	cp -rv "include"/* "$(DESTDIR)/include"
570258fb3fSJeremy Soller	cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include"
58950b4526SJeremy Soller	cp -v "openlibm/include"/*.h "$(DESTDIR)/include"
59950b4526SJeremy Soller	cp -v "openlibm/src"/*.h "$(DESTDIR)/include"
60be035f88SJeremy Soller	cp -v "pthreads-emb/"*.h "$(DESTDIR)/include"
612fdca9bdSJeremy Soller
626a162758SJeremy Sollerlibs: \
636a162758SJeremy Soller	$(BUILD)/release/libc.a \
646a162758SJeremy Soller	$(BUILD)/release/libc.so \
656a162758SJeremy Soller	$(BUILD)/release/crt0.o \
666a162758SJeremy Soller	$(BUILD)/release/crti.o \
676a162758SJeremy Soller	$(BUILD)/release/crtn.o \
686a162758SJeremy Soller	$(BUILD)/release/ld_so
692b56f288SJeremy Soller
702b56f288SJeremy Sollerinstall-libs: libs
71950b4526SJeremy Soller	mkdir -pv "$(DESTDIR)/lib"
724e3b6732SJeremy Soller	cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib"
732b56f288SJeremy Soller	cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib"
744e3b6732SJeremy Soller	cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib"
75d659377bSjD91mZM2	cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib"
76d659377bSjD91mZM2	cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib"
77cb9e779cSJeremy Soller	cp -v "$(BUILD)/release/ld_so" "$(DESTDIR)/lib/ld64.so.1"
7855378175SjD91mZM2	cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a"
79be035f88SJeremy Soller	cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a"
8078c8c217SJeremy Soller
812fdca9bdSJeremy Sollerinstall: install-headers install-libs
822fdca9bdSJeremy Soller
8328f4da52SJeremy Sollersysroot: all
841acc2a1aSjD91mZM2	rm -rf $@
8582b9715fSJeremy Soller	rm -rf $@.partial
8682b9715fSJeremy Soller	mkdir -p $@.partial
87cee4449fSJeremy Soller	$(MAKE) install DESTDIR=$@.partial
8882b9715fSJeremy Soller	mv $@.partial $@
8982b9715fSJeremy Soller	touch $@
9082b9715fSJeremy Soller
91d659377bSjD91mZM2test: sysroot
92*26299181SJeremy Soller	$(CARGO_TEST) test
935c0b37a2SJeremy Soller	$(MAKE) -C tests verify
94d9e4622fSJeremy Soller
95084b69b3SJeremy Soller# Debug targets
96084b69b3SJeremy Soller
97084b69b3SJeremy Soller$(BUILD)/debug/libc.a: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
980c5abf03SJeremy Soller	echo "create $@" > "$@.mri"
990c5abf03SJeremy Soller	for lib in $^; do\
1000c5abf03SJeremy Soller		echo "addlib $$lib" >> "$@.mri"; \
1010c5abf03SJeremy Soller	done
1020c5abf03SJeremy Soller	echo "save" >> "$@.mri"
1030c5abf03SJeremy Soller	echo "end" >> "$@.mri"
1040be4208aSsamuela	$(AR) -M < "$@.mri"
1050c5abf03SJeremy Soller
1062606266cSJeremy Soller$(BUILD)/debug/libc.so: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
107e146cb36SJeremy Soller	$(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@
1082b56f288SJeremy Soller
1090c5abf03SJeremy Soller$(BUILD)/debug/librelibc.a: $(SRC)
11027cebdd6SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS)
111afdc8062SJeremy Soller	touch $@
112d9e4622fSJeremy Soller
1138c218b16SJeremy Soller$(BUILD)/debug/crt0.o: $(SRC)
114bee72373SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
115afdc8062SJeremy Soller	touch $@
116d9e4622fSJeremy Soller
1170c5abf03SJeremy Soller$(BUILD)/debug/crti.o: $(SRC)
118bee72373SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
1190c5abf03SJeremy Soller	touch $@
1200c5abf03SJeremy Soller
1210c5abf03SJeremy Soller$(BUILD)/debug/crtn.o: $(SRC)
122bee72373SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
1230c5abf03SJeremy Soller	touch $@
1240c5abf03SJeremy Soller
125084b69b3SJeremy Soller$(BUILD)/debug/ld_so.o: $(SRC)
126084b69b3SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
127084b69b3SJeremy Soller	touch $@
128084b69b3SJeremy Soller
129084b69b3SJeremy Soller$(BUILD)/debug/ld_so: $(BUILD)/debug/ld_so.o $(BUILD)/debug/crti.o $(BUILD)/debug/libc.a $(BUILD)/debug/crtn.o
130e146cb36SJeremy Soller	$(LD) --allow-multiple-definition --gc-sections $^ -o $@
131084b69b3SJeremy Soller
132084b69b3SJeremy Soller# Release targets
133084b69b3SJeremy Soller
134084b69b3SJeremy Soller$(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
135084b69b3SJeremy Soller	echo "create $@" > "$@.mri"
136084b69b3SJeremy Soller	for lib in $^; do\
137084b69b3SJeremy Soller		echo "addlib $$lib" >> "$@.mri"; \
138084b69b3SJeremy Soller	done
139084b69b3SJeremy Soller	echo "save" >> "$@.mri"
140084b69b3SJeremy Soller	echo "end" >> "$@.mri"
1410be4208aSsamuela	$(AR) -M < "$@.mri"
142084b69b3SJeremy Soller
1432606266cSJeremy Soller$(BUILD)/release/libc.so: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
144e146cb36SJeremy Soller	$(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@
145084b69b3SJeremy Soller
1460c5abf03SJeremy Soller$(BUILD)/release/librelibc.a: $(SRC)
14727cebdd6SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS)
148afdc8062SJeremy Soller	touch $@
14947ee733aSJeremy Soller
1508c218b16SJeremy Soller$(BUILD)/release/crt0.o: $(SRC)
151bee72373SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
152afdc8062SJeremy Soller	touch $@
15347ee733aSJeremy Soller
154d659377bSjD91mZM2$(BUILD)/release/crti.o: $(SRC)
155bee72373SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
156d659377bSjD91mZM2	touch $@
157d659377bSjD91mZM2
158d659377bSjD91mZM2$(BUILD)/release/crtn.o: $(SRC)
159bee72373SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
160d659377bSjD91mZM2	touch $@
161d659377bSjD91mZM2
162084b69b3SJeremy Soller$(BUILD)/release/ld_so.o: $(SRC)
163084b69b3SJeremy Soller	CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
164084b69b3SJeremy Soller	touch $@
165084b69b3SJeremy Soller
166084b69b3SJeremy Soller$(BUILD)/release/ld_so: $(BUILD)/release/ld_so.o $(BUILD)/release/crti.o $(BUILD)/release/libc.a $(BUILD)/release/crtn.o
167e146cb36SJeremy Soller	$(LD) --allow-multiple-definition --gc-sections $^ -o $@
168084b69b3SJeremy Soller
169084b69b3SJeremy Soller# Other targets
170084b69b3SJeremy Soller
1717ab70031SJeremy Soller$(BUILD)/include: $(SRC)
1727ab70031SJeremy Soller	rm -rf $@ $@.partial
1737ab70031SJeremy Soller	mkdir -p $@.partial
1747ab70031SJeremy Soller	./include.sh $@.partial
1757ab70031SJeremy Soller	mv $@.partial $@
17682b9715fSJeremy Soller	touch $@
1777ab70031SJeremy Soller
178ae137dbcSJeremy Soller$(BUILD)/openlibm: openlibm
179ae137dbcSJeremy Soller	rm -rf $@ $@.partial
18069993639SJeremy Soller	mkdir -p $(BUILD)
181ae137dbcSJeremy Soller	cp -r $< $@.partial
182ae137dbcSJeremy Soller	mv $@.partial $@
183afdc8062SJeremy Soller	touch $@
184ae137dbcSJeremy Soller
185124e118fSJeremy Soller$(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include
186cee4449fSJeremy Soller	$(MAKE) CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a
1878aae8e15SJeremy Soller
1888aae8e15SJeremy Soller$(BUILD)/pthreads-emb: pthreads-emb
1898aae8e15SJeremy Soller	rm -rf $@ $@.partial
1908aae8e15SJeremy Soller	mkdir -p $(BUILD)
1918aae8e15SJeremy Soller	cp -r $< $@.partial
1928aae8e15SJeremy Soller	mv $@.partial $@
1938aae8e15SJeremy Soller	touch $@
1948aae8e15SJeremy Soller
1958aae8e15SJeremy Soller$(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/include
196cee4449fSJeremy Soller	$(MAKE) CC=$(CC) CFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libpthread.a
197