Makefile 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. endif
  13. ifeq ($(TARGET),aarch64-unknown-redox)
  14. export CC=aarch64-unknown-redox-gcc
  15. endif
  16. ifeq ($(TARGET),x86_64-unknown-redox)
  17. export CC=x86_64-unknown-redox-gcc
  18. endif
  19. SRC=\
  20. Cargo.* \
  21. src/* \
  22. src/*/* \
  23. src/*/*/* \
  24. src/*/*/*/*
  25. .PHONY: all clean fmt headers install install-headers libs test
  26. all: | headers libs
  27. clean:
  28. $(CARGO) clean
  29. $(MAKE) -C tests clean
  30. rm -rf sysroot
  31. check:
  32. $(CARGO) check
  33. fmt:
  34. ./fmt.sh
  35. headers: $(BUILD)/include
  36. install-headers: headers
  37. mkdir -pv "$(DESTDIR)/include"
  38. cp -rv "include"/* "$(DESTDIR)/include"
  39. cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include"
  40. cp -v "openlibm/include"/*.h "$(DESTDIR)/include"
  41. cp -v "openlibm/src"/*.h "$(DESTDIR)/include"
  42. cp -v "pthreads-emb/"*.h "$(DESTDIR)/include"
  43. libs: $(BUILD)/release/libc.a $(BUILD)/release/libc.so $(BUILD)/release/crt0.o $(BUILD)/release/crti.o $(BUILD)/release/crtn.o
  44. install-libs: libs
  45. mkdir -pv "$(DESTDIR)/lib"
  46. cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib"
  47. cp -v "$(BUILD)/release/libc.so" "$(DESTDIR)/lib"
  48. cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib"
  49. cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib"
  50. cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib"
  51. cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a"
  52. cp -v "$(BUILD)/pthreads-emb/libpthread.a" "$(DESTDIR)/lib/libpthread.a"
  53. install: install-headers install-libs
  54. sysroot: all
  55. rm -rf $@
  56. rm -rf [email protected]
  57. mkdir -p [email protected]
  58. $(MAKE) install [email protected]
  59. mv [email protected] $@
  60. touch $@
  61. test: sysroot
  62. $(MAKE) -C tests run
  63. $(BUILD)/release/libc.a: $(BUILD)/release/librelibc.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
  64. echo "create $@" > "[email protected]"
  65. for lib in $^; do\
  66. echo "addlib $$lib" >> "[email protected]"; \
  67. done
  68. echo "save" >> "[email protected]"
  69. echo "end" >> "[email protected]"
  70. ar -M < "[email protected]"
  71. $(BUILD)/release/libc.so: $(BUILD)/release/librelibc.patched.a $(BUILD)/pthreads-emb/libpthread.a $(BUILD)/openlibm/libopenlibm.a
  72. $(CC) -nostdlib -shared -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@
  73. $(BUILD)/debug/librelibc.a: $(SRC)
  74. $(CARGO) rustc $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS)
  75. touch $@
  76. $(BUILD)/debug/crt0.o: $(SRC)
  77. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  78. touch $@
  79. $(BUILD)/debug/crti.o: $(SRC)
  80. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  81. touch $@
  82. $(BUILD)/debug/crtn.o: $(SRC)
  83. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  84. touch $@
  85. $(BUILD)/release/librelibc.a: $(SRC)
  86. $(CARGO) rustc --release $(CARGOFLAGS) -- --emit link=$@ $(RUSTCFLAGS)
  87. touch $@
  88. $(BUILD)/release/librelibc.patched.a: $(BUILD)/release/librelibc.a
  89. # Patch out clzsi2.o from libgcc
  90. cp $< $@
  91. ar d $@ clzsi2.o
  92. $(BUILD)/release/crt0.o: $(SRC)
  93. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  94. touch $@
  95. $(BUILD)/release/crti.o: $(SRC)
  96. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  97. touch $@
  98. $(BUILD)/release/crtn.o: $(SRC)
  99. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ -C panic=abort $(RUSTCFLAGS)
  100. touch $@
  101. $(BUILD)/include: $(SRC)
  102. rm -rf $@ [email protected]
  103. mkdir -p [email protected]
  104. ./include.sh [email protected]
  105. mv [email protected] $@
  106. touch $@
  107. $(BUILD)/openlibm: openlibm
  108. rm -rf $@ [email protected]
  109. mkdir -p $(BUILD)
  110. cp -r $< [email protected]
  111. mv [email protected] $@
  112. touch $@
  113. $(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include
  114. $(MAKE) CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a
  115. $(BUILD)/pthreads-emb: pthreads-emb
  116. rm -rf $@ [email protected]
  117. mkdir -p $(BUILD)
  118. cp -r $< [email protected]
  119. mv [email protected] $@
  120. touch $@
  121. $(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/include
  122. $(MAKE) CC=$(CC) CFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libpthread.a