Makefile 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 = --enable-languages=c,c++
  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. -include config.mak
  11. MAKE += MULTILIB_OSDIRNAMES=
  12. MAKE += INFO_DEPS= infodir=
  13. MAKE += ac_cv_prog_lex_root=lex.yy.c
  14. FULL_TOOLCHAIN_CONFIG = $(TOOLCHAIN_CONFIG) \
  15. --disable-werror \
  16. --target=$(TARGET) --prefix= \
  17. --libdir=/lib --disable-multilib \
  18. --with-sysroot=$(SYSROOT) \
  19. --with-build-sysroot='$$(LC_ROOT)/obj_sysroot' \
  20. --enable-tls \
  21. --disable-libmudflap --disable-libsanitizer
  22. FULL_MUSL_CONFIG = $(MUSL_CONFIG) \
  23. --prefix= --host=$(TARGET)
  24. ifeq ($(NATIVE),)
  25. SYSROOT = /$(TARGET)
  26. FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_toolchain/$(TARGET)/libgcc/libgcc.a"
  27. MUSL_VARS = AR=../obj_toolchain/binutils/ar RANLIB=../obj_toolchain/binutils/ranlib
  28. obj_musl/.lc_built: | obj_toolchain/$(TARGET)/libgcc/libgcc.a
  29. obj_toolchain/.lc_built: | obj_sysroot/.lc_libs
  30. else
  31. SYSROOT = /
  32. FULL_TOOLCHAIN_CONFIG += --host=$(TARGET)
  33. MUSL_VARS =
  34. endif
  35. ifeq ($(TARGET),)
  36. all:
  37. @echo TARGET must be set.
  38. @exit 1
  39. install: all
  40. else
  41. all: musl toolchain
  42. install: install-musl install-toolchain
  43. musl: obj_musl/.lc_built
  44. toolchain: obj_toolchain/.lc_built
  45. .PHONY: all musl toolchain install-musl install-toolchain clean
  46. src_binutils: | $(BINUTILS_SRCDIR)
  47. ln -sf $(BINUTILS_SRCDIR) $@
  48. src_gcc: | $(GCC_SRCDIR)
  49. ln -sf $(GCC_SRCDIR) $@
  50. src_musl: | $(MUSL_SRCDIR)
  51. ln -sf $(MUSL_SRCDIR) $@
  52. ifneq ($(GMP_SRCDIR),)
  53. src_toolchain: src_gmp
  54. src_gmp: | $(GMP_SRCDIR)
  55. ln -sf "$(GMP_SRCDIR)" $@
  56. endif
  57. ifneq ($(MPC_SRCDIR),)
  58. src_toolchain: src_mpc
  59. src_mpc: | $(MPC_SRCDIR)
  60. ln -sf "$(MPC_SRCDIR)" $@
  61. endif
  62. ifneq ($(MPFR_SRCDIR),)
  63. src_toolchain: src_mpfr
  64. src_mpfr: | $(MPFR_SRCDIR)
  65. ln -sf "$(MPFR_SRCDIR)" $@
  66. endif
  67. src_toolchain: src_binutils src_gcc
  68. rm -rf $@ $@.tmp
  69. mkdir $@.tmp
  70. cd $@.tmp && ln -sf ../src_binutils/* .
  71. cd $@.tmp && ln -sf ../src_gcc/* .
  72. $(if $(GMP_SRCDIR),cd $@.tmp && ln -sf ../src_gmp gmp)
  73. $(if $(MPC_SRCDIR),cd $@.tmp && ln -sf ../src_mpc mpc)
  74. $(if $(MPFR_SRCDIR),cd $@.tmp && ln -sf ../src_mpfr mpfr)
  75. mv $@.tmp $@
  76. obj_%:
  77. mkdir -p $@
  78. obj_sysroot/include:
  79. mkdir -p $@
  80. obj_sysroot/usr: | obj_sysroot
  81. ln -sf . $@
  82. obj_sysroot/lib64: | obj_sysroot
  83. ln -sf lib $@
  84. obj_toolchain/.lc_configured: | obj_toolchain src_toolchain
  85. cd obj_toolchain && ../src_toolchain/configure $(FULL_TOOLCHAIN_CONFIG)
  86. touch $@
  87. obj_toolchain/gcc/.lc_built: | obj_toolchain/.lc_configured obj_sysroot/usr obj_sysroot/lib64 obj_sysroot/include
  88. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) all-gcc
  89. touch $@
  90. obj_musl/.lc_configured: | obj_toolchain/gcc/.lc_built obj_musl src_musl
  91. cd obj_musl && ../src_musl/configure $(FULL_MUSL_CONFIG)
  92. touch $@
  93. obj_sysroot/.lc_headers: | obj_musl/.lc_configured obj_sysroot
  94. cd obj_musl && $(MAKE) DESTDIR=$(PWD)/obj_sysroot install-headers
  95. touch $@
  96. obj_toolchain/$(TARGET)/libgcc/.lc_configured: | obj_sysroot/.lc_headers
  97. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) configure-target-libgcc
  98. touch $@
  99. obj_toolchain/$(TARGET)/libgcc/libgcc.a: | obj_toolchain/$(TARGET)/libgcc/.lc_configured
  100. cd $(dir $@) && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) libgcc.a
  101. obj_musl/.lc_built: | obj_musl/.lc_configured
  102. cd obj_musl && $(MAKE) $(MUSL_VARS)
  103. touch $@
  104. obj_sysroot/.lc_libs: | obj_musl/.lc_built
  105. cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(PWD)/obj_sysroot install
  106. touch $@
  107. obj_toolchain/.lc_built: | obj_toolchain/.lc_configured obj_sysroot/.lc_headers
  108. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD)
  109. touch $@
  110. install-musl: | obj_musl/.lc_built
  111. cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(DESTDIR)$(OUTPUT)$(SYSROOT) install
  112. install-toolchain: | obj_toolchain/.lc_built
  113. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) DESTDIR=$(DESTDIR)$(OUTPUT) install
  114. endif
  115. clean:
  116. rm -rf src_* obj_*