Makefile 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. OUTPUT = $(PWD)/output
  2. SOURCES = sources
  3. BINUTILS_VER = 2.25.1
  4. GCC_VER = 5.2.0
  5. MUSL_TAG = master
  6. GNU_SITE = http://ftp.gnu.org/pub/gnu
  7. GCC_SITE = $(GNU_SITE)/gcc
  8. BINUTILS_SITE = $(GNU_SITE)/binutils
  9. COMMON_CONFIG = --disable-werror \
  10. --target=$(TARGET) --prefix=$(OUTPUT) \
  11. --with-sysroot=$(OUTPUT)/$(TARGET)
  12. BINUTILS_CONFIG = $(COMMON_CONFIG)
  13. GCC_CONFIG = $(COMMON_CONFIG) --enable-tls \
  14. --disable-libmudflap --disable-libsanitizer
  15. GCC0_VARS = CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0"
  16. GCC0_CONFIG = $(GCC_CONFIG) \
  17. --with-newlib --disable-libssp --disable-threads \
  18. --disable-shared --disable-libgomp --disable-libatomic \
  19. --disable-libquadmath --disable-decimal-float --disable-nls \
  20. --enable-languages=c
  21. GCC0_BDIR = $(PWD)/gcc-$(GCC_VER)/build0/gcc
  22. GCC0_CC = $(GCC0_BDIR)/xgcc -B $(GCC0_BDIR)
  23. MUSL_CONFIG = CC="$(GCC0_CC)" --prefix=
  24. -include config.mak
  25. ifeq ($(TARGET),)
  26. $(error TARGET must be set via config.mak or command line)
  27. endif
  28. all: install_binutils install_musl install_gcc
  29. clean:
  30. rm -rf gcc-$(GCC_VER) binutils-$(BINUTILS_VER) musl
  31. distclean: clean
  32. rm -rf sources
  33. .PHONY: extract_binutils extract_gcc clone_musl
  34. .PHONY: configure_binutils configure_gcc0 configure_gcc configure_musl
  35. .PHONY: build_binutils build_gcc0 build_gcc build_musl
  36. .PHONY: install_binutils install_gcc install_musl
  37. extract_binutils: binutils-$(BINUTILS_VER)/.mcm_extracted
  38. extract_gcc: gcc-$(GCC_VER)/.mcm_extracted
  39. clone_musl: musl/.mcm_cloned
  40. configure_binutils: binutils-$(BINUTILS_VER)/.mcm_configured
  41. configure_gcc0: gcc-$(GCC_VER)/build0/.mcm_configured
  42. configure_gcc: gcc-$(GCC_VER)/build/.mcm_configured
  43. configure_musl: musl/.mcm_configured
  44. build_binutils: binutils-$(BINUTILS_VER)/.mcm_built
  45. build_gcc0: gcc-$(GCC_VER)/build0/.mcm_built
  46. build_gcc: gcc-$(GCC_VER)/build/.mcm_built
  47. build_musl: musl/.mcm_built
  48. install_binutils: binutils-$(BINUTILS_VER)/.mcm_installed
  49. install_gcc: gcc-$(GCC_VER)/build/.mcm_installed
  50. install_musl: musl/.mcm_installed
  51. $(SOURCES):
  52. mkdir -p $@
  53. $(SOURCES)/config.sub: | $(SOURCES)
  54. wget -O $@ 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
  55. $(SOURCES)/binutils-%: | $(SOURCES)
  56. wget -c -O $@.part $(BINUTILS_SITE)/$(notdir $@)
  57. mv $@.part $@
  58. $(SOURCES)/gcc-%: | $(SOURCES)
  59. wget -c -O $@.part $(GCC_SITE)/$(basename $(basename $(notdir $@)))/$(notdir $@)
  60. mv $@.part $@
  61. binutils-$(BINUTILS_VER)/.mcm_extracted: $(SOURCES)/binutils-$(BINUTILS_VER).tar.bz2 $(SOURCES)/config.sub
  62. tar jxvf $<
  63. cat patches/binutils-$(BINUTILS_VER)/* | ( cd binutils-$(BINUTILS_VER) && patch -p1 )
  64. cp $(SOURCES)/config.sub binutils-$(BINUTILS_VER)
  65. touch $@
  66. binutils-$(BINUTILS_VER)/.mcm_configured: binutils-$(BINUTILS_VER)/.mcm_extracted
  67. test -e binutils-$(BINUTILS_VER)/config.status || ( cd binutils-$(BINUTILS_VER) && ./configure $(BINUTILS_CONFIG) )
  68. touch $@
  69. binutils-$(BINUTILS_VER)/.mcm_built: binutils-$(BINUTILS_VER)/.mcm_configured
  70. cd binutils-$(BINUTILS_VER) && $(MAKE)
  71. touch $@
  72. binutils-$(BINUTILS_VER)/.mcm_installed: binutils-$(BINUTILS_VER)/.mcm_built
  73. cd binutils-$(BINUTILS_VER) && $(MAKE) install
  74. touch $@
  75. gcc-$(GCC_VER)/.mcm_extracted: $(SOURCES)/gcc-$(GCC_VER).tar.bz2 $(SOURCES)/config.sub
  76. tar jxvf $<
  77. cat patches/gcc-$(GCC_VER)/* | ( cd gcc-$(GCC_VER) && patch -p1 )
  78. cp $(SOURCES)/config.sub gcc-$(GCC_VER)
  79. touch $@
  80. gcc-$(GCC_VER)/build0/.mcm_configured: gcc-$(GCC_VER)/.mcm_extracted | binutils-$(BINUTILS_VER)/.mcm_installed
  81. mkdir -p gcc-$(GCC_VER)/build0
  82. test -e gcc-$(GCC_VER)/build0/config.status || ( cd gcc-$(GCC_VER)/build0 && $(GCC0_VARS) ../configure $(GCC0_CONFIG) )
  83. touch $@
  84. gcc-$(GCC_VER)/build0/.mcm_built: gcc-$(GCC_VER)/build0/.mcm_configured
  85. cd gcc-$(GCC_VER)/build0 && $(MAKE)
  86. touch $@
  87. gcc-$(GCC_VER)/build/.mcm_configured: gcc-$(GCC_VER)/.mcm_extracted | binutils-$(BINUTILS_VER)/.mcm_installed musl/.mcm_installed
  88. mkdir -p gcc-$(GCC_VER)/build
  89. test -e gcc-$(GCC_VER)/build/config.status || ( cd gcc-$(GCC_VER)/build && ../configure $(GCC_CONFIG) )
  90. touch $@
  91. gcc-$(GCC_VER)/build/.mcm_built: gcc-$(GCC_VER)/build/.mcm_configured
  92. cd gcc-$(GCC_VER)/build && $(MAKE)
  93. touch $@
  94. gcc-$(GCC_VER)/build/.mcm_installed: gcc-$(GCC_VER)/build/.mcm_built
  95. cd gcc-$(GCC_VER)/build && $(MAKE) install
  96. touch $@
  97. musl/.mcm_cloned:
  98. test -d musl || git clone -b $(MUSL_TAG) git://git.musl-libc.org/musl musl
  99. touch $@
  100. musl/.mcm_configured: musl/.mcm_cloned gcc-$(GCC_VER)/build0/.mcm_built
  101. cd musl && ./configure $(MUSL_CONFIG)
  102. touch $@
  103. musl/.mcm_built: musl/.mcm_configured
  104. cd musl && $(MAKE)
  105. touch $@
  106. musl/.mcm_installed: musl/.mcm_built
  107. cd musl && $(MAKE) install DESTDIR=$(OUTPUT)/$(TARGET)
  108. ln -sfn . $(OUTPUT)/$(TARGET)/usr
  109. touch $@