Makefile 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. OUTPUT = $(PWD)/output
  2. BINUTILS_SRCDIR = BINUTILS_SRCDIR_not_set
  3. GCC_SRCDIR = GCC_SRCDIR_not_set
  4. MUSL_SRCDIR = MUSL_SRCDIR_not_set
  5. COMMON_CONFIG =
  6. GCC_CONFIG = $(COMMON_CONFIG)
  7. TOOLCHAIN_CONFIG = $(GCC_CONFIG)
  8. XGCC_DIR = ../obj_toolchain/gcc
  9. XGCC = $(XGCC_DIR)/xgcc -B $(XGCC_DIR)
  10. MUSL_CONFIG = CC="$(XGCC)" LIBCC="../obj_toolchain/$(TARGET)/libgcc/libgcc.a" --prefix=
  11. -include config.mak
  12. FULL_TOOLCHAIN_CONFIG = $(TOOLCHAIN_CONFIG) \
  13. --disable-werror \
  14. --target=$(TARGET) --prefix= \
  15. --with-sysroot=/$(TARGET) \
  16. --with-build-sysroot='$$(LC_ROOT)/obj_sysroot' \
  17. --enable-tls \
  18. --disable-libmudflap --disable-libsanitizer
  19. MUSL_VARS = AR=../obj_toolchain/binutils/ar RANLIB=../obj_toolchain/binutils/ranlib
  20. ifeq ($(TARGET),)
  21. all:
  22. @echo TARGET must be set.
  23. @exit 1
  24. install: all
  25. else
  26. all: musl toolchain
  27. install: install-musl install-toolchain
  28. musl: obj_musl/.lc_built
  29. toolchain: obj_toolchain/.lc_built
  30. .PHONY: all musl toolchain install-musl install-toolchain clean
  31. src_binutils: | $(BINUTILS_SRCDIR)
  32. ln -sf $(BINUTILS_SRCDIR) $@
  33. src_gcc: | $(GCC_SRCDIR)
  34. ln -sf $(GCC_SRCDIR) $@
  35. src_musl: | $(MUSL_SRCDIR)
  36. ln -sf $(MUSL_SRCDIR) $@
  37. src_gmp: | $(GMP_SRCDIR)
  38. ln -sf "$(GMP_SRCDIR)" $@
  39. src_mpc: | $(MPC_SRCDIR)
  40. ln -sf "$(MPC_SRCDIR)" $@
  41. src_mpfr: | $(GMP_SRCDIR)
  42. ln -sf "$(MPFR_SRCDIR)" $@
  43. src_toolchain: src_binutils src_gcc src_gmp src_mpc src_mpfr
  44. rm -rf $@ $@.tmp
  45. mkdir $@.tmp
  46. cd $@.tmp && ln -sf ../src_binutils/* .
  47. cd $@.tmp && ln -sf ../src_gcc/* .
  48. cd $@.tmp && ln -sf ../src_gmp gmp
  49. cd $@.tmp && ln -sf ../src_mpc mpc
  50. cd $@.tmp && ln -sf ../src_mpfr mpfr
  51. mv $@.tmp $@
  52. obj_%:
  53. mkdir -p $@
  54. obj_sysroot/include:
  55. mkdir -p $@
  56. obj_sysroot/usr: | obj_sysroot
  57. ln -sf . $@
  58. obj_sysroot/lib64: | obj_sysroot
  59. ln -sf lib $@
  60. obj_toolchain/.lc_configured: | obj_toolchain src_toolchain
  61. cd obj_toolchain && ../src_toolchain/configure $(FULL_TOOLCHAIN_CONFIG)
  62. touch $@
  63. obj_toolchain/gcc/.lc_built: | obj_toolchain/.lc_configured obj_sysroot/usr obj_sysroot/lib64 obj_sysroot/include
  64. cd obj_toolchain && $(MAKE) LC_ROOT=$(PWD) all-gcc
  65. touch $@
  66. obj_musl/.lc_configured: | obj_toolchain/gcc/.lc_built obj_musl src_musl
  67. cd obj_musl && ../src_musl/configure $(MUSL_CONFIG)
  68. touch $@
  69. obj_sysroot/.lc_headers: | obj_musl/.lc_configured obj_sysroot
  70. cd obj_musl && $(MAKE) DESTDIR=$(PWD)/obj_sysroot install-headers
  71. touch $@
  72. obj_toolchain/$(TARGET)/libgcc/.lc_configured: | obj_sysroot/.lc_headers
  73. cd obj_toolchain && $(MAKE) LC_ROOT=$(PWD) configure-target-libgcc
  74. touch $@
  75. obj_toolchain/$(TARGET)/libgcc/libgcc.a: | obj_toolchain/$(TARGET)/libgcc/.lc_configured
  76. cd $(dir $@) && $(MAKE) LC_ROOT=$(PWD) libgcc.a
  77. obj_musl/.lc_built: | obj_toolchain/$(TARGET)/libgcc/libgcc.a
  78. cd obj_musl && $(MAKE) $(MUSL_VARS)
  79. touch $@
  80. obj_sysroot/.lc_libs: | obj_musl/.lc_built
  81. cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(PWD)/obj_sysroot install
  82. touch $@
  83. obj_toolchain/.lc_built: | obj_toolchain/.lc_configured obj_sysroot/.lc_libs
  84. cd obj_toolchain && $(MAKE) LC_ROOT=$(PWD)
  85. touch $@
  86. install-musl: | obj_musl/.lc_built
  87. cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(DESTDIR)$(OUTPUT)/$(TARGET) install
  88. install-toolchain: | obj_toolchain/.lc_built
  89. cd obj_toolchain && $(MAKE) LC_ROOT=$(PWD) DESTDIR=$(DESTDIR)$(OUTPUT) install
  90. endif
  91. clean:
  92. rm -rf src_* obj_*