zeek/auxil/spicy/scripts/precompile-headers.sh
Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

82 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
set -o errexit
set -o nounset
BINDIR=$(dirname "$0")
while [ $# -ne 0 ]; do
case "$1" in
--bindir) BINDIR=$2; shift 2;;
esac
done
HILTI_CONFIG=${BINDIR}/hilti-config
SPICY_CONFIG=${BINDIR}/spicy-config
for config in "${HILTI_CONFIG}" "${SPICY_CONFIG}"; do
if [ ! -x "${config}" ]; then
echo "${config} is not an executable file"
exit 1
fi
done
# Helper function to from a given Spicy `*-config` executable determine the location of a header.
search_header() {
config=$1
header=$2;
for flag in $(${config} --cxxflags); do
if ! echo "${flag}" | grep -q '^-I'; then
continue
fi
dir=${flag#??}
if [ -e "${dir}/${header}" ]; then
location=${dir}/${header}
fi
done
if [ -z "${location+x}" ]; then
echo "Error: could not determine location of ${header}"
exit 1
fi
echo "${location}"
}
LIBHILTI=$(search_header "${HILTI_CONFIG}" hilti/rt/libhilti.h)
LIBSPICY=$(search_header "${SPICY_CONFIG}" spicy/rt/libspicy.h)
# Extract version from `hilti-config`. It should be identical to the one from `spicy-config`.
VERSION=$(${HILTI_CONFIG} --version | cut -d ' ' -f1)
# The cache is read from the environment variable `SPICY_CACHE`
# if set; else a patch under the user's home directory is used.
CACHE=${SPICY_CACHE:-$HOME/.cache/spicy/${VERSION}}
rm -rf "${CACHE}"
mkdir -p "${CACHE}"
# NOTE: The compiler invocations here should be kept in sync
# with what we do in `CMakeLists.txt`.
#
# Precompiling libspicy.h causes the following warnings with GCC:
#
# error: #pragma once in main file [-Werror]
#
# Disable -Werror explicitly here to avoid this. It's fixed with GCC 14.
# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47857)
cp "${LIBHILTI}" "${CACHE}/precompiled_libhilti_debug.h"
$("${HILTI_CONFIG}" --cxx --cxxflags --debug) -x c++-header "${LIBHILTI}" -o "${CACHE}/precompiled_libhilti_debug.h.gch"
cp "${LIBHILTI}" "${CACHE}/precompiled_libhilti.h"
$("${HILTI_CONFIG}" --cxx --cxxflags) -x c++-header "${LIBHILTI}" -o "${CACHE}/precompiled_libhilti.h.gch"
cp "${LIBSPICY}" "${CACHE}/precompiled_libspicy_debug.h"
$("${SPICY_CONFIG}" --cxx --cxxflags --debug) -x c++-header "${LIBSPICY}" -Wno-error -o "${CACHE}/precompiled_libspicy_debug.h.gch"
cp "${LIBSPICY}" "${CACHE}/precompiled_libspicy.h"
$("${SPICY_CONFIG}" --cxx --cxxflags) -x c++-header "${LIBSPICY}" -Wno-error -o "${CACHE}/precompiled_libspicy.h.gch"