Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. exec_target = $(addsuffix .manifest,gcc g++ gcc-huge g++-huge)
  2. clean-extra = clean-garbages
  3. extra_rules = -e 's:\$$(PAL):../pal_loader:g'
  4. level = ../../
  5. include ../../Makefile
  6. GCC_VER = 4.8.4
  7. BINUTILS_VER = 2.20.1
  8. GMP_SRC = gmp-5.1.3
  9. GMP_OBJ = libgmp.so.3
  10. GMPXX_OBJ = libgmpxx.so.4
  11. PPL_SRC = ppl-1.1
  12. PPL_OBJ = libppl_c.so.2
  13. MPFR_SRC = mpfr-3.1.2
  14. MPFR_OBJ = libmpfr.so.1
  15. MPC_SRC = mpc-1.0.1
  16. MPC_OBJ = libmpc.so.2
  17. LINK_LIBC =
  18. GCC_FLAGS = \
  19. --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-gnu-ld \
  20. --enable-languages=c,c++ --disable-shared --disable-multilib \
  21. --with-gmp=$(PWD)/obj --with-mpfr=$(PWD)/obj --with-mpc=$(PWD)/obj --without-cloog \
  22. --without-htmldir --without-pdfdir --without-docdir --without-datarootdir \
  23. --disable-cloog-version-check --disable-stage1-languages --disable-objc-gc \
  24. --disable-bootstrap --disable-maintainer-mode --disable-werror \
  25. $(LINK_LIBC)
  26. GCC_MAKE_FLAGS = \
  27. LD_LIBRARY_PATH="$(PWD)/obj/lib:/usr/lib:/lib"
  28. obj/bin/gcc: src/gcc-$(GCC_VER) obj/bin/ld $(addprefix obj/lib/,$(GMP_OBJ) $(GMPXX_OBJ) $(PPL_OBJ) $(MPFR_OBJ) $(MPC_OBJ))
  29. cd $< && ./configure --prefix=$(PWD)/obj $(GCC_FLAGS)
  30. $(MAKE) -C $< $(GCC_MAKE_FLAGS)
  31. $(MAKE) -C $< install
  32. src/gcc-$(GCC_VER): gcc-$(GCC_VER).tar.bz2 src
  33. cd src && tar -xjf ../$<
  34. obj/bin/ld: src/binutils-$(BINUTILS_VER)
  35. cd $< && ./configure --prefix=$(PWD)/obj $(GCC_FLAGS) --enable-shared
  36. $(MAKE) -C $< $(GCC_MAKE_FLAGS)
  37. $(MAKE) -C $< install
  38. src/binutils-$(BINUTILS_VER): binutils-$(BINUTILS_VER).tar.bz2 src
  39. cd src && tar -xjf ../$<
  40. obj/lib/$(GMP_OBJ) obj/lib/$(GMPXX_OBJ): src/$(GMP_SRC)
  41. cd $< && ./configure --prefix=$(PWD)/obj --enable-cxx --enable-shared \
  42. $(LINK_LIBC)
  43. $(MAKE) -C $<
  44. $(MAKE) -C $< install
  45. src/$(GMP_SRC): $(GMP_SRC).tar.bz2 src
  46. cd src && tar -xjf ../$<
  47. obj/lib/$(PPL_OBJ): src/$(PPL_SRC) obj/lib/$(GMP_OBJ)
  48. cd $< && ./configure --prefix=$(PWD)/obj --with-libgmp-prefix=$(PWD)/obj --enable-shared \
  49. $(LINK_LIBC) CXXFLAGS=-fpermissive
  50. $(MAKE) -C $<
  51. $(MAKE) -C $< install
  52. src/$(PPL_SRC): $(PPL_SRC).tar.gz src
  53. cd src && tar -xzf ../$<
  54. obj/lib/$(MPFR_OBJ): src/$(MPFR_SRC) obj/lib/$(GMP_OBJ)
  55. cd $< && ./configure --prefix=$(PWD)/obj --enable-shared \
  56. $(LINK_LIBC) CXXFLAGS=-D__gmp_const=const
  57. $(MAKE) -C $<
  58. $(MAKE) -C $< install
  59. src/$(MPFR_SRC): $(MPFR_SRC).tar.bz2 src
  60. cd src && tar -xjf ../$<
  61. obj/lib/$(MPC_OBJ): src/$(MPC_SRC)
  62. cd $< && ./configure --prefix=$(PWD)/obj --with-gmp=$(PWD)/obj --enable-shared \
  63. $(LINK_LIBC)
  64. $(MAKE) -C $<
  65. $(MAKE) -C $< install
  66. src/$(MPC_SRC): $(MPC_SRC).tar.gz src
  67. cd src && tar -xzf ../$<
  68. src:
  69. mkdir -p src
  70. test-native:
  71. echo "Result for helloworld(native)" >> result
  72. /usr/bin/time -a -o result -p gcc helloworld.c
  73. echo "Result for gzip.c(native)" >> result
  74. /usr/bin/time -a -o result -p gcc gzip.c
  75. echo "Result for oggenc.m.c(native)" >> result
  76. /usr/bin/time -a -o result -p gcc oggenc.m.c -lm
  77. echo "Result for single-gcc.c(native)" >> result
  78. /usr/bin/time -a -o result -p gcc single-gcc.c
  79. test-graphene:
  80. echo "Result for helloworld(graphene)" >> result
  81. /usr/bin/time -a -o result -p ./gcc.manifest helloworld.c
  82. echo "Result for gzip.c(graphene)" >> result
  83. /usr/bin/time -a -o result -p ./gcc-huge.manifest gzip.c
  84. echo "Result for oggenc.m.c(graphene)" >> result
  85. /usr/bin/time -a -o result -p ./gcc-huge.manifest oggenc.m.c -lm
  86. echo "Result for single-gcc.c(graphene)" >> result
  87. /usr/bin/time -a -o result -p ./gcc-huge.manifest single-gcc.c
  88. distclean: clean
  89. rm -rf src obj
  90. clean-garbages:
  91. rm -rf cc*.s cc*.c cc*.ld cc*.le cc*.o a.out