From 1a0689c527ed839b54ef92ab2a0df96ba539a1b8 Mon Sep 17 00:00:00 2001 From: Gera Shegalov Date: Fri, 6 May 2022 14:26:06 -0700 Subject: [PATCH] Use ccache in build-in-docker by default (#225) This PR enables `ccache` in build-in-docker script by default, closes #222. A repeated no-change build with the native build dir cleaned is ~90 seconds A repeated no-change build without removing the native build dir is ~30 seconds The PR proposes to change the default to not skipping the clean of libcudf build unless CCACHE_DISABLE=1 is set. Manual override of `libcudf.clean.skip` is honored. Signed-off-by: Gera Shegalov --- CONTRIBUTING.md | 9 ++++++--- build-libcudf.xml | 1 + build/build-in-docker | 23 +++++++++++++++++++++++ pom.xml | 2 ++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0222e04b90..d359f79236 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,9 +49,12 @@ so it should be invoked as one would invoke Maven, e.g.: `build/build-in-docker ### cudf Submodule and Build [RAPIDS cuDF](https://github.com/rapidsai/cudf) is being used as a submodule in this project. -Due to the lengthy build of libcudf, it is **not cleaned** during a normal Maven clean phase. -Use `-Dlibcudf.clean.skip=true` to clean the libcudf build area in addition to the normal clean -of `target/` directories. +Due to the lengthy build of libcudf, it is **not cleaned** during a normal Maven clean phase +unless built using `build/build-in-docker`. `build/build-in-docker` uses `ccache` by default +unless CCACHE_DISABLE=1 is set in the environment. + +`-Dlibcudf.clean.skip=false` can also be specified on the Maven command-line to force +libcudf to be cleaned during the Maven clean phase. Currently libcudf is only configured once and the build relies on cmake to re-configure as needed. This is because libcudf currently is rebuilding almost entirely when it is configured with the same diff --git a/build-libcudf.xml b/build-libcudf.xml index 81ffb21c0e..d4eb73c598 100644 --- a/build-libcudf.xml +++ b/build-libcudf.xml @@ -36,6 +36,7 @@ executable="cmake" if:true="${needConfigure}"> + diff --git a/build/build-in-docker b/build/build-in-docker index 462dfdad3b..c52d5f31fe 100755 --- a/build/build-in-docker +++ b/build/build-in-docker @@ -46,6 +46,25 @@ $DOCKER_CMD build -f $REPODIR/ci/Dockerfile \ -t $SPARK_IMAGE_NAME \ $REPODIR/build +CCACHE_OPTS=( + "-DCMAKE_C_COMPILER_LAUNCHER=ccache" + "-DCMAKE_CXX_COMPILER_LAUNCHER=ccache" + "-DCMAKE_CUDA_COMPILER_LAUNCHER=ccache" + "-DCMAKE_CXX_LINKER_LAUNCHER=ccache" +) + +_CUDF_CLEAN_SKIP="" +# if ccache is enabled and libcudf.clean.skip not provided +# by the user remove the cpp build directory +# +if [[ "$CCACHE_DISABLE" != "1" ]]; then + if [[ ! "$*" =~ " -Dlibcudf.clean.skip=" ]]; then + # Don't skip clean if ccache is enabled + # unless the user overrides + _CUDF_CLEAN_SKIP="-Dlibcudf.clean.skip=false" + fi +fi + $DOCKER_CMD run -it -u $(id -u):$(id -g) --rm \ -v "/etc/group:/etc/group:ro" \ -v "/etc/passwd:/etc/passwd:ro" \ @@ -53,7 +72,9 @@ $DOCKER_CMD run -it -u $(id -u):$(id -g) --rm \ -v "/etc/sudoers.d:/etc/sudoers.d:ro" \ -v "$REPODIR:$WORKSPACE_REPODIR:rw" \ -v "$LOCAL_MAVEN_REPO:$WORKSPACE_MAVEN_REPODIR:rw" \ + -v "$HOME/.ccache:$HOME/.ccache:rw" \ --workdir "$WORKSPACE_REPODIR" \ + -e CCACHE_DISABLE \ -e CMAKE_GENERATOR="$CMAKE_GENERATOR" \ -e CUDA_VISIBLE_DEVICES \ -e PARALLEL_LEVEL \ @@ -63,4 +84,6 @@ $DOCKER_CMD run -it -u $(id -u):$(id -g) --rm \ -Dmaven.repo.local=$WORKSPACE_MAVEN_REPODIR \ -DPER_THREAD_DEFAULT_STREAM=$PER_THREAD_DEFAULT_STREAM \ -DUSE_GDS=$USE_GDS \ + -Dcmake.ccache.opts=\"${CCACHE_OPTS[*]}\" \ + $_CUDF_CLEAN_SKIP \ $*" diff --git a/pom.xml b/pom.xml index 8a17befb02..5cbd892188 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,7 @@ UTF-8 1.7.30 false + @@ -260,6 +261,7 @@ +