16fd98d55Slongjin# TARGET?=$(shell rustc -Z unstable-options --print target-spec-json | grep llvm-target | cut -d '"' -f4) 26fd98d55SlongjinTARGET=x86_64-unknown-dragonos 3ae137dbcSJeremy Soller 48a972542SJeremy SollerCARGO?=cargo 526299181SJeremy SollerCARGO_TEST?=$(CARGO) 62186cd1fS4lDO2CARGO_COMMON_FLAGS=-Z build-std=core,alloc,compiler_builtins 72186cd1fS4lDO2CARGOFLAGS?=$(CARGO_COMMON_FLAGS) 8604f1c11SJeremy SollerRUSTCFLAGS?= 93c1300e8SJeremy Sollerexport OBJCOPY?=objcopy 10604f1c11SJeremy Soller 1147ee733aSJeremy SollerBUILD="target/$(TARGET)" 12604f1c11SJeremy SollerCARGOFLAGS+="--target=$(TARGET)" 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 182073d2a8SJeremy Soller export OBJCOPY=aarch64-linux-gnu-objcopy 1947ee733aSJeremy Sollerendif 2047ee733aSJeremy Soller 210a44d454SJeremy Sollerifeq ($(TARGET),aarch64-unknown-redox) 220a44d454SJeremy Soller export CC=aarch64-unknown-redox-gcc 235c0b37a2SJeremy Soller export LD=aarch64-unknown-redox-ld 240be4208aSsamuela export AR=aarch64-unknown-redox-ar 252073d2a8SJeremy Soller export OBJCOPY=aarch64-unknown-redox-objcopy 260a44d454SJeremy Sollerendif 270a44d454SJeremy Soller 283c1300e8SJeremy Sollerifeq ($(TARGET),x86_64-unknown-linux-gnu) 293c1300e8SJeremy Soller export CC=x86_64-linux-gnu-gcc 303c1300e8SJeremy Soller export LD=x86_64-linux-gnu-ld 313c1300e8SJeremy Soller export AR=x86_64-linux-gnu-ar 323c1300e8SJeremy Soller export OBJCOPY=x86_64-linux-gnu-objcopy 333c1300e8SJeremy Sollerendif 343c1300e8SJeremy Soller 35559387ccSJeremy Sollerifeq ($(TARGET),i686-unknown-redox) 36559387ccSJeremy Soller export CC=i686-unknown-redox-gcc 37559387ccSJeremy Soller export LD=i686-unknown-redox-ld 38559387ccSJeremy Soller export AR=i686-unknown-redox-ar 39559387ccSJeremy Soller export OBJCOPY=i686-unknown-redox-objcopy 40559387ccSJeremy Sollerendif 41559387ccSJeremy Soller 4247ee733aSJeremy Sollerifeq ($(TARGET),x86_64-unknown-redox) 43e102c234SAlexander Theißen export CC=x86_64-unknown-redox-gcc 445c0b37a2SJeremy Soller export LD=x86_64-unknown-redox-ld 450be4208aSsamuela export AR=x86_64-unknown-redox-ar 462073d2a8SJeremy Soller export OBJCOPY=x86_64-unknown-redox-objcopy 47ae137dbcSJeremy Sollerendif 48ae137dbcSJeremy Soller 496fd98d55Slongjinifeq ($(TARGET),x86_64-unknown-dragonos) 50*5e1004a8Slogin# 如果存在x86_64-dragonos-gcc,就用它,否则用gcc 51*5e1004a8Slogin 52*5e1004a8Sloginifeq ($(shell which x86_64-dragonos-gcc),) 5339989b48Slongjin export CC=gcc 546fd98d55Slongjin# export LD=ld 5539989b48Slongjin export LD=ld 566fd98d55Slongjin export AR=ar 576fd98d55Slongjin# export AR=x86_64-dragonos-ar 586fd98d55Slongjin export OBJCOPY=objcopy 596fd98d55Slongjin# export OBJCOPY=x86_64-dragonos-objcopy 60*5e1004a8Sloginelse 61*5e1004a8Slogin export CC=x86_64-dragonos-gcc 62*5e1004a8Slogin export LD=x86_64-dragonos-ld 63*5e1004a8Slogin export AR=x86_64-dragonos-ar 64*5e1004a8Slogin export OBJCOPY=x86_64-dragonos-objcopy 65*5e1004a8Sloginendif 666fd98d55Slongjinendif 676fd98d55Slongjin 68adcd0c99SJeremy SollerSRC=\ 699eef8d7eSJeremy Soller Cargo.* \ 707f702720SjD91mZM2 $(shell find src -type f) 71adcd0c99SJeremy Soller 722186cd1fS4lDO2BUILTINS_VERSION=0.1.70 733a0d2177SJeremy Soller 74e5539a57Shasheddan.PHONY: all clean fmt install install-headers libs submodules test 75d9e4622fSJeremy Soller 762253ef60SGraham MacDonaldall: | libs 77d9e4622fSJeremy Soller 78d9e4622fSJeremy Sollerclean: 79c36ee723SJeremy Soller $(CARGO) clean 80cee4449fSJeremy Soller $(MAKE) -C tests clean 81950b4526SJeremy Soller rm -rf sysroot 82d9e4622fSJeremy Soller 83729709a8SJeremy Sollercheck: 84c36ee723SJeremy Soller $(CARGO) check 85729709a8SJeremy Soller 86d9e4622fSJeremy Sollerfmt: 87d9e4622fSJeremy Soller ./fmt.sh 88d9e4622fSJeremy Soller 892253ef60SGraham MacDonaldinstall-headers: libs 9078c8c217SJeremy Soller mkdir -pv "$(DESTDIR)/include" 9178c8c217SJeremy Soller cp -rv "include"/* "$(DESTDIR)/include" 922253ef60SGraham MacDonald cp -rv "target/include"/* "$(DESTDIR)/include" 93950b4526SJeremy Soller cp -v "openlibm/include"/*.h "$(DESTDIR)/include" 94950b4526SJeremy Soller cp -v "openlibm/src"/*.h "$(DESTDIR)/include" 95be035f88SJeremy Soller cp -v "pthreads-emb/"*.h "$(DESTDIR)/include" 962fdca9bdSJeremy Soller 97ed193815Slongjin# $(BUILD)/release/libc.so 986a162758SJeremy Sollerlibs: \ 996a162758SJeremy Soller $(BUILD)/release/libc.a \ 1006a162758SJeremy Soller $(BUILD)/release/crt0.o \ 1016a162758SJeremy Soller $(BUILD)/release/crti.o \ 102ed193815Slongjin $(BUILD)/release/crtn.o 103ed193815Slongjin#$(BUILD)/release/ld_so 1042b56f288SJeremy Soller 1052b56f288SJeremy Sollerinstall-libs: libs 106950b4526SJeremy Soller mkdir -pv "$(DESTDIR)/lib" 1074e3b6732SJeremy Soller cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib" 108ed193815Slongjin# cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib" 109ed193815Slongjin# ln -frsv "$(DESTDIR)/lib/libc.so" "$(DESTDIR)/lib/libc.so.6" 1104e3b6732SJeremy Soller cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib" 1117f7d73deSJeremy Soller ln -frsv "$(DESTDIR)/lib/crt0.o" "$(DESTDIR)/lib/crt1.o" 112d659377bSjD91mZM2 cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib" 113d659377bSjD91mZM2 cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib" 114ed193815Slongjin# cp -v "$(BUILD)/release/ld_so" "$(DESTDIR)/lib/ld64.so.1" 11555378175SjD91mZM2 cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a" 116be035f88SJeremy Soller cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a" 117ba87e489SJeremy Soller # Empty libraries for dl and rt 118ba87e489SJeremy Soller $(AR) -rcs "$(DESTDIR)/lib/libdl.a" 119ba87e489SJeremy Soller $(AR) -rcs "$(DESTDIR)/lib/librt.a" 12078c8c217SJeremy Soller 1212fdca9bdSJeremy Sollerinstall: install-headers install-libs 1222fdca9bdSJeremy Soller 123e5539a57Shasheddansubmodules: 124e5539a57Shasheddan git submodule sync 125e5539a57Shasheddan git submodule update --init --recursive 126e5539a57Shasheddan 12728f4da52SJeremy Sollersysroot: all 1281acc2a1aSjD91mZM2 rm -rf $@ 12982b9715fSJeremy Soller rm -rf $@.partial 13082b9715fSJeremy Soller mkdir -p $@.partial 131cee4449fSJeremy Soller $(MAKE) install DESTDIR=$@.partial 13282b9715fSJeremy Soller mv $@.partial $@ 13382b9715fSJeremy Soller touch $@ 13482b9715fSJeremy Soller 135d659377bSjD91mZM2test: sysroot 136d827c0f1SjD91mZM2 # TODO: Fix SIGILL when running cargo test 137d827c0f1SjD91mZM2 # $(CARGO_TEST) test 1385c0b37a2SJeremy Soller $(MAKE) -C tests verify 139d9e4622fSJeremy Soller 140084b69b3SJeremy Soller# Debug targets 141084b69b3SJeremy Soller 142084b69b3SJeremy Soller$(BUILD)/debug/libc.a: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 1430c5abf03SJeremy Soller echo "create $@" > "$@.mri" 1440c5abf03SJeremy Soller for lib in $^; do\ 1450c5abf03SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 1460c5abf03SJeremy Soller done 1470c5abf03SJeremy Soller echo "save" >> "$@.mri" 1480c5abf03SJeremy Soller echo "end" >> "$@.mri" 1490be4208aSsamuela $(AR) -M < "$@.mri" 1500c5abf03SJeremy Soller 1512606266cSJeremy Soller$(BUILD)/debug/libc.so: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 1529826cea0Soddcoder $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -Wl,-soname,libc.so.6 -o $@ 1532b56f288SJeremy Soller 1540c5abf03SJeremy Soller$(BUILD)/debug/librelibc.a: $(SRC) 15527cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 1562186cd1fS4lDO2 ./renamesyms.sh $@ $(BUILD)/debug/deps/ 157afdc8062SJeremy Soller touch $@ 158d9e4622fSJeremy Soller 1598c218b16SJeremy Soller$(BUILD)/debug/crt0.o: $(SRC) 160bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 161afdc8062SJeremy Soller touch $@ 162d9e4622fSJeremy Soller 1630c5abf03SJeremy Soller$(BUILD)/debug/crti.o: $(SRC) 164bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1650c5abf03SJeremy Soller touch $@ 1660c5abf03SJeremy Soller 1670c5abf03SJeremy Soller$(BUILD)/debug/crtn.o: $(SRC) 168bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 1690c5abf03SJeremy Soller touch $@ 1700c5abf03SJeremy Soller 171084b69b3SJeremy Soller$(BUILD)/debug/ld_so.o: $(SRC) 172084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 173084b69b3SJeremy Soller touch $@ 174084b69b3SJeremy Soller 175084b69b3SJeremy Soller$(BUILD)/debug/ld_so: $(BUILD)/debug/ld_so.o $(BUILD)/debug/crti.o $(BUILD)/debug/libc.a $(BUILD)/debug/crtn.o 1763c1300e8SJeremy Soller $(LD) --no-relax -T src/ld_so/ld_script/$(TARGET).ld --allow-multiple-definition --gc-sections --gc-keep-exported $^ -o $@ 177084b69b3SJeremy Soller 178084b69b3SJeremy Soller# Release targets 179084b69b3SJeremy Soller 180084b69b3SJeremy Soller$(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 181084b69b3SJeremy Soller echo "create $@" > "$@.mri" 182084b69b3SJeremy Soller for lib in $^; do\ 183084b69b3SJeremy Soller echo "addlib $$lib" >> "$@.mri"; \ 184084b69b3SJeremy Soller done 185084b69b3SJeremy Soller echo "save" >> "$@.mri" 186084b69b3SJeremy Soller echo "end" >> "$@.mri" 1870be4208aSsamuela $(AR) -M < "$@.mri" 188084b69b3SJeremy Soller 1892606266cSJeremy Soller$(BUILD)/release/libc.so: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a 1909826cea0Soddcoder $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -Wl,-soname,libc.so.6 -o $@ 191084b69b3SJeremy Soller 1920c5abf03SJeremy Soller$(BUILD)/release/librelibc.a: $(SRC) 19327cebdd6SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS) 1942186cd1fS4lDO2 # TODO: Better to only allow a certain whitelisted set of symbols? Perhaps 1952186cd1fS4lDO2 # use some cbindgen hook, specify them manually, or grep for #[no_mangle]. 1962186cd1fS4lDO2 ./renamesyms.sh $@ $(BUILD)/release/deps/ 197afdc8062SJeremy Soller touch $@ 19847ee733aSJeremy Soller 1998c218b16SJeremy Soller$(BUILD)/release/crt0.o: $(SRC) 200bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 201afdc8062SJeremy Soller touch $@ 20247ee733aSJeremy Soller 203d659377bSjD91mZM2$(BUILD)/release/crti.o: $(SRC) 204bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 205d659377bSjD91mZM2 touch $@ 206d659377bSjD91mZM2 207d659377bSjD91mZM2$(BUILD)/release/crtn.o: $(SRC) 208bee72373SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 209d659377bSjD91mZM2 touch $@ 210d659377bSjD91mZM2 211084b69b3SJeremy Soller$(BUILD)/release/ld_so.o: $(SRC) 212084b69b3SJeremy Soller CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS) 213084b69b3SJeremy Soller touch $@ 214084b69b3SJeremy Soller 215084b69b3SJeremy Soller$(BUILD)/release/ld_so: $(BUILD)/release/ld_so.o $(BUILD)/release/crti.o $(BUILD)/release/libc.a $(BUILD)/release/crtn.o 2163c1300e8SJeremy Soller $(LD) --no-relax -T src/ld_so/ld_script/$(TARGET).ld --allow-multiple-definition --gc-sections --gc-keep-exported $^ -o $@ 217084b69b3SJeremy Soller 218084b69b3SJeremy Soller# Other targets 219084b69b3SJeremy Soller 220ae137dbcSJeremy Soller$(BUILD)/openlibm: openlibm 221ae137dbcSJeremy Soller rm -rf $@ $@.partial 22269993639SJeremy Soller mkdir -p $(BUILD) 223ae137dbcSJeremy Soller cp -r $< $@.partial 224ae137dbcSJeremy Soller mv $@.partial $@ 225afdc8062SJeremy Soller touch $@ 226ae137dbcSJeremy Soller 2272253ef60SGraham MacDonald$(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/release/librelibc.a 2283c1300e8SJeremy Soller $(MAKE) AR=$(AR) CC=$(CC) LD=$(LD) CPPFLAGS="-fno-stack-protector -I $(shell pwd)/include -I $(shell pwd)/target/include" -C $< libopenlibm.a 2298aae8e15SJeremy Soller 2308aae8e15SJeremy Soller$(BUILD)/pthreads-emb: pthreads-emb 2318aae8e15SJeremy Soller rm -rf $@ $@.partial 2328aae8e15SJeremy Soller mkdir -p $(BUILD) 2338aae8e15SJeremy Soller cp -r $< $@.partial 2348aae8e15SJeremy Soller mv $@.partial $@ 2358aae8e15SJeremy Soller touch $@ 2368aae8e15SJeremy Soller 2372253ef60SGraham MacDonald$(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/release/librelibc.a 2383c1300e8SJeremy Soller $(MAKE) AR=$(AR) CC=$(CC) LD=$(LD) CFLAGS="-fno-stack-protector -I $(shell pwd)/include -I $(shell pwd)/target/include" -C $< libpthread.a 239