diff options
Diffstat (limited to 'llvm_extra/create_llvm_extra.sh')
-rwxr-xr-x | llvm_extra/create_llvm_extra.sh | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/llvm_extra/create_llvm_extra.sh b/llvm_extra/create_llvm_extra.sh new file mode 100755 index 00000000..6f34a0b2 --- /dev/null +++ b/llvm_extra/create_llvm_extra.sh @@ -0,0 +1,88 @@ +#!/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 "${@}" |