Makefile 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. TARGET?=
  2. CARGO?=cargo
  3. CARGO_TEST?=$(CARGO)
  4. CARGOFLAGS=
  5. RUSTCFLAGS=
  6. BUILD=target
  7. ifneq ($(TARGET),)
  8. BUILD="target/$(TARGET)"
  9. CARGOFLAGS="--target=$(TARGET)"
  10. endif
  11. ifeq ($(TARGET),aarch64-unknown-linux-gnu)
  12. export CC=aarch64-linux-gnu-gcc
  13. export LD=aarch64-linux-gnu-ld
  14. export AR=aarch64-linux-gnu-ar
  15. endif
  16. ifeq ($(TARGET),aarch64-unknown-redox)
  17. export CC=aarch64-unknown-redox-gcc
  18. export LD=aarch64-unknown-redox-ld
  19. export AR=aarch64-unknown-redox-ar
  20. endif
  21. ifeq ($(TARGET),x86_64-unknown-redox)
  22. export CC=x86_64-unknown-redox-gcc
  23. export LD=x86_64-unknown-redox-ld
  24. export AR=x86_64-unknown-redox-ar
  25. endif
  26. SRC=\
  27. Cargo.* \
  28. $(shell find src -type f)
  29. .PHONY: all clean fmt headers install install-headers libs test
  30. all: | headers libs
  31. clean:
  32. $(CARGO) clean
  33. $(CARGO) clean --manifest-path cbindgen/Cargo.toml
  34. $(MAKE) -C tests clean
  35. rm -rf sysroot
  36. check:
  37. $(CARGO) check
  38. fmt:
  39. ./fmt.sh
  40. headers: $(BUILD)/include
  41. install-headers: headers
  42. mkdir -pv "$(DESTDIR)/include"
  43. cp -rv "include"/* "$(DESTDIR)/include"
  44. cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include"
  45. cp -v "openlibm/include"/*.h "$(DESTDIR)/include"
  46. cp -v "openlibm/src"/*.h "$(DESTDIR)/include"
  47. cp -v "pthreads-emb/"*.h "$(DESTDIR)/include"
  48. libs: \
  49. $(BUILD)/release/libc.a \
  50. $(BUILD)/release/libc.so \
  51. $(BUILD)/release/crt0.o \
  52. $(BUILD)/release/crti.o \
  53. $(BUILD)/release/crtn.o \
  54. $(BUILD)/release/ld_so
  55. install-libs: libs
  56. mkdir -pv "$(DESTDIR)/lib"
  57. cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib"
  58. cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib"
  59. cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib"
  60. cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib"
  61. cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib"
  62. cp -v "$(BUILD)/release/ld_so" "$(DESTDIR)/lib/ld64.so.1"
  63. cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a"
  64. cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a"
  65. install: install-headers install-libs
  66. sysroot: all
  67. rm -rf $@
  68. rm -rf [email protected]
  69. mkdir -p [email protected]
  70. $(MAKE) install [email protected]
  71. mv [email protected] $@
  72. touch $@
  73. test: sysroot
  74. $(CARGO_TEST) test
  75. $(MAKE) -C tests verify
  76. # Debug targets
  77. $(BUILD)/debug/libc.a: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
  78. echo "create $@" > "[email protected]"
  79. for lib in $^; do\
  80. echo "addlib $$lib" >> "[email protected]"; \
  81. done
  82. echo "save" >> "[email protected]"
  83. echo "end" >> "[email protected]"
  84. $(AR) -M < "[email protected]"
  85. $(BUILD)/debug/libc.so: $(BUILD)/debug/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
  86. $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@
  87. $(BUILD)/debug/librelibc.a: $(SRC)
  88. CARGO_INCREMENTAL=0 $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS)
  89. touch $@
  90. $(BUILD)/debug/crt0.o: $(SRC)
  91. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  92. touch $@
  93. $(BUILD)/debug/crti.o: $(SRC)
  94. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  95. touch $@
  96. $(BUILD)/debug/crtn.o: $(SRC)
  97. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  98. touch $@
  99. $(BUILD)/debug/ld_so.o: $(SRC)
  100. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  101. touch $@
  102. $(BUILD)/debug/ld_so: $(BUILD)/debug/ld_so.o $(BUILD)/debug/crti.o $(BUILD)/debug/libc.a $(BUILD)/debug/crtn.o
  103. $(LD) --allow-multiple-definition --gc-sections --gc-keep-exported $^ -o $@
  104. # Release targets
  105. $(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
  106. echo "create $@" > "[email protected]"
  107. for lib in $^; do\
  108. echo "addlib $$lib" >> "[email protected]"; \
  109. done
  110. echo "save" >> "[email protected]"
  111. echo "end" >> "[email protected]"
  112. $(AR) -M < "[email protected]"
  113. $(BUILD)/release/libc.so: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
  114. $(CC) -nostdlib -shared -Wl,--allow-multiple-definition -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@
  115. $(BUILD)/release/librelibc.a: $(SRC)
  116. CARGO_INCREMENTAL=0 $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS)
  117. touch $@
  118. $(BUILD)/release/crt0.o: $(SRC)
  119. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  120. touch $@
  121. $(BUILD)/release/crti.o: $(SRC)
  122. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  123. touch $@
  124. $(BUILD)/release/crtn.o: $(SRC)
  125. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  126. touch $@
  127. $(BUILD)/release/ld_so.o: $(SRC)
  128. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/ld_so/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  129. touch $@
  130. $(BUILD)/release/ld_so: $(BUILD)/release/ld_so.o $(BUILD)/release/crti.o $(BUILD)/release/libc.a $(BUILD)/release/crtn.o
  131. $(LD) --allow-multiple-definition --gc-sections --gc-keep-exported $^ -o $@
  132. # Other targets
  133. $(BUILD)/include: $(SRC)
  134. rm -rf $@ [email protected]
  135. mkdir -p [email protected]
  136. ./include.sh [email protected]
  137. mv [email protected] $@
  138. touch $@
  139. $(BUILD)/openlibm: openlibm
  140. rm -rf $@ [email protected]
  141. mkdir -p $(BUILD)
  142. cp -r $< [email protected]
  143. mv [email protected] $@
  144. touch $@
  145. $(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include
  146. $(MAKE) CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a
  147. $(BUILD)/pthreads-emb: pthreads-emb
  148. rm -rf $@ [email protected]
  149. mkdir -p $(BUILD)
  150. cp -r $< [email protected]
  151. mv [email protected] $@
  152. touch $@
  153. $(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/include
  154. $(MAKE) CC=$(CC) CFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libpthread.a