From fc2a1687411a5846e90f6a6fd6c83b27483f2b4d Mon Sep 17 00:00:00 2001 From: Oleg Sidorkin Date: Mon, 25 Apr 2022 14:31:47 +0300 Subject: [PATCH] Add devel/ccache4 --- Mk/bsd.ccache.mk | 2 +- Mk/bsd.default-versions.mk | 4 +- devel/Makefile | 1 + devel/ccache-memcached-static/Makefile | 2 +- devel/ccache-memcached/Makefile | 2 +- devel/ccache-static/Makefile | 2 +- devel/ccache/Makefile | 2 +- devel/ccache4/Makefile | 101 ++++++++++++++++++ devel/ccache4/distinfo | 3 + devel/ccache4/files/ccache-update-links.sh.in | 72 +++++++++++++ devel/ccache4/files/ccache_clean.in | 71 ++++++++++++ devel/ccache4/files/pkg-message.in | 10 ++ devel/ccache4/files/world-ccache.in | 9 ++ devel/ccache4/pkg-descr | 6 ++ devel/ccache4/pkg-plist | 9 ++ 15 files changed, 290 insertions(+), 6 deletions(-) create mode 100644 devel/ccache4/Makefile create mode 100644 devel/ccache4/distinfo create mode 100644 devel/ccache4/files/ccache-update-links.sh.in create mode 100755 devel/ccache4/files/ccache_clean.in create mode 100644 devel/ccache4/files/pkg-message.in create mode 100644 devel/ccache4/files/world-ccache.in create mode 100644 devel/ccache4/pkg-descr create mode 100644 devel/ccache4/pkg-plist diff --git a/Mk/bsd.ccache.mk b/Mk/bsd.ccache.mk index deb3997a68a0..6d94f90d7508 100644 --- a/Mk/bsd.ccache.mk +++ b/Mk/bsd.ccache.mk @@ -83,7 +83,7 @@ CFLAGS+= -fdebug-prefix-map=${WRKSRC}=. # Avoid depends loops between ccache and pkg . if !defined(NO_CCACHE_DEPEND) && \ ${PKGORIGIN} != ${PKG_ORIGIN} -BUILD_DEPENDS+= ${CCACHE_BIN}:devel/ccache +BUILD_DEPENDS+= ${CCACHE_BIN}:devel/${CCACHE_DEFAULT} . endif . if exists(${CCACHE_WRAPPER_PATH}) diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk index 0b0d0d37d296..581255bd4d4f 100644 --- a/Mk/bsd.default-versions.mk +++ b/Mk/bsd.default-versions.mk @@ -17,7 +17,7 @@ _INCLUDE_BSD_DEFAULT_VERSIONS_MK= yes LOCALBASE?= /usr/local -. for lang in APACHE BDB COROSYNC EMACS FIREBIRD FORTRAN FPC GCC \ +. for lang in APACHE BDB CCACHE COROSYNC EMACS FIREBIRD FORTRAN FPC GCC \ GHOSTSCRIPT GL GO IMAGEMAGICK JAVA LAZARUS LIBRSVG2 LINUX LLVM \ LUA LUAJIT MONO MYSQL NINJA NODEJS OPENLDAP PERL5 PGSQL PHP PYTHON \ PYTHON2 PYTHON3 RUBY RUST SAMBA SSL TCLTK VARNISH @@ -36,6 +36,8 @@ ${_l:tu}_DEFAULT= ${lang:C/.*=//g} APACHE_DEFAULT?= 2.4 # Possible values: 5, 18 BDB_DEFAULT?= 5 +# Possible values: ccache ccache-memcached ccache-memcached-static ccache-static ccache4 +CCACHE_DEFAULT?= ccache # Possible values: 2, 3 COROSYNC_DEFAULT?= 2 # Possible_values: full canna nox devel_full devel_nox diff --git a/devel/Makefile b/devel/Makefile index 0f833ed637c3..0dbfaf4fb83b 100644 --- a/devel/Makefile +++ b/devel/Makefile @@ -339,6 +339,7 @@ SUBDIR += ccache-memcached SUBDIR += ccache-memcached-static SUBDIR += ccache-static + SUBDIR += ccache4 SUBDIR += cccc SUBDIR += ccdoc SUBDIR += ccls diff --git a/devel/ccache-memcached-static/Makefile b/devel/ccache-memcached-static/Makefile index 295bef881772..eaca17a490c1 100644 --- a/devel/ccache-memcached-static/Makefile +++ b/devel/ccache-memcached-static/Makefile @@ -4,6 +4,6 @@ MASTERDIR= ${.CURDIR}/../ccache-memcached OPTIONS_SLAVE= STATIC -CONFLICTS_INSTALL= ccache ccache-memcached ccache-static +CONFLICTS_INSTALL= ccache ccache-memcached ccache-static ccache4 .include "${MASTERDIR}/Makefile" diff --git a/devel/ccache-memcached/Makefile b/devel/ccache-memcached/Makefile index b37fad0e6f0b..bdae7c87d664 100644 --- a/devel/ccache-memcached/Makefile +++ b/devel/ccache-memcached/Makefile @@ -16,7 +16,7 @@ LICENSE_FILE= ${WRKSRC}/GPL-3.0.txt USE_GITHUB= yes GH_TAGNAME= f7712082106bef085515f86ae47e7dbbd2a48b57 -CONFLICTS_INSTALL?= ccache ccache-static ccache-memcached-static +CONFLICTS_INSTALL?= ccache ccache-static ccache-memcached-static ccache4 GNU_CONFIGURE= yes diff --git a/devel/ccache-static/Makefile b/devel/ccache-static/Makefile index 464c6e19177c..64a9bc059840 100644 --- a/devel/ccache-static/Makefile +++ b/devel/ccache-static/Makefile @@ -4,6 +4,6 @@ MASTERDIR= ${.CURDIR}/../ccache OPTIONS_SLAVE= STATIC -CONFLICTS_INSTALL= ccache ccache-memcached ccache-memcached-static +CONFLICTS_INSTALL= ccache ccache-memcached ccache-memcached-static ccache4 .include "${MASTERDIR}/Makefile" diff --git a/devel/ccache/Makefile b/devel/ccache/Makefile index 99c902e6399f..97ca1446269d 100644 --- a/devel/ccache/Makefile +++ b/devel/ccache/Makefile @@ -12,7 +12,7 @@ WWW= https://ccache.samba.org/ LICENSE= GPLv3+ LICENSE_FILE= ${WRKSRC}/GPL-3.0.txt -CONFLICTS_INSTALL?= ccache-static ccache-memcached ccache-memcached-static +CONFLICTS_INSTALL?= ccache-static ccache-memcached ccache-memcached-static ccache4 GNU_CONFIGURE= yes diff --git a/devel/ccache4/Makefile b/devel/ccache4/Makefile new file mode 100644 index 000000000000..cdb119bcf0b3 --- /dev/null +++ b/devel/ccache4/Makefile @@ -0,0 +1,101 @@ +# Created by: Dominic Marks + +PORTNAME= ccache +PORTVERSION= 4.8 +DISTVERSIONPREFIX= v +CATEGORIES= devel + +MAINTAINER= bdrewery@FreeBSD.org +COMMENT= Tool to minimize the compile time of C/C++ programs + +LICENSE= GPLv3+ +LICENSE_FILE= ${WRKSRC}/GPL-3.0.txt + +USES= cmake:noninja pathfix shebangfix compiler:c++11-lang +CONFLICTS_INSTALL?= ccache ccache-static \ + ccache-memcached ccache-memcached-static + +PORTDOCS= AUTHORS.adoc AUTHORS.html MANUAL.html MANUAL.adoc \ + NEWS.adoc NEWS.html + +USE_GITHUB= yes +SUB_FILES= world-ccache ccache-update-links.sh ccache_clean +# Prevent infinite recursion. +NO_CCACHE_DEPEND= yes + +LIB_DEPENDS+= libzstd.so:archivers/zstd + +# /bin/bash -> /bin/sh to reduce tests dep. +SHEBANG_FILES= test/* +SHEBANG_GLOB= *.sh *.bash +bash_CMD= /bin/sh + +CMAKE_OFF= WARNINGS_AS_ERRORS \ + ENABLE_IPO \ + ZSTD_FROM_INTERNET \ + ENABLE_TRACING \ + REDIS_STORAGE_BACKEND \ + STATIC_LINK + +OPTIONS_DEFINE= DOCS CLANGLINK LLVMLINK STATIC TEST +OPTIONS_DEFAULT=CLANGLINK LLVMLINK +OPTIONS_SUB= yes + +DOCS_BUILD_DEPENDS= asciidoctor:textproc/rubygem-asciidoctor +DOCS_ALL_TARGET= all doc +DOCS_USES= perl5 +DOCS_CMAKE_BOOL= ENABLE_DOCUMENTATION + +CLANGLINK_DESC= Create clang compiler links if clang is installed +LLVMLINK_DESC= Create llvm compiler links if llvm is installed + +STATIC_LDFLAGS= -static + +TEST_CMAKE_BOOL=ENABLE_TESTING +TEST_TARGET= check + +.include + +CCLINKDIR= libexec/ccache +PLIST_SUB+= CCLINKDIR="${CCLINKDIR}" + +.if ${ARCH}=="i386" +CCACHE_COMPILERS+= icc icpc +.endif + +GNU_COMPILERS+= 48 8 9 10 11 12 +CCACHE_COMPILERS+= cc c++ CC gcc g++ ${GNU_COMPILERS:S|^|gcc|} \ + ${GNU_COMPILERS:S|^|g++|} \ + ${GNU_COMPILERS:S|^|cpp|} + +.if ${PORT_OPTIONS:MCLANGLINK} +CLANG_COMPILERS+= 10 11 12 13 14 15 16 -devel +CCACHE_COMPILERS+= clang clang++ ${CLANG_COMPILERS:S|^|clang|} \ + ${CLANG_COMPILERS:S|^|clang++|} \ + ${CLANG_COMPILERS:S|^|cpp|} +.endif + +.if ${PORT_OPTIONS:MLLVMLINK} +CCACHE_COMPILERS+= llvm-gcc llvm-c++ llvm-g++ +.endif + +CCACHE_COMPILERS+= ${EXTRA_COMPILERS} +SUB_LIST+= CCACHE_COMPILERS="${CCACHE_COMPILERS}" \ + CCLINKDIR="${CCLINKDIR}" + +post-install: + ${MKDIR} ${STAGEDIR}${PREFIX}/${CCLINKDIR}/world + ${INSTALL_SCRIPT} ${WRKDIR}/world-ccache \ + ${STAGEDIR}${PREFIX}/${CCLINKDIR}/world/ccache + ${INSTALL_SCRIPT} ${WRKDIR}/ccache-update-links.sh \ + ${STAGEDIR}${PREFIX}/bin/ccache-update-links + @${MKDIR} ${STAGEDIR}${PREFIX}/etc/periodic/daily + ${INSTALL_SCRIPT} ${WRKDIR}/ccache_clean \ + ${STAGEDIR}${PREFIX}/etc/periodic/daily + +post-install-DOCS-on: + ${MKDIR} ${STAGEDIR}${DOCSDIR} + ${INSTALL_DATA} ${BUILD_WRKSRC}/doc/*.html ${STAGEDIR}${DOCSDIR} + ${INSTALL_DATA} ${WRKSRC}/doc/*.adoc ${STAGEDIR}${DOCSDIR} + +.include diff --git a/devel/ccache4/distinfo b/devel/ccache4/distinfo new file mode 100644 index 000000000000..5b7926ccb96e --- /dev/null +++ b/devel/ccache4/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1678706114 +SHA256 (ccache-ccache-v4.8_GH0.tar.gz) = 47c9ff1668c9c6892b34642f9f09027f4a41e719dad1062f82265ff0087299ce +SIZE (ccache-ccache-v4.8_GH0.tar.gz) = 767312 diff --git a/devel/ccache4/files/ccache-update-links.sh.in b/devel/ccache4/files/ccache-update-links.sh.in new file mode 100644 index 000000000000..15bc180aef2d --- /dev/null +++ b/devel/ccache4/files/ccache-update-links.sh.in @@ -0,0 +1,72 @@ +#!/bin/sh +# +# Author: Emanuel Haupt +# +# $FreeBSD: head/devel/ccache/files/ccache-update-links.sh.in 435560 2017-03-06 17:50:14Z bdrewery $ +# + +CCACHE_COMPILERS="%%CCACHE_COMPILERS%% ${EXTRA_COMPILERS}" +CCLINKDIR="%%CCLINKDIR%%" +PREFIX="%%PREFIX%%" + +usage() { + cat << "EOUSAGE" +Usage: ccache-update-links [hv] + +ccache-update-links maintains symlinks needed by ccache to work with additional +compilers. + + -h, --help this help + -v verbose + +EOUSAGE +} + +case "$1" +in + -h|--help) + usage + ;; +esac + +strip_path() { + local IFS=":" + local path + set -- ${PATH} + while [ $# -gt 0 ]; do + if ! [ "${1}" = "${PREFIX}/libexec/ccache" ]; then + path="${path}${path:+:}${1}" + fi + shift + done + echo "${path}" +} + +# Remove ccache wrappers from PATH +PATH=$(strip_path) + +# create compiler links +for comp in ${CCACHE_COMPILERS} +do + if command -v "${comp}" >/dev/null; then + if [ ! -L "${PREFIX}/${CCLINKDIR}/${comp}" ]; then + [ "$1" = "-v" ] && echo "create symlink for ${comp}" + ln -sf ${PREFIX}/bin/ccache ${PREFIX}/${CCLINKDIR}/${comp} + fi + + if [ ! -L "${PREFIX}/${CCLINKDIR}/world/${comp}" ]; then + [ "$1" = "-v" ] && echo "create symlink for ${comp} (world)" + ln -sf ccache ${PREFIX}/${CCLINKDIR}/world/${comp} + fi + else + if [ -L "${PREFIX}/${CCLINKDIR}/${comp}" ]; then + [ "$1" = "-v" ] && echo "remove symlink for ${comp}" + rm -f ${PREFIX}/${CCLINKDIR}/${comp} + fi + + if [ -L "${PREFIX}/${CCLINKDIR}/world/${comp}" ]; then + [ "$1" = "-v" ] && echo "remove symlink for ${comp} (world)" + rm -f ${PREFIX}/${CCLINKDIR}/world/${comp} + fi + fi +done diff --git a/devel/ccache4/files/ccache_clean.in b/devel/ccache4/files/ccache_clean.in new file mode 100755 index 000000000000..c68d621bba64 --- /dev/null +++ b/devel/ccache4/files/ccache_clean.in @@ -0,0 +1,71 @@ +#!/bin/sh +# +# Copyright (c) 2020 Rozhuk Ivan +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +if [ -r /etc/defaults/periodic.conf ]; then + . /etc/defaults/periodic.conf + source_periodic_confs +fi + + +case "${daily_ccache_clean_enable:-YES}" in +[Nn][Oo]) + ;; +*) + SYS_CCACHE_DIR=`make -V CCACHE_DIR` + if [ -z "${SYS_CCACHE_DIR}" ]; then + SYS_CCACHE_DIR='/var/cache/ccache' + fi + if [ -d "${SYS_CCACHE_DIR}" ]; then + echo "ccache dir: ${SYS_CCACHE_DIR}" + env CCACHE_DIR="${SYS_CCACHE_DIR}" \ + /usr/bin/nice -n 15 \ + %%PREFIX%%/bin/ccache --cleanup + fi + + _USERS_HOME_DIRS=`pw usershow -a | awk -F":" '{print $9}' | sort -u` + for _USER_HOME in ${_USERS_HOME_DIRS}; do + if [ -d "${_USER_HOME}/.ccache" ]; then + echo "ccache dir: ${_USER_HOME}/.ccache" + env CCACHE_DIR="${_USER_HOME}/.ccache" \ + /usr/bin/nice -n 15 \ + %%PREFIX%%/bin/ccache --cleanup + fi + if [ -d "${_USER_HOME}/.cache/ccache" ]; then + echo "ccache dir: ${_USER_HOME}/.cache/ccache" + env CCACHE_DIR="${_USER_HOME}/.cache/ccache" \ + CCACHE_CONFIGPATH="${_USER_HOME}/.config/ccache/ccache.conf" \ + /usr/bin/nice -n 15 \ + %%PREFIX%%/bin/ccache --cleanup + fi + done + ;; +esac + + +exit 0 diff --git a/devel/ccache4/files/pkg-message.in b/devel/ccache4/files/pkg-message.in new file mode 100644 index 000000000000..ce77e2104573 --- /dev/null +++ b/devel/ccache4/files/pkg-message.in @@ -0,0 +1,10 @@ +[ +{ type: install + message: <&2 && + exit 1 + +unset CCACHE_PATH +export CCACHE_COMPILERCHECK=content +exec %%PREFIX%%/%%CCLINKDIR%%/${0##*/} "$@" diff --git a/devel/ccache4/pkg-descr b/devel/ccache4/pkg-descr new file mode 100644 index 000000000000..3276f98a7895 --- /dev/null +++ b/devel/ccache4/pkg-descr @@ -0,0 +1,6 @@ +ccache is a compiler cache. It acts as a caching pre-processor to C/C++ +compilers, using the -E compiler switch and a hash to detect when a +compilation can be satisfied from cache. This often results in a 5 to 10 +times speedup in common compilations. + +WWW: https://ccache.dev/ diff --git a/devel/ccache4/pkg-plist b/devel/ccache4/pkg-plist new file mode 100644 index 000000000000..b4b4599bdacb --- /dev/null +++ b/devel/ccache4/pkg-plist @@ -0,0 +1,9 @@ +etc/periodic/daily/ccache_clean +bin/ccache +bin/ccache-update-links +%%PORTDOCS%%share/man/man1/ccache.1.gz +%%PORTDOCS%%%%DOCSDIR%%/LICENSE.html +%%CCLINKDIR%%/world/ccache +@postexec echo "Create compiler links..." +@postexec %D/bin/ccache-update-links -v +@preunexec find %D/%%CCLINKDIR%% -type l -exec rm -f {} \; -- 2.39.2