summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config_help.txt1
-rw-r--r--configure.json17
-rw-r--r--mkspecs/features/unix/ccache.prf19
3 files changed, 37 insertions, 0 deletions
diff --git a/config_help.txt b/config_help.txt
index d1b0ac56b0..f06584a480 100644
--- a/config_help.txt
+++ b/config_help.txt
@@ -144,6 +144,7 @@ Build options:
-ltcg ................ Use Link Time Code Generation [no]
-use-gold-linker ..... Use the GNU gold linker [auto]
-incredibuild-xge .... Use the IncrediBuild XGE [no] (Windows only)
+ -ccache .............. Use the ccache compiler cache [no] (Unix only)
-make-tool <tool> .... Use <tool> to build qmake [nmake] (Windows only)
-mp .................. Use multiple processors for compilation (MSVC only)
diff --git a/configure.json b/configure.json
index 6221c9803a..a91456aaf3 100644
--- a/configure.json
+++ b/configure.json
@@ -61,6 +61,7 @@
"avx2": "boolean",
"avx512": { "type": "boolean", "name": "avx512f" },
"c++std": "cxxstd",
+ "ccache": { "type": "boolean", "name": "ccache" },
"commercial": "void",
"compile-examples": { "type": "boolean", "name": "compile_examples" },
"confirm-license": "void",
@@ -620,6 +621,11 @@
"label": "IncrediBuild",
"type": "files",
"files": [ "BuildConsole.exe", "xgConsole.exe" ]
+ },
+ "ccache": {
+ "label": "ccache",
+ "type": "files",
+ "files": [ "ccache" ]
}
},
@@ -1206,6 +1212,12 @@
"condition": "tests.incredibuild_xge",
"output": [ "publicConfig" ]
},
+ "ccache": {
+ "label": "Using ccache",
+ "autoDetect": false,
+ "condition": "config.unix && tests.ccache",
+ "output": [ "privateConfig" ]
+ },
"msvc_mp": {
"label": "Use multiple processors when compiling with MSVC",
"emitIf": "config.msvc",
@@ -1313,6 +1325,11 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5
"type": "firstAvailableFeature",
"args": "c++1z c++14 c++11"
},
+ {
+ "type": "feature",
+ "args": "ccache",
+ "condition": "config.unix"
+ },
"use_gold_linker",
{
"type": "feature",
diff --git a/mkspecs/features/unix/ccache.prf b/mkspecs/features/unix/ccache.prf
new file mode 100644
index 0000000000..d5739d3eab
--- /dev/null
+++ b/mkspecs/features/unix/ccache.prf
@@ -0,0 +1,19 @@
+macx-xcode: return()
+
+darwin: load(sdk)
+
+ccache_prefix = ccache
+
+precompile_header {
+ CCACHE_SLOPPINESS += pch_defines time_macros
+
+ ccache_prefix = \
+ CCACHE_SLOPPINESS=\"$$join(CCACHE_SLOPPINESS, ',')\$${CCACHE_SLOPPINESS+,\$$CCACHE_SLOPPINESS}\" \
+ # Make sure we build sources directly, not from their preprocessed version,
+ # otherwise precompiled headers will not be used during cache misses.
+ CCACHE_CPP2=true \
+ $$ccache_prefix
+}
+
+for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_LINK QMAKE_LINK_SHLIB QMAKE_LINK_C)): \
+ $$tool = $$ccache_prefix $$eval($$tool)