ccache: rework ccache management
* ccache is now a normal package (both for the host and the target). * ccache option is now part of the "Build options" menu. It will automatically build ccache for the host before building anything, and will use it to cache builds for both host compilations and target compilations. * bump ccache to 3.1.3 Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
This commit is contained in:
parent
3bbf1c2ea6
commit
17b66affdf
3
CHANGES
3
CHANGES
@ -1,5 +1,8 @@
|
||||
2011.02, Not yet released:
|
||||
|
||||
Ccache support reworked. Now used for both host and target
|
||||
compilation, and cache is stored in ~/.buildroot-ccache.
|
||||
|
||||
Updated/fixed packages: cloop, m4, openssh, xz
|
||||
|
||||
New packages: lsuio
|
||||
|
@ -94,6 +94,14 @@ config BR2_JLEVEL
|
||||
help
|
||||
Number of jobs to run simultaneously
|
||||
|
||||
config BR2_CCACHE
|
||||
bool "Enable compiler cache"
|
||||
help
|
||||
This option will enable the use of ccache, a compiler
|
||||
cache. It will cache the result of previous builds to speed
|
||||
up future builds. The cache is stored in
|
||||
$HOME/.buildroot-ccache.
|
||||
|
||||
config BR2_DEPRECATED
|
||||
bool "Show packages that are deprecated or obsolete"
|
||||
help
|
||||
|
26
Makefile
26
Makefile
@ -125,10 +125,13 @@ HOSTAS:=as
|
||||
endif
|
||||
ifndef HOSTCC
|
||||
HOSTCC:=gcc
|
||||
else
|
||||
HOSTCC:=$(shell which $(HOSTCC) || type -p $(HOSTCC) || echo gcc)
|
||||
HOSTCC_NOCCACHE:=$(HOSTCC)
|
||||
endif
|
||||
ifndef HOSTCXX
|
||||
HOSTCXX:=g++
|
||||
HOSTCXX:=$(shell which $(HOSTCXX) || type -p $(HOSTCXX) || echo g++)
|
||||
HOSTCXX_NOCCACHE:=$(HOSTCXX)
|
||||
endif
|
||||
ifndef HOSTFC
|
||||
HOSTFC:=gfortran
|
||||
@ -147,8 +150,6 @@ HOSTNM:=nm
|
||||
endif
|
||||
HOSTAR:=$(shell which $(HOSTAR) || type -p $(HOSTAR) || echo ar)
|
||||
HOSTAS:=$(shell which $(HOSTAS) || type -p $(HOSTAS) || echo as)
|
||||
HOSTCC:=$(shell which $(HOSTCC) || type -p $(HOSTCC) || echo gcc)
|
||||
HOSTCXX:=$(shell which $(HOSTCXX) || type -p $(HOSTCXX) || echo g++)
|
||||
HOSTFC:=$(shell which $(HOSTLD) || type -p $(HOSTLD) || echo || which g77 || type -p g77 || echo gfortran)
|
||||
HOSTCPP:=$(shell which $(HOSTCPP) || type -p $(HOSTCPP) || echo cpp)
|
||||
HOSTLD:=$(shell which $(HOSTLD) || type -p $(HOSTLD) || echo ld)
|
||||
@ -156,6 +157,7 @@ HOSTLN:=$(shell which $(HOSTLN) || type -p $(HOSTLN) || echo ln)
|
||||
HOSTNM:=$(shell which $(HOSTNM) || type -p $(HOSTNM) || echo nm)
|
||||
|
||||
export HOSTAR HOSTAS HOSTCC HOSTCXX HOSTFC HOSTLD
|
||||
export HOSTCC_NOCCACHE HOSTCXX_NOCCACHE
|
||||
|
||||
# bash prints the name of the directory on 'cd <dir>' if CDPATH is
|
||||
# set, so unset it here to not cause problems. Notice that the export
|
||||
@ -231,10 +233,15 @@ PREFERRED_LIB_FLAGS:=--enable-static --enable-shared
|
||||
# along with the packages to build for the target.
|
||||
#
|
||||
##############################################################
|
||||
|
||||
ifeq ($(BR2_CCACHE),y)
|
||||
BASE_TARGETS += host-ccache
|
||||
endif
|
||||
|
||||
ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
|
||||
BASE_TARGETS:=uclibc-configured binutils cross_compiler uclibc-target-utils kernel-headers
|
||||
BASE_TARGETS += uclibc-configured binutils cross_compiler uclibc-target-utils kernel-headers
|
||||
else
|
||||
BASE_TARGETS:=uclibc
|
||||
BASE_TARGETS += uclibc
|
||||
endif
|
||||
TARGETS:=
|
||||
|
||||
@ -276,6 +283,13 @@ TARGET_SKELETON=$(TOPDIR)/fs/skeleton
|
||||
|
||||
BR2_DEPENDS_DIR=$(BUILD_DIR)/buildroot-config
|
||||
|
||||
ifeq ($(BR2_CCACHE),y)
|
||||
CCACHE:=$(HOST_DIR)/usr/bin/ccache
|
||||
CCACHE_CACHE_DIR=$(HOME)/.buildroot-ccache
|
||||
HOSTCC := $(CCACHE) $(HOSTCC)
|
||||
HOSTCXX := $(CCACHE) $(HOSTCXX)
|
||||
endif
|
||||
|
||||
include toolchain/Makefile.in
|
||||
include package/Makefile.in
|
||||
|
||||
@ -480,7 +494,7 @@ export HOSTCFLAGS
|
||||
|
||||
$(BUILD_DIR)/buildroot-config/%onf:
|
||||
mkdir -p $(@D)/lxdialog
|
||||
$(MAKE) CC="$(HOSTCC)" obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
|
||||
$(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
|
||||
|
||||
COMMON_CONFIG_ENV = \
|
||||
KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \
|
||||
|
@ -29,6 +29,7 @@
|
||||
<li><a href="#buildroot_innards">How Buildroot works</a></li>
|
||||
<li><a href="#using_toolchain">Using the uClibc toolchain outside Buildroot</a></li>
|
||||
<li><a href="#external_toolchain">Use an external toolchain</a></li>
|
||||
<li><a href="#ccache-support">Using <code>ccache</code> in Buildroot</li>
|
||||
<li><a href="#downloaded_packages">Location of downloaded packages</a></li>
|
||||
<li><a href="#add_packages">Adding new packages to Buildroot</a></li>
|
||||
<li><a href="#board_support">Creating your own board support</a></li>
|
||||
@ -523,9 +524,8 @@ $(ZLIB_DIR)/libz.a: $(ZLIB_DIR)/.configured
|
||||
<ul>
|
||||
<li><b>toolchain</b> (in the <code>toolchain/</code> directory) contains
|
||||
the Makefiles and associated files for all software related to the
|
||||
cross-compilation toolchain: <code>binutils</code>, <code>ccache</code>,
|
||||
<code>gcc</code>, <code>gdb</code>, <code>kernel-headers</code> and
|
||||
<code>uClibc</code>.</li>
|
||||
cross-compilation toolchain: <code>binutils</code>, <code>gcc</code>,
|
||||
<code>gdb</code>, <code>kernel-headers</code> and <code>uClibc</code>.</li>
|
||||
|
||||
<li><b>package</b> (in the <code>package/</code> directory) contains the
|
||||
Makefiles and associated files for all user-space tools that Buildroot
|
||||
@ -681,6 +681,31 @@ endif
|
||||
Build options -> Toolchain and header file location</code> options.
|
||||
This could be useful if the toolchain must be shared with other users.</p>
|
||||
|
||||
<h2 id="ccache-support">Using <code>ccache</code> in Buildroot</h2>
|
||||
|
||||
<p><a href="http://ccache.samba.org">ccache</a> is a compiler
|
||||
cache. It stores the object files resulting from each compilation
|
||||
process, and is able to skip future compilation of the same source
|
||||
file (with same compiler and same arguments) by using the
|
||||
pre-existing object files. When doing almost identical builds from
|
||||
scratch a number of times, it can nicely speed up the build
|
||||
process.</p>
|
||||
|
||||
<p><code>ccache</code> support is integrated in Buildroot. You
|
||||
just have to enable <code>Enable compiler cache</code>
|
||||
in <code>Build options</code>. This will automatically build
|
||||
<code>ccache</code> and use it for every host and target
|
||||
compilation.</p>
|
||||
|
||||
<p>The cache is located
|
||||
in <code>$HOME/.buildroot-ccache</code>. It is stored outside of
|
||||
Buildroot output directory so that it can be shared by separate
|
||||
Buildroot builds. If you want to get rid of the cache, simply
|
||||
remove this directory.</p>
|
||||
|
||||
<p>You can get statistics on the cache (its size, number of hits,
|
||||
misses, etc.) by running <code>make ccache-stats</code>.</p>
|
||||
|
||||
<h2 id="downloaded_packages">Location of downloaded packages</h2>
|
||||
|
||||
<p>It might be useful to know that the various tarballs that are
|
||||
|
@ -35,7 +35,7 @@ source "package/autoconf/Config.in"
|
||||
source "package/automake/Config.in"
|
||||
source "package/bison/Config.in"
|
||||
source "package/bsdiff/Config.in"
|
||||
source "toolchain/ccache/Config.in.2"
|
||||
source "package/ccache/Config.in"
|
||||
if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
|
||||
source "package/coreutils/Config.in"
|
||||
endif
|
||||
|
@ -142,6 +142,14 @@ TARGET_RANLIB = $(TARGET_CROSS)ranlib
|
||||
TARGET_OBJCOPY = $(TARGET_CROSS)objcopy
|
||||
TARGET_OBJDUMP = $(TARGET_CROSS)objdump
|
||||
|
||||
TARGET_CC_NOCCACHE := $(TARGET_CC)
|
||||
TARGET_CXX_NOCCACHE := $(TARGET_CXX)
|
||||
|
||||
ifeq ($(BR2_CCACHE),y)
|
||||
TARGET_CC := $(CCACHE) $(TARGET_CC)
|
||||
TARGET_CXX := $(CCACHE) $(TARGET_CXX)
|
||||
endif
|
||||
|
||||
ifeq ($(BR2_STRIP_strip),y)
|
||||
STRIP_DISCARD_ALL:=--discard-all
|
||||
STRIP_STRIP_UNNEEDED:=--strip-unneeded
|
||||
@ -175,7 +183,7 @@ HOST_LDFLAGS += -L$(HOST_DIR)/lib -L$(HOST_DIR)/usr/lib -Wl,-rpath,$(HOST_DIR)/
|
||||
HOST_PATH=$(HOST_DIR)/bin:$(HOST_DIR)/usr/bin:$(PATH)
|
||||
|
||||
# hostcc version as an integer - E.G. 4.3.2 => 432
|
||||
HOSTCC_VERSION:=$(shell $(HOSTCC) --version | \
|
||||
HOSTCC_VERSION:=$(shell $(HOSTCC_NOCCACHE) --version | \
|
||||
sed -n 's/^.* \([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[ ]*.*$$/\1\2\3/p')
|
||||
|
||||
TARGET_CONFIGURE_OPTS=PATH=$(TARGET_PATH) \
|
||||
|
9
package/ccache/Config.in
Normal file
9
package/ccache/Config.in
Normal file
@ -0,0 +1,9 @@
|
||||
config BR2_PACKAGE_CCACHE
|
||||
bool "ccache"
|
||||
help
|
||||
ccache is a compiler cache. It speeds up recompilation by
|
||||
caching previous compilations and detecting when the same
|
||||
compilation is being done again
|
||||
|
||||
http://samba.ccache.org
|
||||
|
33
package/ccache/ccache.mk
Normal file
33
package/ccache/ccache.mk
Normal file
@ -0,0 +1,33 @@
|
||||
#############################################################
|
||||
#
|
||||
# ccache
|
||||
#
|
||||
#############################################################
|
||||
|
||||
CCACHE_VERSION = 3.1.3
|
||||
CCACHE_SITE = http://samba.org/ftp/ccache
|
||||
CCACHE_SOURCE = ccache-$(CCACHE_VERSION).tar.bz2
|
||||
|
||||
# When ccache is being built for the host, ccache is not yet
|
||||
# available, so we have to use the special C compiler without the
|
||||
# cache.
|
||||
HOST_CCACHE_CONF_ENV = \
|
||||
CC="$(HOSTCC_NOCCACHE)"
|
||||
|
||||
# We directly hardcode the cache location into the binary, as it is
|
||||
# much easier to handle than passing an environment variable.
|
||||
define HOST_CCACHE_FIX_CCACHE_DIR
|
||||
sed -i 's,getenv("CCACHE_DIR"),"$(CCACHE_CACHE_DIR)",' $(@D)/ccache.c
|
||||
endef
|
||||
|
||||
HOST_CCACHE_POST_CONFIGURE_HOOKS += \
|
||||
HOST_CCACHE_FIX_CCACHE_DIR
|
||||
|
||||
$(eval $(call AUTOTARGETS,package,ccache))
|
||||
$(eval $(call AUTOTARGETS,package,ccache,host))
|
||||
|
||||
ifeq ($(BR2_CCACHE),y)
|
||||
ccache-stats: host-ccache
|
||||
$(Q)$(CCACHE) -s
|
||||
endif
|
||||
|
@ -1,16 +0,0 @@
|
||||
#
|
||||
|
||||
comment "Ccache Options"
|
||||
|
||||
config BR2_CCACHE
|
||||
bool "Enable ccache support?"
|
||||
help
|
||||
Enable ccache support?
|
||||
|
||||
config BR2_CCACHE_DIR
|
||||
string "ccache dir location?"
|
||||
depends on BR2_CCACHE
|
||||
default "$(TOOLCHAIN_DIR)/ccache-$(CCACHE_VER)/cache"
|
||||
help
|
||||
Where ccache should store cached files.
|
||||
|
@ -1,13 +0,0 @@
|
||||
#
|
||||
|
||||
config BR2_PACKAGE_CCACHE_TARGET
|
||||
bool "ccache"
|
||||
depends on BR2_PACKAGE_GCC_TARGET
|
||||
help
|
||||
ccache is a compiler cache. It speeds up recompilation of
|
||||
C/C++ code by caching previous compiles and detecting when
|
||||
the same compile is being done again.
|
||||
|
||||
http://ccache.samba.org
|
||||
|
||||
|
@ -1,196 +0,0 @@
|
||||
#############################################################
|
||||
#
|
||||
# build ccache to make recompiles faster on the build system
|
||||
#
|
||||
#############################################################
|
||||
CCACHE_VER:=2.4
|
||||
CCACHE_SITE:=http://samba.org/ftp/ccache
|
||||
CCACHE_SOURCE:=ccache-$(CCACHE_VER).tar.gz
|
||||
CCACHE_DIR1:=$(TOOLCHAIN_DIR)/ccache-$(CCACHE_VER)
|
||||
CCACHE_DIR2:=$(BUILD_DIR)/ccache-$(CCACHE_VER)
|
||||
CCACHE_CAT:=$(ZCAT)
|
||||
CCACHE_BINARY:=ccache
|
||||
CCACHE_TARGET_BINARY:=usr/bin/ccache
|
||||
|
||||
$(DL_DIR)/$(CCACHE_SOURCE):
|
||||
$(call DOWNLOAD,$(CCACHE_SITE),$(CCACHE_SOURCE))
|
||||
|
||||
$(CCACHE_DIR1)/.unpacked: $(DL_DIR)/$(CCACHE_SOURCE)
|
||||
$(CCACHE_CAT) $(DL_DIR)/$(CCACHE_SOURCE) | tar -C $(TOOLCHAIN_DIR) $(TAR_OPTIONS) -
|
||||
touch $@
|
||||
|
||||
$(CCACHE_DIR1)/.patched: $(CCACHE_DIR1)/.unpacked
|
||||
# WARNING - this will break if the toolchain is moved.
|
||||
# Should probably patch things to use a relative path.
|
||||
$(SED) "s,getenv(\"CCACHE_PATH\"),\"$(STAGING_DIR)/usr/bin-ccache\",g" \
|
||||
$(CCACHE_DIR1)/execute.c
|
||||
# WARNING - this will break if the toolchain build dir is deleted
|
||||
# when using the default cache dir location.
|
||||
$(SED) "s,getenv(\"CCACHE_DIR\"),\"$(BR2_CCACHE_DIR)\",g" \
|
||||
$(CCACHE_DIR1)/ccache.c
|
||||
mkdir -p $(CCACHE_DIR1)/cache
|
||||
$(CONFIG_UPDATE) $(@D)
|
||||
touch $@
|
||||
|
||||
$(CCACHE_DIR1)/.configured: $(CCACHE_DIR1)/.patched
|
||||
mkdir -p $(CCACHE_DIR1)
|
||||
(cd $(CCACHE_DIR1); rm -rf config.cache; \
|
||||
CC="$(HOSTCC)" \
|
||||
$(CCACHE_DIR1)/configure $(QUIET) \
|
||||
--target=$(GNU_HOST_NAME) \
|
||||
--host=$(GNU_HOST_NAME) \
|
||||
--build=$(GNU_HOST_NAME) \
|
||||
--prefix=/usr \
|
||||
$(QUIET) \
|
||||
)
|
||||
touch $@
|
||||
|
||||
$(CCACHE_DIR1)/$(CCACHE_BINARY): $(CCACHE_DIR1)/.configured
|
||||
$(MAKE) CC="$(HOSTCC)" -C $(CCACHE_DIR1)
|
||||
|
||||
$(STAGING_DIR)/$(CCACHE_TARGET_BINARY): $(CCACHE_DIR1)/$(CCACHE_BINARY)
|
||||
mkdir -p $(STAGING_DIR)/usr/bin
|
||||
cp $(CCACHE_DIR1)/ccache $(STAGING_DIR)/usr/bin
|
||||
# Keep the actual toolchain binaries in a directory at the same level.
|
||||
# Otherwise, relative paths for include dirs break.
|
||||
mkdir -p $(STAGING_DIR)/usr/bin-ccache
|
||||
(cd $(STAGING_DIR)/usr/bin-ccache; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(GNU_TARGET_NAME)-gcc; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(GNU_TARGET_NAME)-cc; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(REAL_GNU_TARGET_NAME)-cc; \
|
||||
)
|
||||
[ -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc ] && \
|
||||
mv $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc \
|
||||
$(STAGING_DIR)/usr/bin-ccache/
|
||||
(cd $(STAGING_DIR)/usr/bin; \
|
||||
ln -fs ccache $(GNU_TARGET_NAME)-cc; \
|
||||
ln -fs ccache $(GNU_TARGET_NAME)-gcc; \
|
||||
ln -fs ccache $(REAL_GNU_TARGET_NAME)-cc; \
|
||||
ln -fs ccache $(REAL_GNU_TARGET_NAME)-gcc; \
|
||||
)
|
||||
ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
|
||||
[ -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-c++ ] && \
|
||||
mv $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-c++ \
|
||||
$(STAGING_DIR)/usr/bin-ccache/
|
||||
[ -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-g++ ] && \
|
||||
mv $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-g++ \
|
||||
$(STAGING_DIR)/usr/bin-ccache/
|
||||
(cd $(STAGING_DIR)/usr/bin; \
|
||||
ln -fs ccache $(GNU_TARGET_NAME)-c++; \
|
||||
ln -fs ccache $(GNU_TARGET_NAME)-g++;\
|
||||
ln -fs ccache $(REAL_GNU_TARGET_NAME)-c++; \
|
||||
ln -fs ccache $(REAL_GNU_TARGET_NAME)-g++; \
|
||||
)
|
||||
(cd $(STAGING_DIR)/usr/bin-ccache; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-c++ $(GNU_TARGET_NAME)-c++; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-g++ $(GNU_TARGET_NAME)-g++; \
|
||||
)
|
||||
endif
|
||||
|
||||
ccache: gcc $(STAGING_DIR)/$(CCACHE_TARGET_BINARY)
|
||||
|
||||
ccache-clean:
|
||||
rm -rf $(STAGING_DIR)/usr/bin/$(GNU_TARGET_NAME)-cc
|
||||
rm -rf $(STAGING_DIR)/usr/bin/$(GNU_TARGET_NAME)-gcc
|
||||
rm -rf $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-cc
|
||||
rm -rf $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc
|
||||
if [ -f $(STAGING_DIR)/usr/bin-ccache/$(REAL_GNU_TARGET_NAME)-gcc ]; then \
|
||||
mv $(STAGING_DIR)/usr/bin-ccache/$(REAL_GNU_TARGET_NAME)-gcc \
|
||||
$(STAGING_DIR)/usr/bin/; \
|
||||
(cd $(STAGING_DIR)/usr/bin; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-gcc \
|
||||
$(REAL_GNU_TARGET_NAME)-cc; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-gcc \
|
||||
$(GNU_TARGET_NAME)-cc; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-gcc \
|
||||
$(GNU_TARGET_NAME)-gcc; \
|
||||
); \
|
||||
fi
|
||||
if [ -f $(STAGING_DIR)/usr/bin-ccache/$(REAL_GNU_TARGET_NAME)-c++ ]; then \
|
||||
rm -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-c++; \
|
||||
mv $(STAGING_DIR)/usr/bin-ccache/$(REAL_GNU_TARGET_NAME)-c++ \
|
||||
$(STAGING_DIR)/usr/bin/; \
|
||||
fi
|
||||
if [ -f $(STAGING_DIR)/usr/bin-ccache/$(REAL_GNU_TARGET_NAME)-g++ ]; then \
|
||||
rm -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-g++; \
|
||||
mv $(STAGING_DIR)/usr/bin-ccache/$(REAL_GNU_TARGET_NAME)-g++ \
|
||||
$(STAGING_DIR)/usr/bin/; \
|
||||
fi
|
||||
rm -rf $(STAGING_DIR)/usr/bin-ccache/*
|
||||
(cd $(STAGING_DIR)/usr/bin; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-g++ $(GNU_TARGET_NAME)-c++; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-g++ $(GNU_TARGET_NAME)-g++; \
|
||||
ln -fs $(REAL_GNU_TARGET_NAME)-g++ $(REAL_GNU_TARGET_NAME)-c++; \
|
||||
)
|
||||
-$(MAKE) -C $(CCACHE_DIR1) clean
|
||||
|
||||
ccache-dirclean:
|
||||
rm -rf $(CCACHE_DIR1)
|
||||
|
||||
|
||||
|
||||
|
||||
#############################################################
|
||||
#
|
||||
# build ccache for use on the target system
|
||||
#
|
||||
#############################################################
|
||||
|
||||
$(CCACHE_DIR2)/.unpacked: $(DL_DIR)/$(CCACHE_SOURCE)
|
||||
$(CCACHE_CAT) $(DL_DIR)/$(CCACHE_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
|
||||
touch $@
|
||||
|
||||
$(CCACHE_DIR2)/.patched: $(CCACHE_DIR2)/.unpacked
|
||||
touch $@
|
||||
|
||||
$(CCACHE_DIR2)/.configured: $(CCACHE_DIR2)/.patched
|
||||
mkdir -p $(CCACHE_DIR2)
|
||||
(cd $(CCACHE_DIR2); rm -rf config.cache; \
|
||||
$(TARGET_CONFIGURE_OPTS) \
|
||||
$(CCACHE_DIR2)/configure $(QUIET) \
|
||||
--target=$(GNU_TARGET_NAME) \
|
||||
--host=$(GNU_TARGET_NAME) \
|
||||
--build=$(GNU_HOST_NAME) \
|
||||
--prefix=/usr \
|
||||
--sysconfdir=/etc \
|
||||
$(DISABLE_NLS) \
|
||||
$(QUIET) \
|
||||
)
|
||||
touch $@
|
||||
|
||||
$(CCACHE_DIR2)/$(CCACHE_BINARY): $(CCACHE_DIR2)/.configured
|
||||
$(MAKE) -C $(CCACHE_DIR2) CFLAGS="$(TARGET_CFLAGS)"
|
||||
|
||||
$(TARGET_DIR)/$(CCACHE_TARGET_BINARY): $(CCACHE_DIR2)/$(CCACHE_BINARY)
|
||||
$(MAKE) DESTDIR=$(TARGET_DIR) -C $(CCACHE_DIR2) install
|
||||
# put a bunch of symlinks into /bin, since that is earlier
|
||||
# in the default PATH than /usr/bin where gcc lives
|
||||
(cd $(TARGET_DIR)/bin; \
|
||||
ln -fs /usr/bin/ccache cc; \
|
||||
ln -fs /usr/bin/ccache gcc; \
|
||||
ln -fs /usr/bin/ccache c++; \
|
||||
ln -fs /usr/bin/ccache g++; \
|
||||
)
|
||||
|
||||
ccache_target: uclibc $(TARGET_DIR)/$(CCACHE_TARGET_BINARY)
|
||||
|
||||
ccache_target-sources: $(DL_DIR)/$(CCACHE_SOURCE)
|
||||
|
||||
ccache_target-clean:
|
||||
rm -f $(TARGET_DIR)/$(CCACHE_TARGET_BINARY) \
|
||||
$(addprefix $(TARGET_DIR)/bin/,cc gcc c++ g++)
|
||||
-$(MAKE) -C $(CCACHE_DIR2) clean
|
||||
|
||||
ccache_target-dirclean:
|
||||
rm -rf $(CCACHE_DIR2)
|
||||
#############################################################
|
||||
#
|
||||
# Toplevel Makefile options
|
||||
#
|
||||
#############################################################
|
||||
ifeq ($(BR2_CCACHE),y)
|
||||
TARGETS+=ccache
|
||||
endif
|
||||
ifeq ($(BR2_PACKAGE_CCACHE_TARGET),y)
|
||||
TARGETS+=ccache_target
|
||||
endif
|
@ -79,7 +79,7 @@ if [ $MAKE_MAJOR -lt 3 ] || [ $MAKE_MAJOR -eq 3 -a $MAKE_MINOR -lt 81 ] ; then
|
||||
fi;
|
||||
|
||||
# Check host gcc
|
||||
COMPILER=$(which $HOSTCC 2> /dev/null)
|
||||
COMPILER=$(which $HOSTCC_NOCCACHE 2> /dev/null)
|
||||
if [ -z "$COMPILER" ] ; then
|
||||
COMPILER=$(which cc 2> /dev/null)
|
||||
fi;
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
include toolchain/dependencies/dependencies.mk
|
||||
include toolchain/binutils/binutils.mk
|
||||
include toolchain/ccache/ccache.mk
|
||||
include toolchain/elf2flt/elf2flt.mk
|
||||
include toolchain/gcc/gcc-uclibc-4.x.mk
|
||||
include toolchain/gdb/gdb.mk
|
||||
|
@ -5,5 +5,4 @@ source "toolchain/kernel-headers/Config.in"
|
||||
source "toolchain/uClibc/Config.in"
|
||||
source "toolchain/binutils/Config.in"
|
||||
source "toolchain/gcc/Config.in"
|
||||
source "toolchain/ccache/Config.in"
|
||||
endif
|
||||
|
@ -3,7 +3,6 @@
|
||||
# Explicit ordering:
|
||||
include toolchain/helpers.mk
|
||||
include toolchain/binutils/binutils.mk
|
||||
include toolchain/ccache/ccache.mk
|
||||
include toolchain/dependencies/dependencies.mk
|
||||
include toolchain/elf2flt/elf2flt.mk
|
||||
include toolchain/gcc/gcc-uclibc-4.x.mk
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
include toolchain/helpers.mk
|
||||
include toolchain/binutils/binutils.mk
|
||||
include toolchain/ccache/ccache.mk
|
||||
include toolchain/dependencies/dependencies.mk
|
||||
include toolchain/elf2flt/elf2flt.mk
|
||||
include toolchain/gcc/gcc-uclibc-4.x.mk
|
||||
|
@ -62,7 +62,7 @@ endif # ! no threads
|
||||
# could select a multilib variant as we want the "main" sysroot, which
|
||||
# contains all variants of the C library in the case of multilib
|
||||
# toolchains.
|
||||
TARGET_CC_NO_SYSROOT=$(filter-out --sysroot=%,$(TARGET_CC))
|
||||
TARGET_CC_NO_SYSROOT=$(filter-out --sysroot=%,$(TARGET_CC_NOCCACHE))
|
||||
SYSROOT_DIR=$(shell $(TARGET_CC_NO_SYSROOT) -print-sysroot 2>/dev/null)
|
||||
ifeq ($(SYSROOT_DIR),)
|
||||
SYSROOT_DIR=$(shell readlink -f $$(LANG=C $(TARGET_CC_NO_SYSROOT) -print-file-name=libc.a) |sed -r -e 's:usr/lib/libc\.a::;')
|
||||
|
Loading…
Reference in New Issue
Block a user