aboutsummaryrefslogtreecommitdiff
path: root/llvm_extra/create_llvm_extra.sh
diff options
context:
space:
mode:
Diffstat (limited to 'llvm_extra/create_llvm_extra.sh')
-rwxr-xr-xllvm_extra/create_llvm_extra.sh88
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 "${@}"