ccache.mk 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #############################################################
  2. #
  3. # build ccache to make recompiles faster on the build system
  4. #
  5. #############################################################
  6. CCACHE_VER:=2.3
  7. CCACHE_SITE:=http://ccache.samba.org/ftp/ccache
  8. CCACHE_SOURCE:=ccache-$(CCACHE_VER).tar.gz
  9. CCACHE_DIR1:=$(TOOL_BUILD_DIR)/ccache-$(CCACHE_VER)
  10. CCACHE_DIR2:=$(BUILD_DIR)/ccache-$(CCACHE_VER)
  11. CCACHE_CAT:=zcat
  12. CCACHE_BINARY:=ccache
  13. CCACHE_TARGET_BINARY:=usr/bin/ccache
  14. $(DL_DIR)/$(CCACHE_SOURCE):
  15. $(WGET) -P $(DL_DIR) $(CCACHE_SITE)/$(CCACHE_SOURCE)
  16. $(CCACHE_DIR1)/.unpacked: $(DL_DIR)/$(CCACHE_SOURCE)
  17. $(CCACHE_CAT) $(DL_DIR)/$(CCACHE_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
  18. touch $(CCACHE_DIR1)/.unpacked
  19. $(CCACHE_DIR1)/.patched: $(CCACHE_DIR1)/.unpacked
  20. # WARNING - this will break if the toolchain is moved.
  21. # Should probably patch things to use a relative path.
  22. $(SED) "s,getenv(\"CCACHE_PATH\"),\"$(STAGING_DIR)/bin-ccache\",g" \
  23. $(CCACHE_DIR1)/execute.c
  24. # WARNING - this will break if the toolchain build dir is deleted.
  25. $(SED) "s,getenv(\"CCACHE_DIR\"),\"$(CCACHE_DIR1)/cache\",g" \
  26. $(CCACHE_DIR1)/ccache.c
  27. mkdir -p $(CCACHE_DIR1)/cache
  28. touch $(CCACHE_DIR1)/.patched
  29. $(CCACHE_DIR1)/.configured: $(CCACHE_DIR1)/.patched
  30. mkdir -p $(CCACHE_DIR1)
  31. (cd $(CCACHE_DIR1); rm -rf config.cache; \
  32. CC=$(HOSTCC) \
  33. $(CCACHE_DIR1)/configure \
  34. --target=$(GNU_HOST_NAME) \
  35. --host=$(GNU_HOST_NAME) \
  36. --build=$(GNU_HOST_NAME) \
  37. --prefix=/usr \
  38. );
  39. touch $(CCACHE_DIR1)/.configured
  40. $(CCACHE_DIR1)/$(CCACHE_BINARY): $(CCACHE_DIR1)/.configured
  41. $(MAKE) CC=$(HOSTCC) -C $(CCACHE_DIR1)
  42. $(STAGING_DIR)/$(CCACHE_TARGET_BINARY): $(CCACHE_DIR1)/$(CCACHE_BINARY)
  43. mkdir -p $(STAGING_DIR)/usr/bin;
  44. cp $(CCACHE_DIR1)/ccache $(STAGING_DIR)/usr/bin
  45. # Keep the actual toolchain binaries in a directory at the same level.
  46. # Otherwise, relative paths for include dirs break.
  47. mkdir -p $(STAGING_DIR)/bin-ccache;
  48. (cd $(STAGING_DIR)/bin-ccache; \
  49. ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(GNU_TARGET_NAME)-gcc; \
  50. ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(GNU_TARGET_NAME)-cc; \
  51. ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(REAL_GNU_TARGET_NAME)-cc);
  52. [ -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc ] && \
  53. mv $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc $(STAGING_DIR)/bin-ccache/
  54. (cd $(STAGING_DIR)/bin; \
  55. ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-cc; \
  56. ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-gcc; \
  57. ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-cc; \
  58. ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-gcc);
  59. ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
  60. [ -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c++ ] && \
  61. mv $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c++ $(STAGING_DIR)/bin-ccache/
  62. [ -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-g++ ] && \
  63. mv $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-g++ $(STAGING_DIR)/bin-ccache/
  64. (cd $(STAGING_DIR)/bin; \
  65. ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-c++; \
  66. ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-g++;\
  67. ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-c++; \
  68. ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-g++);
  69. (cd $(STAGING_DIR)/bin-ccache; \
  70. ln -fs $(REAL_GNU_TARGET_NAME)-c++ $(GNU_TARGET_NAME)-c++; \
  71. ln -fs $(REAL_GNU_TARGET_NAME)-g++ $(GNU_TARGET_NAME)-g++);
  72. endif
  73. ccache: gcc $(STAGING_DIR)/$(CCACHE_TARGET_BINARY)
  74. ccache-clean:
  75. $(MAKE) -C $(CCACHE_DIR1) uninstall
  76. -$(MAKE) -C $(CCACHE_DIR1) clean
  77. ccache-dirclean:
  78. rm -rf $(CCACHE_DIR1)
  79. #############################################################
  80. #
  81. # build ccache for use on the target system
  82. #
  83. #############################################################
  84. $(CCACHE_DIR2)/.unpacked: $(DL_DIR)/$(CCACHE_SOURCE)
  85. $(CCACHE_CAT) $(DL_DIR)/$(CCACHE_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
  86. touch $(CCACHE_DIR2)/.unpacked
  87. $(CCACHE_DIR2)/.patched: $(CCACHE_DIR2)/.unpacked
  88. touch $(CCACHE_DIR2)/.patched
  89. $(CCACHE_DIR2)/.configured: $(CCACHE_DIR2)/.patched
  90. mkdir -p $(CCACHE_DIR2)
  91. (cd $(CCACHE_DIR2); rm -rf config.cache; \
  92. $(TARGET_CONFIGURE_OPTS) \
  93. $(CCACHE_DIR2)/configure \
  94. --target=$(GNU_TARGET_NAME) \
  95. --host=$(GNU_TARGET_NAME) \
  96. --build=$(GNU_HOST_NAME) \
  97. --prefix=/usr \
  98. --exec-prefix=/usr \
  99. --bindir=/usr/bin \
  100. --sbindir=/usr/sbin \
  101. --libexecdir=/usr/lib \
  102. --sysconfdir=/etc \
  103. --datadir=/usr/share \
  104. --localstatedir=/var \
  105. --mandir=/usr/man \
  106. --infodir=/usr/info \
  107. $(DISABLE_NLS) \
  108. );
  109. touch $(CCACHE_DIR2)/.configured
  110. $(CCACHE_DIR2)/$(CCACHE_BINARY): $(CCACHE_DIR2)/.configured
  111. $(MAKE) -C $(CCACHE_DIR2) CFLAGS="$(TARGET_CFLAGS)"
  112. $(TARGET_DIR)/$(CCACHE_TARGET_BINARY): $(CCACHE_DIR2)/$(CCACHE_BINARY)
  113. $(MAKE) DESTDIR=$(TARGET_DIR) -C $(CCACHE_DIR2) install
  114. rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
  115. $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
  116. # put a bunch of symlinks into /bin, since that is earlier
  117. # in the default PATH than /usr/bin where gcc lives
  118. (cd $(TARGET_DIR)/bin; \
  119. ln -fs /usr/bin/ccache cc; \
  120. ln -fs /usr/bin/ccache gcc; \
  121. ln -fs /usr/bin/ccache c++; \
  122. ln -fs /usr/bin/ccache g++;)
  123. ccache_target: uclibc $(TARGET_DIR)/$(CCACHE_TARGET_BINARY)
  124. ccache_target-sources: $(DL_DIR)/$(CCACHE_SOURCE)
  125. ccache_target-clean:
  126. rm -f $(TARGET_DIR)/$(CCACHE_TARGET_BINARY)
  127. -$(MAKE) -C $(CCACHE_DIR2) clean
  128. ccache_target-dirclean:
  129. rm -rf $(CCACHE_DIR2)
  130. #############################################################
  131. #
  132. # Toplevel Makefile options
  133. #
  134. #############################################################
  135. ifeq ($(strip $(BR2_CCACHE)),y)
  136. TARGETS+=ccache
  137. endif
  138. ifeq ($(strip $(BR2_PACKAGE_CCACHE_TARGET)),y)
  139. TARGETS+=ccache_target
  140. endif