Skip to content

Commit

Permalink
sccache: new package (ccache-like tool) (spack#47090)
Browse files Browse the repository at this point in the history
* sccache: add new package

* sccache: add older versions and minimum rust versions

* sccache: add more minimum rust versions

* sccache: add sccache executable and tag as build-tools

* sccache: add dist-server

* sccache: add determine_version and determin_variants

* sccache: add sccache-dist executable

* sccache: fix style

* Update var/spack/repos/builtin/packages/sccache/package.py

* In case building very old sccache <= 5 is not needed with these older rust version is not needed, they can be omitted.

* sccache: drop older versions

Co-authored-by: Bernhard Kaindl <[email protected]>

* sccache: add openssl dependency

* sccache: openssl is a linux only dependency?

---------

Co-authored-by: Bernhard Kaindl <[email protected]>
  • Loading branch information
pranav-sivaraman and bernhardkaindl authored Oct 19, 2024
1 parent dc160e3 commit adcd05b
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions var/spack/repos/builtin/packages/sccache/package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import os
import re

import spack.build_systems
from spack.package import *


class Sccache(CargoPackage):
"""Sccache is a ccache-like tool. It is used as a compiler wrapper and avoids
compilation when possible. Sccache has the capability to utilize caching in
remote storage environments, including various cloud storage options, or
alternatively, in local storage."""

homepage = "https://github.com/mozilla/sccache"
url = "https://github.com/mozilla/sccache/archive/refs/tags/v0.8.2.tar.gz"

tags = ["build-tools"]

executables = [r"^sccache$", r"^sscache-dist$"]

license("Apache-2.0", checked_by="pranav-sivaraman")

version("0.8.2", sha256="2b3e0ef8902fe7bcdcfccf393e29f4ccaafc0194cbb93681eaac238cdc9b94f8")

depends_on("[email protected]:", when="@0.8.2:")
depends_on("[email protected]:", when="@0.7.7:")
depends_on("[email protected]:") # for 0.6/0.7.1 and newer, but may work for even older versions.
depends_on("pkgconfig", type="build", when="platform=linux")

depends_on("openssl", when="platform=linux")

variant(
"dist-server",
default=False,
description="Enables the sccache-dist binary",
when="platform=linux",
)

@classmethod
def determine_version(cls, exe):
output = Executable(exe)("--version", output=str, error=str)
match = re.match(r"sccache (\S+)", output)
return match.group(1) if match else None

@classmethod
def determine_variants(cls, exes, version_str):
if any(os.path.basename(path) == "sccache-dist" for path in exes):
return "+dist-server"
else:
return "~dist-server"


class CargoBuilder(spack.build_systems.cargo.CargoBuilder):

@property
def build_args(self):
if self.spec.satisfies("+dist-server"):
return ["--features=dist-server"]

return []

0 comments on commit adcd05b

Please sign in to comment.