]> git.ipfire.org Git - thirdparty/ccache.git/log
thirdparty/ccache.git
4 months agofix: Fix rewriting MSVC /FI argument to relative when using base_dir
Joel Rosdahl [Thu, 19 Mar 2026 13:42:46 +0000 (14:42 +0100)] 
fix: Fix rewriting MSVC /FI argument to relative when using base_dir

MSVC's /FI option is special in that the compiler looks up a relative
file relative to the source file instead of the CWD.

4 months agofeat: Add install script for binary Linux releases
Joel Rosdahl [Wed, 18 Mar 2026 18:17:48 +0000 (19:17 +0100)] 
feat: Add install script for binary Linux releases

This makes it possible to install without having make(1) available.

4 months agoci: Add tar.gz archives for Linux binary releases
Joel Rosdahl [Mon, 16 Mar 2026 19:52:22 +0000 (20:52 +0100)] 
ci: Add tar.gz archives for Linux binary releases

4 months agofix: Avoid crash for `/Yc` without `/Fp`
Joel Rosdahl [Sun, 15 Mar 2026 14:36:32 +0000 (15:36 +0100)] 
fix: Avoid crash for `/Yc` without `/Fp`

(cherry picked from commit 0f98ffb366891f815719560a97293acc55fd42fa)

4 months agoenhance: Add util::Args::parse_response_file_content function
Joel Rosdahl [Sun, 15 Mar 2026 09:04:10 +0000 (10:04 +0100)] 
enhance: Add util::Args::parse_response_file_content function

4 months agofix: Increase robustness of manifest parsing
Joel Rosdahl [Sun, 15 Mar 2026 09:05:53 +0000 (10:05 +0100)] 
fix: Increase robustness of manifest parsing

4 months agofix: Sanity check original_size in util::zstd_decompress
Joel Rosdahl [Sat, 14 Mar 2026 12:33:41 +0000 (13:33 +0100)] 
fix: Sanity check original_size in util::zstd_decompress

If original_size 0, `&output[original_size]` will crash later (if
`output.size()` is also 0).

4 months agofix: Sanity check decompressed payload size
Joel Rosdahl [Wed, 11 Mar 2026 18:59:10 +0000 (19:59 +0100)] 
fix: Sanity check decompressed payload size

4 months agofix: Fix return type for CacheEntry::Header::uncompressed_payload_size
Joel Rosdahl [Tue, 10 Mar 2026 20:50:07 +0000 (21:50 +0100)] 
fix: Fix return type for CacheEntry::Header::uncompressed_payload_size

Returning uint32_t instead of uint64_t seems like an oversight.

4 months agotest: Don't check `.ltrans0.ltrans.su` files in `-flto` tests (#1704)
Joel Rosdahl [Sat, 14 Mar 2026 12:06:18 +0000 (13:06 +0100)] 
test: Don't check `.ltrans0.ltrans.su` files in `-flto` tests (#1704)

Different compilers produce different stack-usage files when linking
object files compiled with `-fstack-usage -flto`. Since ccache does not
cache linking anyway, skip checking the linking results to avoid
compiler-specific expectations.

Fixes #1699.

4 months agofix: LTO is disabled if `-fno-lto` is used (#1700)
Kristian Sloth Lauszus [Sat, 14 Mar 2026 09:50:26 +0000 (10:50 +0100)] 
fix: LTO is disabled if `-fno-lto` is used (#1700)

If `-flto` is followered by `-fno-lto`, then LTO will be disabled

On the other hand if `-fno-lto` is followered by `-flto`, then LTO will be enabled

4 months agotest: Fix remote_helper test error for long $PWD
Joel Rosdahl [Thu, 12 Mar 2026 07:31:19 +0000 (08:31 +0100)] 
test: Fix remote_helper test error for long $PWD

Use relative Unix socket paths in tests to avoid overflowing the Unix
socket name length limit when $PWD is long.

Fixes #1697.

4 months agochore: Improve log messages for Unix socket connect failure
Joel Rosdahl [Thu, 12 Mar 2026 07:24:32 +0000 (08:24 +0100)] 
chore: Improve log messages for Unix socket connect failure

Related to #1697.

4 months agoci: Add macOS 15/26 builds
Joel Rosdahl [Wed, 11 Mar 2026 20:21:44 +0000 (21:21 +0100)] 
ci: Add macOS 15/26 builds

Also bump Xcode version for macOS 14.

4 months agochore: Improve log messages for Unix socket connect failure
Joel Rosdahl [Wed, 11 Mar 2026 19:23:39 +0000 (20:23 +0100)] 
chore: Improve log messages for Unix socket connect failure

Related to #1697.

4 months agofix: Fix DEFER usage
Joel Rosdahl [Wed, 11 Mar 2026 19:15:56 +0000 (20:15 +0100)] 
fix: Fix DEFER usage

4 months agofix: Fix restoring of timestamps in recompressor
Joel Rosdahl [Wed, 11 Mar 2026 19:05:11 +0000 (20:05 +0100)] 
fix: Fix restoring of timestamps in recompressor

Fixes incorrect fix in 86af29da704f0e879c55230aad9a22d5df330bc3.

4 months agochore: Use typedefs to access ::type (#1695)
Gregor Jasny [Wed, 11 Mar 2026 19:17:01 +0000 (20:17 +0100)] 
chore: Use typedefs to access ::type (#1695)

4 months agochore: Update authors
Joel Rosdahl [Mon, 9 Mar 2026 20:29:49 +0000 (21:29 +0100)] 
chore: Update authors

(cherry picked from commit 5a1399943d6f145960108fbd27f125ec39569a28)

4 months agochore: Update news
Joel Rosdahl [Mon, 9 Mar 2026 20:26:22 +0000 (21:26 +0100)] 
chore: Update news

(cherry picked from commit 9dc6847f9e704519787521903cdade28fd9c298c)

4 months agofix: Do not look for .su and .ci output files when LTO is used (#1693)
Kristian Sloth Lauszus [Mon, 9 Mar 2026 20:06:57 +0000 (21:06 +0100)] 
fix: Do not look for .su and .ci output files when LTO is used (#1693)

When `-flto` is used the .su and .ci output files are not generated during compilation, instead they are generated during link time

This means that ccache can simply skip those files when `-fstack-usage` and `-fcallgraph-info` are used in combination with the `-flto` flag

See: https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html#index-fcallgraph-info

4 months agofix: Pass template argument to mktemp(1) for portability to macOS/BSD
Joel Rosdahl [Mon, 9 Mar 2026 19:48:14 +0000 (20:48 +0100)] 
fix: Pass template argument to mktemp(1) for portability to macOS/BSD

Fixes #1692.

4 months agobuild: Use correct pandoc binary
Joel Rosdahl [Mon, 9 Mar 2026 19:38:49 +0000 (20:38 +0100)] 
build: Use correct pandoc binary

4 months agochore: Remove obsolete condition (#1694)
Gregor Jasny [Mon, 9 Mar 2026 20:02:15 +0000 (21:02 +0100)] 
chore: Remove obsolete condition (#1694)

4 months agobuild: Use CMake knowledge about helper locations (#1689)
Gregor Jasny [Mon, 9 Mar 2026 19:21:09 +0000 (20:21 +0100)] 
build: Use CMake knowledge about helper locations (#1689)

4 months agofix: Restore atime when recompressor fails to read a file
Joel Rosdahl [Sun, 8 Mar 2026 18:00:42 +0000 (19:00 +0100)] 
fix: Restore atime when recompressor fails to read a file

4 months agofix: Handle extensionless -x assembler inputs
Joel Rosdahl [Sun, 8 Mar 2026 16:09:36 +0000 (17:09 +0100)] 
fix: Handle extensionless -x assembler inputs

Regression in 5da91eb2b4f4cd09a5669f0aebfc534b514826ce.

Fixes #1691.

4 months agofix: Fix crash when finding storage helper next to the ccache executable
Joel Rosdahl [Sun, 8 Mar 2026 12:32:28 +0000 (13:32 +0100)] 
fix: Fix crash when finding storage helper next to the ccache executable

4 months agofix: Use OS-specific methods to reliably find the ccache executable path
Joel Rosdahl [Sun, 8 Mar 2026 12:19:11 +0000 (13:19 +0100)] 
fix: Use OS-specific methods to reliably find the ccache executable path

argv[0] is not guaranteed to reflect the actual location of the
executable (e.g. when invoked via a symlink). Use platform-specific APIs
instead. Fall back to the argv[0]-based approach if the OS method fails.

4 months agofix: Search for storage helper in libexec before PATH
Joel Rosdahl [Sat, 7 Mar 2026 21:42:11 +0000 (22:42 +0100)] 
fix: Search for storage helper in libexec before PATH

Previously ccache searched for storage helpers in PATH before libexec
directories. The idea was that users could easily override a
system-installed helper by placing a newer version earlier in PATH.

However, this also meant that PATH was consulted even when a libexec
directory had been explicitly configured, or when the helper was
installed in the intended system location. In these cases, helpers found
in PATH could take precedence over the expected libexec helper.

Since installing helpers in a libexec directory is the intended
deployment model, prefer libexec locations over PATH.

4 months agofix: Fix build with HAVE_UTIMES but without HAVE_UTIMENSAT
Joel Rosdahl [Fri, 6 Mar 2026 20:16:04 +0000 (21:16 +0100)] 
fix: Fix build with HAVE_UTIMES but without HAVE_UTIMENSAT

Fixes #1690.

4 months agoci: Adapt generate-release-notes to new Linux binary release archives
Joel Rosdahl [Thu, 5 Mar 2026 15:15:42 +0000 (16:15 +0100)] 
ci: Adapt generate-release-notes to new Linux binary release archives

4 months agochore: Update authors v4.13
Joel Rosdahl [Thu, 5 Mar 2026 14:14:51 +0000 (15:14 +0100)] 
chore: Update authors

4 months agochore: Update NEWS
Joel Rosdahl [Thu, 5 Mar 2026 14:12:26 +0000 (15:12 +0100)] 
chore: Update NEWS

4 months agochore: Add GitHub user names to NEWS
Joel Rosdahl [Thu, 5 Mar 2026 14:11:20 +0000 (15:11 +0100)] 
chore: Add GitHub user names to NEWS

5 months agobuild: Only inject config.h for C and C++, not assembler
Joel Rosdahl [Sun, 1 Mar 2026 14:45:46 +0000 (15:45 +0100)] 
build: Only inject config.h for C and C++, not assembler

Fixes #1599.

5 months agofeat: Add support for directory-specific configuration file
Joel Rosdahl [Thu, 26 Feb 2026 10:40:43 +0000 (11:40 +0100)] 
feat: Add support for directory-specific configuration file

Ccache now searches for a ccache.conf file (separate from the
cache-specific config) in the current working directory and its parent
directories. This allows per-project configuration without modifying the
user's cache-specific config.

Directory config has higher priority than other config files but lower
priority than environment variables.

The search stops when reaching a ceiling_dirs entry (default: $HOME), a
ceiling_marker (default: .git), a mount point or a directory owned by
another user. A found file is accepted only if it is owned by the
effective user and not world-writable.

For security, unsafe settings are rejected by default, where unsafe
means affecting which commands to execute, which files to write and
which network connections to make. They are only allowed when the
directory config file is under a trusted path listed in safe_dirs.

Closes #1393.

5 months agodocs: Define path list separator in one place
Joel Rosdahl [Thu, 26 Feb 2026 10:49:23 +0000 (11:49 +0100)] 
docs: Define path list separator in one place

5 months agochore: Add temporary Emacs files to .gitignore
Joel Rosdahl [Thu, 26 Feb 2026 09:16:34 +0000 (10:16 +0100)] 
chore: Add temporary Emacs files to .gitignore

5 months agoenhance: Add util::DirEntry::uid function
Joel Rosdahl [Sat, 21 Feb 2026 13:35:08 +0000 (14:35 +0100)] 
enhance: Add util::DirEntry::uid function

5 months agorefactor: Sort Config methods and variables
Joel Rosdahl [Sun, 22 Feb 2026 18:55:44 +0000 (19:55 +0100)] 
refactor: Sort Config methods and variables

5 months agorefactor: Verify absolute paths in set_base_dirs instead of after
Joel Rosdahl [Sat, 21 Feb 2026 13:33:21 +0000 (14:33 +0100)] 
refactor: Verify absolute paths in set_base_dirs instead of after

5 months agochore: Remove check for (on POSIX) mandatory spawn.h header
Joel Rosdahl [Wed, 18 Feb 2026 19:51:17 +0000 (20:51 +0100)] 
chore: Remove check for (on POSIX) mandatory spawn.h header

5 months agoci: Stop building 32-bit Windows releases
Joel Rosdahl [Mon, 16 Feb 2026 19:22:25 +0000 (20:22 +0100)] 
ci: Stop building 32-bit Windows releases

I see no reason to continue releasing prebuilt 32-bit binaries, so let's
stop doing that and see if users agree.

5 months agoperf: Fix performance regression in process_preprocessed_file
Joel Rosdahl [Sun, 15 Feb 2026 17:49:13 +0000 (18:49 +0100)] 
perf: Fix performance regression in process_preprocessed_file

4b79f9ec35b1de186e924e3f9f467ad1504b523e introduced std::string_view
construction of potentially very large strings in
process_preprocessed_file.

5 months agochore: Require Clang >= 12
Joel Rosdahl [Sun, 8 Feb 2026 19:10:41 +0000 (20:10 +0100)] 
chore: Require Clang >= 12

5 months agochore: Fix typo
Joel Rosdahl [Sat, 7 Feb 2026 21:30:41 +0000 (22:30 +0100)] 
chore: Fix typo

Fixes typos introduced in 51466ac40eeb57a0d9b0edbdbc9f40ed2d753b7a.

5 months agorefactor: Improve PRINT macro to accept format string without arguments
Joel Rosdahl [Sat, 7 Feb 2026 18:11:52 +0000 (19:11 +0100)] 
refactor: Improve PRINT macro to accept format string without arguments

5 months agorefactor: Improve LOG macro to accept format string without arguments
Joel Rosdahl [Mon, 2 Feb 2026 20:35:14 +0000 (21:35 +0100)] 
refactor: Improve LOG macro to accept format string without arguments

5 months agorefactor: Generalize "already preprocessed" compiler language slightly (#1684)
Joel Rosdahl [Thu, 12 Feb 2026 20:05:30 +0000 (21:05 +0100)] 
refactor: Generalize "already preprocessed" compiler language slightly (#1684)

- Rename ArgsInfo::direct_i_file to preprocess_input_file, since that's
  what it now means.
- Add "ir" as a language and let "-fthinlto-index=" use that language
  implicitly instead of piggybacking on "assembler".

5 months agofeat: Support caching of distributed ThinLTO for Clang (#1683)
zcfh [Wed, 11 Feb 2026 20:05:44 +0000 (04:05 +0800)] 
feat: Support caching of distributed ThinLTO for Clang (#1683)

5 months agorefactor: Remove now unnecessary util::{starts,ends}_with
Joel Rosdahl [Wed, 4 Feb 2026 20:14:53 +0000 (21:14 +0100)] 
refactor: Remove now unnecessary util::{starts,ends}_with

5 months agochore: Update copyright years
Joel Rosdahl [Sat, 7 Feb 2026 14:21:01 +0000 (15:21 +0100)] 
chore: Update copyright years

(cherry picked from commit ec039169a4d93f7bae3f3f99762bd0248c9d3bd5)

5 months agochore: Update authors
Joel Rosdahl [Sat, 7 Feb 2026 14:20:21 +0000 (15:20 +0100)] 
chore: Update authors

(cherry picked from commit 1a0c691375ead5eb13b39090de6da8699bc0ae9c)

5 months agochore: Update NEWS
Joel Rosdahl [Sat, 7 Feb 2026 14:19:47 +0000 (15:19 +0100)] 
chore: Update NEWS

(cherry picked from commit 1d35536287570a2033978e5abb98e9e5e5c76b20)

5 months agofix(cmake): Enable assembler compiler conditionally (#1678)
Steffen [Sat, 7 Feb 2026 08:50:14 +0000 (08:50 +0000)] 
fix(cmake): Enable assembler compiler conditionally (#1678)

CMake will call `enable_language` for all languages passed to `project`.
This deduplicates the work and only enables one assembler depending on
the platform.

5 months agorefactor: Remove no longer needed FMT_STRING
Joel Rosdahl [Tue, 3 Feb 2026 19:27:01 +0000 (20:27 +0100)] 
refactor: Remove no longer needed FMT_STRING

fmt checks format arguments without the need of FMT_STRING when using
C++20.

5 months agorefactor: Use C++20 .contains(...) instead of .find() != .end()
Joel Rosdahl [Tue, 3 Feb 2026 19:26:56 +0000 (20:26 +0100)] 
refactor: Use C++20 .contains(...) instead of .find() != .end()

5 months agorefactor: Use C++20 erase_if instead of erase+remove_if
Joel Rosdahl [Tue, 3 Feb 2026 19:26:53 +0000 (20:26 +0100)] 
refactor: Use C++20 erase_if instead of erase+remove_if

5 months agorefactor: Use std::span instead of nonstd::span
Joel Rosdahl [Tue, 3 Feb 2026 19:26:51 +0000 (20:26 +0100)] 
refactor: Use std::span instead of nonstd::span

5 months agochore: Bump required compiler versions
Joel Rosdahl [Tue, 3 Feb 2026 19:26:45 +0000 (20:26 +0100)] 
chore: Bump required compiler versions

5 months agobuild: Require a C++-20 compiler
Joel Rosdahl [Tue, 3 Feb 2026 19:26:38 +0000 (20:26 +0100)] 
build: Require a C++-20 compiler

5 months agobuild: Add missing includes
Joel Rosdahl [Tue, 3 Feb 2026 18:04:54 +0000 (19:04 +0100)] 
build: Add missing includes

5 months agobuild: Disable Clang-Tidy modernize-loop-convert check
Joel Rosdahl [Tue, 3 Feb 2026 18:51:03 +0000 (19:51 +0100)] 
build: Disable Clang-Tidy modernize-loop-convert check

5 months agoci: Use Clang-Tidy 13
Joel Rosdahl [Tue, 3 Feb 2026 18:23:11 +0000 (19:23 +0100)] 
ci: Use Clang-Tidy 13

6 months agobuild: Disable legacy support for downloaded zstd
Joel Rosdahl [Sat, 31 Jan 2026 09:54:32 +0000 (10:54 +0100)] 
build: Disable legacy support for downloaded zstd

This avoids compiling zstd's lib/legacy/zstd_v01.c file which is seen to
trigger -Wmaybe-uninitialized warnings.

Closes #1679.

6 months agoperf: Use copy_file_range to copy files if available (#1680)
Oleg Sidorkin [Sat, 31 Jan 2026 09:46:13 +0000 (12:46 +0300)] 
perf: Use copy_file_range to copy files if available (#1680)

6 months agofix: Rewrite 'inlined from' messages in absolute_paths_in_stderr (#1676)
Enrico Seiler [Tue, 27 Jan 2026 18:39:41 +0000 (19:39 +0100)] 
fix: Rewrite 'inlined from' messages in absolute_paths_in_stderr (#1676)

6 months agochore: Improve GitHub issue templates
Joel Rosdahl [Tue, 27 Jan 2026 18:23:10 +0000 (19:23 +0100)] 
chore: Improve GitHub issue templates

6 months agochore: Improve GitHub issue templates
Joel Rosdahl [Tue, 27 Jan 2026 18:17:48 +0000 (19:17 +0100)] 
chore: Improve GitHub issue templates

6 months agoMerge pull request #1672 from jrosdahl/crsh
Joel Rosdahl [Sun, 25 Jan 2026 10:04:44 +0000 (11:04 +0100)] 
Merge pull request #1672 from jrosdahl/crsh

Add remote storage helper support.

6 months agofeat: Add support for remote storage helpers 1672/head
Joel Rosdahl [Sun, 18 Jan 2026 13:48:06 +0000 (14:48 +0100)] 
feat: Add support for remote storage helpers

This commit adds support for communicating with a remote storage server
using a long-lived local helper process, started by ccache on demand.
The helper process can keep connections alive (thus amortizing the
session setup cost), and knowledge about remote storage protocols can be
kept out of the ccache code base, making it possible to develop and
release support for different storage server protocols independently.

The storage helper listens to a Unix-domain socket on POSIX systems and
a named pipe on Windows systems. Ccache communicates with it using a
custom IPC protocol, described in doc/remote_storage_helper_spec.md. The
helper is named ccache-storage-<scheme> (e.g. ccache-storage-https) and
can be placed in $PATH, next to the ccache executable or in ccache's
libexec directory. Storage helpers time terminate after a while on
inactivity.

Built-in support for http and redis is kept for now but will likely be
removed in a future ccache release.

- The syntax of the remote_storage/CCACHE_REMOTE_STORAGE configuration
  option has been improved (in a backward compatible way): What used to
  be called "attributes" are now split into "properties" and "custom
  attributes", where properties are things that ccache knows about and
  acts on (e.g. read-only and shards) while attributes are custom
  key-value pairs sent to the helper without ccache knowing or caring
  about them. Syntax: A property is "key=value", a custom attribute is
  "@key=value".
- Properties/attributes are now separated by whitespace instead of pipe
  characters.

New remote storage properties:

- data-timeout: Timeout for send/receive data transfer. Resets whenever
  data is received or can be sent. Default: 1s.
- request-timeout: Timeout for the whole request. Default: 10s.
- idle-timeout: Timeout for the helper process to wait before exiting
  after client inactivity (0s: stay up indefinitely). Default: 10m.
- helper: Override which storage helper to spawn (either a filename or a
  full path). This is mainly useful when developing or testing new
  helpers.

The new command line option "--stop-storage-helpers" can be used to ask
spawned storage helpers to stop immediately.

A new "libexec_dirs" configuration option is available for overriding
the default libexec determined at build time.

6 months agofeat: Add simple storage helper implementation for integration tests
Joel Rosdahl [Thu, 23 Oct 2025 16:07:34 +0000 (18:07 +0200)] 
feat: Add simple storage helper implementation for integration tests

The helper keeps stored values in memory and only handles one client
connection at a time.

6 months agofeat: Add storage test client
Joel Rosdahl [Thu, 23 Oct 2025 16:07:16 +0000 (18:07 +0200)] 
feat: Add storage test client

6 months agoenhance: Add remote storage client class
Joel Rosdahl [Thu, 23 Oct 2025 16:06:07 +0000 (18:06 +0200)] 
enhance: Add remote storage client class

6 months agoenhance: Implement helper classes for storage helper IPC
Joel Rosdahl [Mon, 20 Oct 2025 19:48:34 +0000 (21:48 +0200)] 
enhance: Implement helper classes for storage helper IPC

6 months agofeat: Remove R/M suffix from files in local storage
Joel Rosdahl [Sat, 25 Oct 2025 21:04:02 +0000 (23:04 +0200)] 
feat: Remove R/M suffix from files in local storage

In addition to the previous commit, this commit make things even more
consistent with remote storage by changing file names in local storage:

1. ${digest}R     -> ${digest}
2. ${digest}M     -> ${digest}
3. ${digest}${n}W -> ${digest}_${nn}

(${n} is file number 0-9, ${nn} is file number in two-digit hex form.)

The original reason for adding R and M suffixes was to simplify
implementation of local cleanup and recompression somewhat (and also
discoverability in tests), but I think that consistency trumps this.

6 months agofeat: Use base16 encoding for all hash digest keys
Joel Rosdahl [Sat, 25 Oct 2025 17:21:09 +0000 (19:21 +0200)] 
feat: Use base16 encoding for all hash digest keys

This reverts the mixed encoding scheme introduced in commit 47cb00f7 ("Encode
hash digests as 4 base16 digits + 29 base32hex digits") back to pure base16
encoding.

Background: The mixed base16/base32hex encoding was introduced to reduce
filename lengths slightly, thereby reducing the number of system calls when
scanning local cache directories. At the time, "the effect is very small but
there is no real downside".

However, with the introduction of remote storage helpers implemented outside
ccache's code base, a downside has emerged: key encoding inconsistency. Remote
storage helpers must now either:

1. reimplement ccache's custom encoding algorithm to maintain key consistency
   between the remote storage and ccache's local storage (and logs), or
2. use standard base16 encoding, resulting in different key representations
   between ccache and the remote storage.

By standardizing on base16 encoding throughout, we ensure that:

- remote storage helpers can use simple, standard base16 encoding
- keys are represented identically in ccache's local storage and remote storage
- external implementations don't need to replicate custom encoding logic
- debugging and key correlation across systems is straightforward

The minor filesystem performance benefit of shorter filenames is outweighed by
the ecosystem benefits of a simple, standard encoding scheme.

Local storage will for now be backward compatible: to avoid invalidating
existing cache entries, ccache will write in the new format but will try
both the new and the legacy format on cache lookup. The legacy format is
also still used for hashes that are part of the input hash. When some
other input hash material is changed (which invalidates cache entries
anyway) in the future, we'll drop the legacy format completely.

6 months agodocs: Add first version of remote storage helper spec
Joel Rosdahl [Sat, 4 Oct 2025 12:27:41 +0000 (14:27 +0200)] 
docs: Add first version of remote storage helper spec

6 months agoci: Add Linux binary releases statically linked with musl
Joel Rosdahl [Sat, 24 Jan 2026 15:29:28 +0000 (16:29 +0100)] 
ci: Add Linux binary releases statically linked with musl

Closes #1665.

6 months agochore: Upgrade alpine Dockerfile to alpine:3.23
Joel Rosdahl [Sat, 24 Jan 2026 15:17:55 +0000 (16:17 +0100)] 
chore: Upgrade alpine Dockerfile to alpine:3.23

6 months agofeat: Handle Apple Clang -index-unit-output-path option
Joel Rosdahl [Sat, 24 Jan 2026 14:25:19 +0000 (15:25 +0100)] 
feat: Handle Apple Clang -index-unit-output-path option

We can't cache -index-unit-output-path, so fall back to running the
compiler unless clang_index_store sloppiness is requested.

Related to discussion #1670.

6 months agoRevert "enhance: Add util::SimpleJsonParser"
Joel Rosdahl [Tue, 20 Jan 2026 18:33:17 +0000 (19:33 +0100)] 
Revert "enhance: Add util::SimpleJsonParser"

This reverts commit 74e48c17ed4c23aac378c6f598d38d62be66001d.

The JSON parser is no longer needed since
496585daf92f4bb7dee22725c9f3161bdde184f2 has been reverted.

6 months agoRevert "feat(msvc): Use /sourceDependencies to extract include file paths"
Joel Rosdahl [Tue, 20 Jan 2026 18:10:13 +0000 (19:10 +0100)] 
Revert "feat(msvc): Use /sourceDependencies to extract include file paths"

This reverts commit 496585daf92f4bb7dee22725c9f3161bdde184f2.

Using MSVC's source dependency file for extracting header files didn't
work out:

- The header filenames are always absolute paths, so cache entries
  cannot be shared between directories even when using relative paths on
  the command line.
- The header filenames are normalized to lowercase, making it harder to
  match them against things like base_dir.

Fixes #1662.

6 months agofix: Fix CHECK_LIB_CALL to properly handle functions that set errno
Joel Rosdahl [Wed, 14 Jan 2026 18:42:42 +0000 (19:42 +0100)] 
fix: Fix CHECK_LIB_CALL to properly handle functions that set errno

6 months agorefactor: Improve util::add_exe_suffix signature
Joel Rosdahl [Tue, 13 Jan 2026 20:08:10 +0000 (21:08 +0100)] 
refactor: Improve util::add_exe_suffix signature

6 months agoenhance: Add Config::get_xdg_runtime_tmp_dir
Joel Rosdahl [Tue, 13 Jan 2026 20:22:30 +0000 (21:22 +0100)] 
enhance: Add Config::get_xdg_runtime_tmp_dir

6 months agofix: Avoid leaking inode cache file descriptor to executed programs
Joel Rosdahl [Mon, 12 Jan 2026 20:28:28 +0000 (21:28 +0100)] 
fix: Avoid leaking inode cache file descriptor to executed programs

6 months agofix: Only set UNCACHED_ERR_FD when executing the compiler
Joel Rosdahl [Mon, 12 Jan 2026 20:28:04 +0000 (21:28 +0100)] 
fix: Only set UNCACHED_ERR_FD when executing the compiler

6 months agochore: Fix references to authors.adoc
Joel Rosdahl [Tue, 13 Jan 2026 16:24:13 +0000 (17:24 +0100)] 
chore: Fix references to authors.adoc

7 months agochore: Remove references to no longer used Gitter channel
Joel Rosdahl [Sun, 28 Dec 2025 15:13:00 +0000 (16:13 +0100)] 
chore: Remove references to no longer used Gitter channel

7 months agofix: Handle NVCC long option alternatives to -M/-MD/-MF/-MM/-MMD/-MT
Joel Rosdahl [Sun, 21 Dec 2025 16:07:37 +0000 (17:07 +0100)] 
fix: Handle NVCC long option alternatives to -M/-MD/-MF/-MM/-MMD/-MT

Fixes #1663.

7 months agotest: Fix -march=native test to work on hybrid CPU systems
Joel Rosdahl [Mon, 15 Dec 2025 17:19:27 +0000 (18:19 +0100)] 
test: Fix -march=native test to work on hybrid CPU systems

On a hybrid CPU system (e.g. Intel with performance and efficient
cores), -march=native expansion can be different on different core types
and thus fail the "-march=native, no CWD in input hash" test if the
first and second compilation end up on different core types. Fix this by
just verifying that CWD doesn't appear in the expansion.

7 months agofix: Avoid hashing CWD parts of -march=native expansion for Clang
Joel Rosdahl [Tue, 9 Dec 2025 18:19:17 +0000 (19:19 +0100)] 
fix: Avoid hashing CWD parts of -march=native expansion for Clang

Fixes #1658.

7 months agofix: Look for correct -march=native expansion line on Windows
Joel Rosdahl [Tue, 9 Dec 2025 19:14:57 +0000 (20:14 +0100)] 
fix: Look for correct -march=native expansion line on Windows

7 months agoci: Remove some less important CI jobs
Joel Rosdahl [Tue, 9 Dec 2025 18:40:59 +0000 (19:40 +0100)] 
ci: Remove some less important CI jobs

Testing large parts of the test matrix is valuable. But at the same
time, lots of CI jobs consume lots of resources. Let's find a better
balance.

7 months agotest: Fix directory check for Windows paths
Joel Rosdahl [Tue, 9 Dec 2025 18:14:53 +0000 (19:14 +0100)] 
test: Fix directory check for Windows paths

msys2 jobs have for some strange reason started to fail, so msys2's pwd
must have started returning full pathname including ":" on Windows.

7 months agoenhance: Improve find_executable
Joel Rosdahl [Sat, 6 Dec 2025 13:51:40 +0000 (14:51 +0100)] 
enhance: Improve find_executable

7 months agorefactor: Rename k_redacted_password to k_redacted_secret
Joel Rosdahl [Sat, 22 Nov 2025 14:55:58 +0000 (15:55 +0100)] 
refactor: Rename k_redacted_password to k_redacted_secret

7 months agoenhance: Add util::Timer::reset method
Joel Rosdahl [Tue, 25 Nov 2025 08:06:17 +0000 (09:06 +0100)] 
enhance: Add util::Timer::reset method