summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rwxr-xr-xlib/spack/env/cc15
-rw-r--r--lib/spack/spack/test/cc.py25
2 files changed, 38 insertions, 2 deletions
diff --git a/lib/spack/env/cc b/lib/spack/env/cc
index 5ffaf941e0..e8a0903d2a 100755
--- a/lib/spack/env/cc
+++ b/lib/spack/env/cc
@@ -481,8 +481,19 @@ for lib in "${libs[@]}"; do
args+=("-l$lib");
done
-full_command=("$command")
-full_command+=("${args[@]}")
+full_command=("$command" "${args[@]}")
+
+# prepend the ccache binary if we're using ccache
+if [ -n "$SPACK_CCACHE_BINARY" ]; then
+ case "$lang_flags" in
+ C|CXX) # ccache only supports C languages
+ full_command=("${SPACK_CCACHE_BINARY}" "${full_command[@]}")
+ # workaround for stage being a temp folder
+ # see #3761#issuecomment-294352232
+ export CCACHE_NOHASHDIR=yes
+ ;;
+ esac
+fi
# dump the full command if the caller supplies SPACK_TEST_COMMAND=dump-args
if [[ $SPACK_TEST_COMMAND == dump-args ]]; then
diff --git a/lib/spack/spack/test/cc.py b/lib/spack/spack/test/cc.py
index 3d06890f55..517b7f1dd3 100644
--- a/lib/spack/spack/test/cc.py
+++ b/lib/spack/spack/test/cc.py
@@ -560,3 +560,28 @@ def test_ld_deps_partial(dep1):
test_rpaths +
['-r'] +
test_args_without_paths)
+
+
+def test_ccache_prepend_for_cc():
+ with set_env(SPACK_CCACHE_BINARY='ccache'):
+ check_cc(
+ 'dump-args', test_args,
+ ['ccache'] + # ccache prepended in cc mode
+ [real_cc] +
+ test_include_paths +
+ test_library_paths +
+ test_wl_rpaths +
+ pkg_wl_rpaths +
+ test_args_without_paths)
+
+
+def test_no_ccache_prepend_for_fc():
+ check_fc(
+ 'dump-args', test_args,
+ # no ccache for Fortran
+ [real_cc] +
+ test_include_paths +
+ test_library_paths +
+ test_wl_rpaths +
+ pkg_wl_rpaths +
+ test_args_without_paths)