Makefile 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 include install libc libm test
  26. all: | libc libm libpthread
  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. install: all
  36. mkdir -pv "$(DESTDIR)/include"
  37. cp -rv "include"/* "$(DESTDIR)/include"
  38. cp -rv "$(BUILD)/include"/* "$(DESTDIR)/include"
  39. cp -v "openlibm/include"/*.h "$(DESTDIR)/include"
  40. cp -v "openlibm/src"/*.h "$(DESTDIR)/include"
  41. mkdir -pv "$(DESTDIR)/lib"
  42. cp -v "$(BUILD)/release/libc.a" "$(DESTDIR)/lib"
  43. cp -v "$(BUILD)/release/crt0.o" "$(DESTDIR)/lib"
  44. cp -v "$(BUILD)/release/crti.o" "$(DESTDIR)/lib"
  45. cp -v "$(BUILD)/release/crtn.o" "$(DESTDIR)/lib"
  46. cp -v "$(BUILD)/openlibm/libopenlibm.a" "$(DESTDIR)/lib/libm.a"
  47. libc: $(BUILD)/release/libc.a $(BUILD)/release/crt0.o $(BUILD)/release/crti.o $(BUILD)/release/crtn.o $(BUILD)/include
  48. libm: $(BUILD)/openlibm/libopenlibm.a
  49. libpthread: $(BUILD)/pthreads-emb/libpthread.a
  50. sysroot: all
  51. rm -rf $@
  52. rm -rf $@.partial
  53. mkdir -p $@.partial
  54. make install DESTDIR=$@.partial
  55. mv $@.partial $@
  56. touch $@
  57. test: sysroot
  58. make -C tests run
  59. $(BUILD)/debug/libc.a: $(SRC)
  60. $(CARGO) rustc $(CARGOFLAGS) -- $(RUSTCFLAGS)
  61. touch $@
  62. $(BUILD)/debug/crt0.o: $(SRC)
  63. CARGO_INCREMENTAL=0 $(CARGO) rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ $(RUSTCFLAGS)
  64. touch $@
  65. $(BUILD)/release/libc.a: $(SRC)
  66. $(CARGO) rustc --release $(CARGOFLAGS) -- $(RUSTCFLAGS)
  67. touch $@
  68. $(BUILD)/release/crt0.o: $(SRC)
  69. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ $(RUSTCFLAGS)
  70. touch $@
  71. $(BUILD)/release/crti.o: $(SRC)
  72. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crti/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ $(RUSTCFLAGS)
  73. touch $@
  74. $(BUILD)/release/crtn.o: $(SRC)
  75. CARGO_INCREMENTAL=0 $(CARGO) rustc --release --manifest-path src/crtn/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@ $(RUSTCFLAGS)
  76. touch $@
  77. $(BUILD)/include: $(SRC)
  78. rm -rf $@ $@.partial
  79. mkdir -p $@.partial
  80. ./include.sh $@.partial
  81. mv $@.partial $@
  82. touch $@
  83. $(BUILD)/openlibm: openlibm
  84. rm -rf $@ $@.partial
  85. mkdir -p $(BUILD)
  86. cp -r $< $@.partial
  87. mv $@.partial $@
  88. touch $@
  89. $(BUILD)/openlibm/libopenlibm.a: $(BUILD)/openlibm $(BUILD)/include
  90. make CC=$(CC) CPPFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libopenlibm.a
  91. $(BUILD)/pthreads-emb: pthreads-emb
  92. rm -rf $@ $@.partial
  93. mkdir -p $(BUILD)
  94. cp -r $< $@.partial
  95. mv $@.partial $@
  96. touch $@
  97. $(BUILD)/pthreads-emb/libpthread.a: $(BUILD)/pthreads-emb $(BUILD)/include
  98. make CC=$(CC) CFLAGS="-fno-stack-protector -I$(shell pwd)/include -I $(shell pwd)/$(BUILD)/include" -C $< libpthread.a