You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.9 KiB
89 lines
2.9 KiB
#!/bin/bash
|
|
|
|
# Copyright 2018 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# This script takes an existing llvm ebuild file and generate a llvm-extra
|
|
# ebuild. The newly generated llvm-extra ebuild can be installed as a regular
|
|
# host package.
|
|
# The new ebuild should be generated in sys-devel/llvm-extra directory.
|
|
# The script also copies all the files from files/ directory.
|
|
# The generated llvm-extra ebuild is slotted so multiple instances of
|
|
# llvm-extra ebuilds can be installed at same time.
|
|
# The slot is derived based on the _pre<num> string in the llvm ebuild name.
|
|
# e.g. For llvm-7.0_pre331547_p20180529-r8.ebuild, the slot will be
|
|
# 7.0_pre331547.
|
|
#
|
|
# Usage:
|
|
# ./create_llvm_extra.sh /path/to/llvm-7.0_pre331547_p20180529-r8.ebuild
|
|
#
|
|
# To use the clang installed by llvm-extra, modify the CFLAGS and
|
|
# LDFLAGS of a pckage to pass the patch of the clang binary installed by
|
|
# the llvm-extra package.
|
|
# e.g. append-flags -Xclang-path=/usr/llvm-extra/version/clang
|
|
# append-ldflags -Xclang-path=/usr/llvm-extra/version/clang
|
|
#
|
|
|
|
SCRIPT_DIR=$(realpath $(dirname "$0"))
|
|
|
|
function check_cmd() {
|
|
if [[ "$#" -ne 1 ]]; then
|
|
echo "Exactly 1 argument expected"
|
|
echo "Usage $0 <path_to_llvm_ebuild>"
|
|
exit 1
|
|
fi
|
|
if [[ ! -f "$1" ]]; then
|
|
echo "$1 is not a file"
|
|
exit 1;
|
|
fi
|
|
}
|
|
|
|
function create_llvm_extra_ebuild() {
|
|
EBUILD_PREFIX=llvm-extra
|
|
EBUILD_DIR=$(dirname "$1")
|
|
EBUILD_FILE_NAME=$(basename "$1")
|
|
NEW_EBUILD_FILE_NAME="${EBUILD_FILE_NAME/llvm/$EBUILD_PREFIX}"
|
|
NEW_EBUILD_FILENAME_NO_EXT="${NEW_EBUILD_FILE_NAME%.*}"
|
|
NEW_EBUILD_DIR="${EBUILD_DIR}/../${EBUILD_PREFIX}"
|
|
NEW_EBUILD_PV="${NEW_EBUILD_FILENAME_NO_EXT#"$EBUILD_PREFIX-"}"
|
|
NEW_EBUILD_SLOT="${NEW_EBUILD_PV%%_p[[:digit:]]*}"
|
|
|
|
mkdir -p "${NEW_EBUILD_DIR}"
|
|
if [[ -d "${EBUILD_DIR}/files" ]]; then
|
|
cp -rf "${EBUILD_DIR}/files" "${NEW_EBUILD_DIR}"
|
|
fi
|
|
|
|
if [[ -f "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME}" ]]; then
|
|
echo "Removing existing ebuild file ${NEW_EBUILD_FILE_NAME}"
|
|
rm -f "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME}"
|
|
fi
|
|
# Generate the llvm-extra ebuild file.
|
|
"${SCRIPT_DIR}"/create_ebuild_file.py "$1" "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME}"
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Creation of ${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME} failed"
|
|
exit 1
|
|
fi
|
|
echo "***"
|
|
echo "***"
|
|
echo "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME} has been created."
|
|
|
|
echo "***"
|
|
echo "Test if it builds by running \$ sudo emerge ${EBUILD_PREFIX}:${NEW_EBUILD_SLOT}"
|
|
echo "***"
|
|
echo "If it works, Go ahead and submit the newly generated ebuild"\
|
|
"and any other files in ${NEW_EBUILD_DIR}."
|
|
echo "***"
|
|
echo "Don't forget to add sys-devel/${EBUILD_PREFIX}:${NEW_EBUILD_SLOT} to"\
|
|
"the dependencies in virtual/target-chromium-os-sdk ebuild."
|
|
echo "***"
|
|
echo "***"
|
|
}
|
|
|
|
|
|
set -e
|
|
# Sanity checks.
|
|
check_cmd "${@}"
|
|
# Create llvm-extra ebuild.
|
|
create_llvm_extra_ebuild "${@}"
|