This is an automated email from the ASF dual-hosted git repository.

pengzheng pushed a commit to branch feature/614-github-cache-build-deps
in repository https://gitbox.apache.org/repos/asf/celix.git


The following commit(s) were added to 
refs/heads/feature/614-github-cache-build-deps by this push:
     new 92fdfaa7 Add ccache to `conan create` tests.
92fdfaa7 is described below

commit 92fdfaa7492d5195f13a3b16fa686a46e90bbe9e
Author: PengZheng <howto...@gmail.com>
AuthorDate: Wed Aug 30 17:35:20 2023 +0800

    Add ccache to `conan create` tests.
---
 .github/workflows/conan_create.yml | 38 +++++++++++++++++++++++++++++++++-----
 CMakeLists.txt                     | 10 ++++++++++
 conanfile.py                       |  3 +++
 3 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/conan_create.yml 
b/.github/workflows/conan_create.yml
index 94a45620..8ab94aec 100644
--- a/.github/workflows/conan_create.yml
+++ b/.github/workflows/conan_create.yml
@@ -11,6 +11,8 @@ env:
   CONAN_USER_HOME: "${{ github.workspace }}/release/"
   CONAN_USER_HOME_SHORT: "${{ github.workspace }}/release/short"
   CONAN_HOME: "${{ github.workspace }}/release/"
+  CCACHE_NOHASHDIR: true
+  CCACHE_DIR: "${{ github.workspace }}/.ccache"
 
 
 jobs:
@@ -37,7 +39,7 @@ jobs:
         run: |
           # build profile
           conan profile detect -f
-      - name: Using the builtin GitHub Cache Action for .conan
+      - name: Conan Cache
         id: cache-conan
         uses: actions/cache@v1
         env:
@@ -46,18 +48,31 @@ jobs:
           path: ${{ env.CONAN_HOME }}
           key: ${{ runner.os }}-builder-${{ env.cache-name }}-${{ 
matrix.compiler[0] }}-${{ matrix.type }}-${{ hashFiles('conanfile.py') }}
           restore-keys: ${{ runner.os }}-builder-${{ env.cache-name }}-${{ 
matrix.compiler[0] }}-${{ matrix.type }}-
+      - name: Prepare ccache timestamp
+        id: ccache_cache_timestamp
+        shell: cmake -P {0}
+        run: |
+          string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
+          message("::set-output name=timestamp::${current_date}")
+      - name: ccache Cache
+        uses: actions/cache@v1
+        with:
+          path: ${{ env.CCACHE_DIR }}
+          key: ${{ runner.os }}-ccache-${{ matrix.compiler[0] }}-${{ 
matrix.type }}-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
+          restore-keys: |
+            ${{ runner.os }}-ccache-${{ matrix.compiler[0] }}-${{ matrix.type 
}}-
       - name: Create Celix
         env:
           CC: ${{ matrix.compiler[0] }}
           CXX: ${{ matrix.compiler[1] }}
         run: |
-          conan create . -c tools.cmake.cmaketoolchain:generator=Ninja -b 
missing -o celix/*:build_all=True  -pr:b default -pr:h default -s:h 
build_type=${{ matrix.type }} -tf examples/conan_test_package_v2 -o 
celix/*:celix_cxx17=True -o celix/*:celix_install_deprecated_api=True
+          conan create . -c tools.cmake.cmaketoolchain:generator=Ninja -b 
missing -o celix/*:build_all=True  -o celix/*:enable_ccache=True -pr:b default 
-pr:h default -s:h build_type=${{ matrix.type }} -tf 
examples/conan_test_package_v2 -o celix/*:celix_cxx17=True -o 
celix/*:celix_install_deprecated_api=True
       - name: Dependency Deduction Test
         env:
           CC: ${{ matrix.compiler[0] }}
           CXX: ${{ matrix.compiler[1] }}
         run: |
-          conan inspect .  | awk 'BEGIN { FS="[\t:]+"; output=0 } /build/ && 
!/build_all/ { if(output) print $1} /^options/ {output=1} 
/^options_definitions/ {output=0}' | while read option; do conan build . -c 
tools.cmake.cmaketoolchain:generator=Ninja -b missing -o celix/*:${option}=True 
 -pr:b default -pr:h default -s:h build_type=${{ matrix.type }} -of  
${option}_dir -o celix/*:celix_cxx17=True -o 
celix/*:celix_install_deprecated_api=True || exit 1; done
+          conan inspect .  | awk 'BEGIN { FS="[\t:]+"; output=0 } /build/ && 
!/build_all/ { if(output) print $1} /^options/ {output=1} 
/^options_definitions/ {output=0}' | while read option; do conan build . -c 
tools.cmake.cmaketoolchain:generator=Ninja -b missing -o celix/*:${option}=True 
 -pr:b default -pr:h default -s:h build_type=${{ matrix.type }} -of  
${option}_dir -o celix/*:celix_cxx17=True -o celix/*:enable_ccache=True -o 
celix/*:celix_install_deprecated_api=True || exit 1; done
       - name: Remove Celix
         run: |
           conan remove -c celix/* 
@@ -85,12 +100,25 @@ jobs:
           path: ${{ env.CONAN_USER_HOME }}
           key: ${{ runner.os }}-builder-${{ env.cache-name }}-${{ 
hashFiles('conanfile.py') }}
           restore-keys: ${{ runner.os }}-builder-${{ env.cache-name }}-
+      - name: Prepare ccache timestamp
+        id: ccache_cache_timestamp
+        shell: cmake -P {0}
+        run: |
+          string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
+          message("::set-output name=timestamp::${current_date}")
+      - name: ccache Cache
+        uses: actions/cache@v1
+        with:
+          path: ${{ env.CCACHE_DIR }}
+          key: ${{ runner.os }}-ccache-Release-${{ 
steps.ccache_cache_timestamp.outputs.timestamp }}
+          restore-keys: |
+            ${{ runner.os }}-ccache-Release-
       - name: Create Celix
         run: |
-          conan create . -c tools.cmake.cmaketoolchain:generator=Ninja -b 
missing -o celix:build_all=True  -pr:b default -pr:h default -tf 
examples/conan_test_package -tbf test-build -o celix:celix_cxx17=True -o 
celix:celix_install_deprecated_api=True --require-override=libcurl/7.64.1 
--require-override=openssl/1.1.1s --require-override=zlib/1.2.13
+          conan create . -c tools.cmake.cmaketoolchain:generator=Ninja -b 
missing -o celix:build_all=True  -o celix:enable_ccache=True -pr:b default 
-pr:h default -tf examples/conan_test_package -tbf test-build -o 
celix:celix_cxx17=True -o celix:celix_install_deprecated_api=True 
--require-override=libcurl/7.64.1 --require-override=openssl/1.1.1s 
--require-override=zlib/1.2.13
       - name: Dependency Deduction Test
         run: |
-          conan inspect . -a options | awk 'BEGIN { FS="[\t:]+" } /build/ && 
!/build_all/ { print $1}' | while read option; do conan install . -c 
tools.cmake.cmaketoolchain:generator=Ninja -b missing -o celix:${option}=True  
-pr:b default -pr:h default -if ${option}_dir -o celix:celix_cxx17=True -o 
celix:celix_install_deprecated_api=True --require-override=libcurl/7.64.1 
--require-override=openssl/1.1.1s --require-override=zlib/1.2.13 || exit 1; 
conan build . -bf ${option}_dir || exit 1; done
+          conan inspect . -a options | awk 'BEGIN { FS="[\t:]+" } /build/ && 
!/build_all/ { print $1}' | while read option; do conan install . -c 
tools.cmake.cmaketoolchain:generator=Ninja -b missing -o celix:${option}=True  
-pr:b default -pr:h default -if ${option}_dir -o celix:celix_cxx17=True -o 
celix:celix_install_deprecated_api=True -o celix:enable_ccache=True 
--require-override=libcurl/7.64.1 --require-override=openssl/1.1.1s 
--require-override=zlib/1.2.13 || exit 1; conan build .  [...]
       - name: Remove Celix
         run: |
           conan remove -f 'celix/*'
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5aee5206..f659fb16 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -45,6 +45,16 @@ if (ENABLE_TESTING)
     endif()
 endif ()
 
+
+option(ENABLE_CCACHE "Enabled building with ccache" FALSE)
+if (ENABLE_CCACHE)
+    find_program(CCACHE_EXECUTABLE ccache)
+    if(CCACHE_EXECUTABLE)
+        set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE})
+        set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE})
+    endif()
+endif ()
+
 # Set C specific flags
 set(CMAKE_C_FLAGS "-D_GNU_SOURCE -std=gnu99 -fPIC ${CMAKE_C_FLAGS}")
 set(CMAKE_C_FLAGS "-Wall -Werror -Wformat -Wno-error=deprecated-declarations 
${CMAKE_C_FLAGS}")
diff --git a/conanfile.py b/conanfile.py
index 82542172..76ff527b 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -104,6 +104,7 @@ class CelixConan(ConanFile):
         "enable_cmake_warning_tests": False,
         "enable_testing_on_ci": False,
         "framework_curlinit": True,
+        "enable_ccache": False,
     }
     options = {
         "celix_err_buffer_size": ["ANY"],
@@ -155,6 +156,8 @@ class CelixConan(ConanFile):
         if self.options.enable_testing:
             self.test_requires("gtest/1.10.0")
             self.test_requires("cpputest/4.0")
+        if self.options.enable_ccache:
+            self.build_requires("ccache/4.8.2")
 
     def configure(self):
         # copy options to options, fill in defaults if not set

Reply via email to