Makefile 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. manifests = gcc g++ gcc-huge g++-huge gcc-local g++-local
  2. all debug: $(addsuffix .manifest, $(manifests))
  3. c_targets = helloworld gzip oggenc.m single-gcc
  4. test_targets = $(c_targets) $(make_targets)
  5. test: all $(test_targets)
  6. %.manifest: %.manifest.template
  7. $(MAKE) -C .. gcc/$@ appdir=gcc/
  8. $(c_targets): %: %.c
  9. echo "$@ (native):" >> result
  10. rm -rf $@
  11. time -a -o result -p gcc -o $@ $^ \
  12. $(shell echo $@ | sed 's/^[^\.]*//g' | sed 's/\./ -l/g')
  13. sleep 0.5
  14. echo "$@ (graphene):" >> result
  15. rm -rf $@
  16. time -a -o result -p ./gcc.manifest -o $@ $^ \
  17. $(shell echo $@ | sed 's/^[^\.]*//g' | sed 's/\./ -l/g')
  18. $(make_targets): %:
  19. echo "$@ (native2):" >> result
  20. $(MAKE) -C $(dir $@) clean
  21. time -a -o result -p $(MAKE) -C $(dir $@) $(notdir $@) CC=g++
  22. echo "$@ (graphene):" >> result
  23. $(MAKE) -C $(dir $@) clean
  24. time -a -o result -p $(MAKE) -C $(dir $@) $(notdir $@) CC=$(shell pwd)/g++.manifest
  25. gcc-local: obj/bin/gcc
  26. GCC_VER = 4.8.4
  27. BINUTILS_VER = 2.20.1
  28. GMP_SRC = gmp-5.1.3
  29. GMP_OBJ = libgmp.so.3
  30. GMPXX_OBJ = libgmpxx.so.4
  31. PPL_SRC = ppl-1.1
  32. PPL_OBJ = libppl_c.so.2
  33. MPFR_SRC = mpfr-3.1.2
  34. MPFR_OBJ = libmpfr.so.1
  35. MPC_SRC = mpc-1.0.1
  36. MPC_OBJ = libmpc.so.2
  37. LINK_LIBC =
  38. GCC_FLAGS = \
  39. --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-gnu-ld \
  40. --enable-languages=c,c++ --disable-shared --disable-multilib \
  41. --with-gmp=$(PWD)/obj --with-mpfr=$(PWD)/obj --with-mpc=$(PWD)/obj --without-cloog \
  42. --without-htmldir --without-pdfdir --without-docdir --without-datarootdir \
  43. --disable-cloog-version-check --disable-stage1-languages --disable-objc-gc \
  44. --disable-bootstrap --disable-maintainer-mode --disable-werror \
  45. $(LINK_LIBC)
  46. GCC_MAKE_FLAGS = \
  47. LD_LIBRARY_PATH="$(PWD)/obj/lib:/usr/lib:/lib"
  48. obj/bin/gcc: src/gcc-$(GCC_VER) obj/bin/ld $(addprefix obj/lib/,$(GMP_OBJ) $(GMPXX_OBJ) $(PPL_OBJ) $(MPFR_OBJ) $(MPC_OBJ))
  49. cd $< && ./configure --prefix=$(PWD)/obj $(GCC_FLAGS)
  50. $(MAKE) -C $< $(GCC_MAKE_FLAGS)
  51. $(MAKE) -C $< install
  52. src/gcc-$(GCC_VER): gcc-$(GCC_VER).tar.bz2 src
  53. cd src && tar -xjf ../$<
  54. obj/bin/ld: src/binutils-$(BINUTILS_VER)
  55. cd $< && ./configure --prefix=$(PWD)/obj $(GCC_FLAGS) --enable-shared
  56. $(MAKE) -C $< $(GCC_MAKE_FLAGS)
  57. $(MAKE) -C $< install
  58. src/binutils-$(BINUTILS_VER): binutils-$(BINUTILS_VER).tar.bz2 src
  59. cd src && tar -xjf ../$<
  60. obj/lib/$(GMP_OBJ) obj/lib/$(GMPXX_OBJ): src/$(GMP_SRC)
  61. cd $< && ./configure --prefix=$(PWD)/obj --enable-cxx --enable-shared \
  62. $(LINK_LIBC)
  63. $(MAKE) -C $<
  64. $(MAKE) -C $< install
  65. src/$(GMP_SRC): $(GMP_SRC).tar.bz2 src
  66. cd src && tar -xjf ../$<
  67. obj/lib/$(PPL_OBJ): src/$(PPL_SRC) obj/lib/$(GMP_OBJ)
  68. cd $< && ./configure --prefix=$(PWD)/obj --with-libgmp-prefix=$(PWD)/obj --enable-shared \
  69. $(LINK_LIBC) CXXFLAGS=-fpermissive
  70. $(MAKE) -C $<
  71. $(MAKE) -C $< install
  72. src/$(PPL_SRC): $(PPL_SRC).tar.gz src
  73. cd src && tar -xzf ../$<
  74. obj/lib/$(MPFR_OBJ): src/$(MPFR_SRC) obj/lib/$(GMP_OBJ)
  75. cd $< && ./configure --prefix=$(PWD)/obj --enable-shared \
  76. $(LINK_LIBC) CXXFLAGS=-D__gmp_const=const
  77. $(MAKE) -C $<
  78. $(MAKE) -C $< install
  79. src/$(MPFR_SRC): $(MPFR_SRC).tar.bz2 src
  80. cd src && tar -xjf ../$<
  81. obj/lib/$(MPC_OBJ): src/$(MPC_SRC)
  82. cd $< && ./configure --prefix=$(PWD)/obj --with-gmp=$(PWD)/obj --enable-shared \
  83. $(LINK_LIBC)
  84. $(MAKE) -C $<
  85. $(MAKE) -C $< install
  86. src/$(MPC_SRC): $(MPC_SRC).tar.gz src
  87. cd src && tar -xzf ../$<
  88. src:
  89. mkdir -p src
  90. test-native:
  91. echo "Result for helloworld(native)" >> result
  92. /usr/bin/time -a -o result -p gcc helloworld.c
  93. echo "Result for gzip.c(native)" >> result
  94. /usr/bin/time -a -o result -p gcc gzip.c
  95. echo "Result for oggenc.m.c(native)" >> result
  96. /usr/bin/time -a -o result -p gcc oggenc.m.c -lm
  97. echo "Result for single-gcc.c(native)" >> result
  98. /usr/bin/time -a -o result -p gcc single-gcc.c
  99. test-graphene:
  100. echo "Result for helloworld(graphene)" >> result
  101. /usr/bin/time -a -o result -p ./gcc.manifest helloworld.c
  102. echo "Result for gzip.c(graphene)" >> result
  103. /usr/bin/time -a -o result -p ./gcc-huge.manifest gzip.c
  104. echo "Result for oggenc.m.c(graphene)" >> result
  105. /usr/bin/time -a -o result -p ./gcc-huge.manifest oggenc.m.c -lm
  106. echo "Result for single-gcc.c(graphene)" >> result
  107. /usr/bin/time -a -o result -p ./gcc-huge.manifest single-gcc.c
  108. distclean: clean
  109. rm -rf src obj
  110. clean: clean-manifests clean-garbages
  111. rm -rf result $(test_targets)
  112. clean-manifests:
  113. rm -rf $(addsuffix .manifest, $(manifests))
  114. clean-garbages:
  115. rm -rf cc*.s cc*.c cc*.ld cc*.le cc*.o a.out