Makefile 5.7 KB

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