Makefile 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. --disable-gnu-indirect-function \
  23. --disable-libmpx \
  24. --enable-libstdcxx-time
  25. FULL_MUSL_CONFIG = $(MUSL_CONFIG) \
  26. --prefix= --host=$(TARGET)
  27. ifeq ($(NATIVE),)
  28. SYSROOT = /$(TARGET)
  29. FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_toolchain/$(TARGET)/libgcc/libgcc.a"
  30. MUSL_VARS = AR=../obj_toolchain/binutils/ar RANLIB=../obj_toolchain/binutils/ranlib
  31. obj_musl/.lc_built: | obj_toolchain/$(TARGET)/libgcc/libgcc.a
  32. obj_toolchain/.lc_built: | obj_sysroot/.lc_libs
  33. else
  34. SYSROOT = /
  35. FULL_TOOLCHAIN_CONFIG += --host=$(TARGET)
  36. MUSL_VARS =
  37. endif
  38. ifeq ($(TARGET),)
  39. all:
  40. @echo TARGET must be set.
  41. @exit 1
  42. install: all
  43. else
  44. all: musl toolchain
  45. install: install-musl install-toolchain
  46. musl: obj_musl/.lc_built
  47. toolchain: obj_toolchain/.lc_built
  48. .PHONY: all musl toolchain install-musl install-toolchain clean
  49. src_binutils: | $(BINUTILS_SRCDIR)
  50. ln -sf $(BINUTILS_SRCDIR) $@
  51. src_gcc: | $(GCC_SRCDIR)
  52. ln -sf $(GCC_SRCDIR) $@
  53. src_musl: | $(MUSL_SRCDIR)
  54. ln -sf $(MUSL_SRCDIR) $@
  55. ifneq ($(GMP_SRCDIR),)
  56. src_toolchain: src_gmp
  57. src_gmp: | $(GMP_SRCDIR)
  58. ln -sf "$(GMP_SRCDIR)" $@
  59. endif
  60. ifneq ($(MPC_SRCDIR),)
  61. src_toolchain: src_mpc
  62. src_mpc: | $(MPC_SRCDIR)
  63. ln -sf "$(MPC_SRCDIR)" $@
  64. endif
  65. ifneq ($(MPFR_SRCDIR),)
  66. src_toolchain: src_mpfr
  67. src_mpfr: | $(MPFR_SRCDIR)
  68. ln -sf "$(MPFR_SRCDIR)" $@
  69. endif
  70. src_toolchain: src_binutils src_gcc
  71. rm -rf $@ $@.tmp
  72. mkdir $@.tmp
  73. cd $@.tmp && ln -sf ../src_binutils/* .
  74. cd $@.tmp && ln -sf ../src_gcc/* .
  75. $(if $(GMP_SRCDIR),cd $@.tmp && ln -sf ../src_gmp gmp)
  76. $(if $(MPC_SRCDIR),cd $@.tmp && ln -sf ../src_mpc mpc)
  77. $(if $(MPFR_SRCDIR),cd $@.tmp && ln -sf ../src_mpfr mpfr)
  78. mv $@.tmp $@
  79. obj_%:
  80. mkdir -p $@
  81. obj_sysroot/include:
  82. mkdir -p $@
  83. obj_sysroot/usr: | obj_sysroot
  84. ln -sf . $@
  85. obj_sysroot/lib64: | obj_sysroot
  86. ln -sf lib $@
  87. obj_toolchain/.lc_configured: | obj_toolchain src_toolchain
  88. cd obj_toolchain && ../src_toolchain/configure $(FULL_TOOLCHAIN_CONFIG)
  89. touch $@
  90. obj_toolchain/gcc/.lc_built: | obj_toolchain/.lc_configured obj_sysroot/usr obj_sysroot/lib64 obj_sysroot/include
  91. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) all-gcc
  92. touch $@
  93. obj_musl/.lc_configured: | obj_toolchain/gcc/.lc_built obj_musl src_musl
  94. cd obj_musl && ../src_musl/configure $(FULL_MUSL_CONFIG)
  95. touch $@
  96. obj_sysroot/.lc_headers: | obj_musl/.lc_configured obj_sysroot
  97. cd obj_musl && $(MAKE) DESTDIR=$(PWD)/obj_sysroot install-headers
  98. touch $@
  99. obj_toolchain/$(TARGET)/libgcc/.lc_configured: | obj_sysroot/.lc_headers
  100. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) configure-target-libgcc
  101. touch $@
  102. obj_toolchain/$(TARGET)/libgcc/libgcc.a: | obj_toolchain/$(TARGET)/libgcc/.lc_configured
  103. cd $(dir $@) && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) libgcc.a
  104. obj_musl/.lc_built: | obj_musl/.lc_configured
  105. cd obj_musl && $(MAKE) $(MUSL_VARS)
  106. touch $@
  107. obj_sysroot/.lc_libs: | obj_musl/.lc_built
  108. cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(PWD)/obj_sysroot install
  109. touch $@
  110. obj_toolchain/.lc_built: | obj_toolchain/.lc_configured obj_sysroot/.lc_headers
  111. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD)
  112. touch $@
  113. install-musl: | obj_musl/.lc_built
  114. cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(DESTDIR)$(OUTPUT)$(SYSROOT) install
  115. install-toolchain: | obj_toolchain/.lc_built
  116. cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" LC_ROOT=$(PWD) DESTDIR=$(DESTDIR)$(OUTPUT) install
  117. ln -sf $(TARGET)-gcc $(DESTDIR)$(OUTPUT)/bin/$(TARGET)-cc
  118. ifneq ($(LINUX_SRCDIR),)
  119. TARGET_ARCH = $(firstword $(subst -, ,$(TARGET)))
  120. TARGET_ARCH_MANGLED = $(patsubst i%86,x86,$(patsubst aarch64%,arm64%,$(TARGET_ARCH)))
  121. LINUX_ARCH_LIST = $(sort $(notdir $(wildcard $(LINUX_SRCDIR)/arch/*)))
  122. LINUX_ARCH = $(firstword $(foreach a,$(LINUX_ARCH_LIST),$(findstring $(a),$(TARGET_ARCH_MANGLED))))
  123. ifneq ($(LINUX_ARCH),)
  124. all: kernel-headers
  125. install: install-kernel-headers
  126. kernel-headers: | obj_kernel_headers
  127. src_kernel_headers: | $(LINUX_SRCDIR)
  128. rm -rf $@.tmp $@
  129. mkdir -p $@.tmp/arch/$(LINUX_ARCH)
  130. cp -R $(LINUX_SRCDIR)/arch/$(LINUX_ARCH)/include $@.tmp/arch/$(LINUX_ARCH)
  131. cp -R $(LINUX_SRCDIR)/arch/$(LINUX_ARCH)/Makefile $@.tmp/arch/$(LINUX_ARCH)
  132. cp -R $(LINUX_SRCDIR)/include $@.tmp
  133. cp -R $(LINUX_SRCDIR)/scripts $@.tmp
  134. cp -R $(LINUX_SRCDIR)/Makefile $@.tmp
  135. mv $@.tmp $@
  136. obj_kernel_headers: | src_kernel_headers
  137. rm -rf $@.tmp $@
  138. cd src_kernel_headers && $(MAKE) ARCH=$(LINUX_ARCH) INSTALL_HDR_PATH=$(PWD)/$@.tmp headers_install
  139. mv $@.tmp $@
  140. install-kernel-headers: | obj_kernel_headers
  141. mkdir -p $(DESTDIR)$(OUTPUT)$(SYSROOT)/include
  142. cp -R obj_kernel_headers/include/* $(DESTDIR)$(OUTPUT)$(SYSROOT)/include
  143. endif
  144. endif
  145. endif
  146. clean:
  147. rm -rf src_* obj_*