From: Michal Sojka Date: Fri, 11 May 2018 14:28:42 +0000 (+0200) Subject: Add source_sync.sh from "L4T Jetson TX2 Driver Package 28.2" X-Git-Tag: 0.0~42 X-Git-Url: https://rtime.felk.cvut.cz/gitweb/hercules2020/jailhouse-build.git/commitdiff_plain/ac0c7bbbb696994948d6b4a54843180a3b5c703a Add source_sync.sh from "L4T Jetson TX2 Driver Package 28.2" It can be downloaded from https://developer.nvidia.com/embedded/dlc/l4t-jetson-tx2-driver-package-28-2-ga. We will use this script to clone all needed nv-tegra repositories. --- diff --git a/nv-tegra/source_sync.sh b/nv-tegra/source_sync.sh new file mode 100755 index 0000000..5a848b8 --- /dev/null +++ b/nv-tegra/source_sync.sh @@ -0,0 +1,331 @@ +#!/bin/bash + +# Copyright (c) 2012-2017 NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``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 COPYRIGHT OWNER 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. + + +# +# This script sync's NVIDIA's version of +# 1. the kernel source +# 2. the u-boot source +# from nv-tegra, NVIDIA's public git repository. +# The script also provides opportunities to the sync to a specific tag +# so that the binaries shipped with a release can be replicated. +# +# Usage: +# By default it will download all the listed sources +# ./source_sync.sh +# Use the -t option to provide the TAG to be used to sync all the sources. +# Use the -k option to download only the kernel and device tree repos and optionally sync to TAG +# Use the -u option to download only the u-boot repo and optionally sync to TAG +# For detailed usage information run with -h option. +# + + +# verify that git is installed +if ! which git > /dev/null ; then + echo "ERROR: git is not installed. If your linux distro is 10.04 or later," + echo "git can be installed by 'sudo apt-get install git-core'." + exit 1 +fi + +# source dir +LDK_DIR=$(cd `dirname $0` && pwd) +LDK_DIR="${LDK_DIR}/sources" +# script name +SCRIPT_NAME=`basename $0` +# info about sources. +# NOTE: *Add only kernel repos here. Add new repos separately below. Keep related repos together* +SOURCE_INFO=" +k:kernel/kernel-4.4:nv-tegra.nvidia.com/linux-4.4.git: +k:kernel/t18x:nv-tegra.nvidia.com/linux-t18x.git: +k:kernel/nvgpu:nv-tegra.nvidia.com/linux-nvgpu.git: +k:kernel/nvhost:nv-tegra.nvidia.com/linux-nvhost.git: +k:kernel/nvmap:nv-tegra.nvidia.com/linux-nvmap.git: +k:kernel/nvmap-t18x:nv-tegra.nvidia.com/linux-nvmap-t18x.git: +k:kernel/display:nv-tegra.nvidia.com/linux-display.git: +k:hardware/nvidia/soc/t18x:nv-tegra.nvidia.com/device/hardware/nvidia/soc/t18x.git: +k:hardware/nvidia/platform/tegra/common:nv-tegra.nvidia.com/device/hardware/nvidia/platform/tegra/common.git: +k:hardware/nvidia/platform/t18x/common:nv-tegra.nvidia.com/device/hardware/nvidia/platform/t18x/common.git: +k:hardware/nvidia/platform/t18x/quill:nv-tegra.nvidia.com/device/hardware/nvidia/platform/t18x/quill.git: +k:hardware/nvidia/soc/t210:nv-tegra.nvidia.com/device/hardware/nvidia/soc/t210.git: +k:hardware/nvidia/platform/t210/common:nv-tegra.nvidia.com/device/hardware/nvidia/platform/t210/common.git: +k:hardware/nvidia/platform/t210/jetson:nv-tegra.nvidia.com/device/hardware/nvidia/platform/t210/jetson.git: +k:hardware/nvidia/soc/tegra:nv-tegra.nvidia.com/device/hardware/nvidia/soc/tegra.git: +" +SOURCE_INFO+=" +u:u-boot:nv-tegra.nvidia.com/3rdparty/u-boot.git: +" + +# exit on error on sync +EOE=0 +# after processing SOURCE_INFO +NSOURCES=0 +declare -a SOURCE_INFO_PROCESSED +# download all? +DALL=1 + +function Usages { + local ScriptName=$1 + local LINE + local OP + local DESC + local PROCESSED=() + local i + + echo "Use: $1 [options]" + echo "Available general options are," + echo " -h : help" + echo " -e : exit on sync error" + echo " -d [DIR] : root of source is DIR" + echo " -t [TAG] : Git tag that will be used to sync all the sources" + echo "" + echo "By default, all sources are downloaded." + echo "Only specified sources are downloaded, if one or more of the following options are mentioned." + echo "" + echo "$SOURCE_INFO" | while read LINE; do + if [ ! -z "$LINE" ]; then + OP=$(echo "$LINE" | cut -f 1 -d ':') + DESC=$(echo "$LINE" | cut -f 2 -d ':') + if [[ ! " ${PROCESSED[@]} " =~ " ${OP} " ]]; then + echo " -${OP} [TAG]: Download $DESC source and optionally sync to TAG" + PROCESSED+=("${OP}") + else + echo " and download $DESC source and sync to the same TAG" + fi + fi + done + echo "" +} + +function ProcessSwitch { + local SWITCH="$1" + local TAG="$2" + local i + local found=0 + + for ((i=0; i < NSOURCES; i++)); do + local OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':') + if [ "-${OP}" == "$SWITCH" ]; then + SOURCE_INFO_PROCESSED[i]="${SOURCE_INFO_PROCESSED[i]}${TAG}:y" + DALL=0 + found=1 + fi + done + + if [ "$found" == 1 ]; then + return 0 + fi + + echo "Terminating... wrong switch: ${SWITCH}" >&2 + Usages "$SCRIPT_NAME" + exit 1 +} + +function UpdateTags { + local SWITCH="$1" + local TAG="$2" + local i + + for ((i=0; i < NSOURCES; i++)); do + local OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':') + if [ "${OP}" == "$SWITCH" ]; then + SOURCE_INFO_PROCESSED[i]=$(echo "${SOURCE_INFO_PROCESSED[i]}" \ + | awk -F: -v OFS=: -v var="${TAG}" '{$4=var; print}') + fi + done +} + +function DownloadAndSync { + local WHAT_SOURCE="$1" + local LDK_SOURCE_DIR="$2" + local REPO_URL="$3" + local TAG="$4" + local OPT="$5" + local RET=0 + + if [ -d "${LDK_SOURCE_DIR}" ] ; then + echo "Directory for $WHAT, ${LDK_SOURCE_DIR}, already exists!" + pushd "${LDK_SOURCE_DIR}" > /dev/null + git status 2>&1 >/dev/null + if [ $? -ne 0 ]; then + echo "But the directory is not a git repository -- clean it up first" + echo "" + echo "" + popd > /dev/null + return 1 + fi + git fetch --all 2>&1 >/dev/null + popd > /dev/null + else + echo "Downloading default $WHAT source..." + + git clone "$REPO_URL" -n ${LDK_SOURCE_DIR} 2>&1 >/dev/null + if [ $? -ne 0 ]; then + echo "$2 source sync failed!" + echo "" + echo "" + return 1 + fi + + echo "The default $WHAT source is downloaded in: ${LDK_SOURCE_DIR}" + fi + + if [ -z "$TAG" ]; then + echo "Please enter a tag to sync $2 source to" + echo -n "(enter nothing to skip): " + read TAG + TAG=$(echo $TAG) + UpdateTags $OPT $TAG + fi + + if [ ! -z "$TAG" ]; then + pushd ${LDK_SOURCE_DIR} > /dev/null + git tag -l 2>/dev/null | grep -q -P "^$TAG\$" + if [ $? -eq 0 ]; then + echo "Syncing up with tag $TAG..." + git checkout -b mybranch_$(date +%Y-%m-%d-%s) $TAG + echo "$2 source sync'ed to tag $TAG successfully!" + else + echo "Couldn't find tag $TAG" + echo "$2 source sync to tag $TAG failed!" + RET=1 + fi + popd > /dev/null + fi + echo "" + echo "" + + return "$RET" +} + +# prepare processing .... +GETOPT=":ehd:t:" + +OIFS="$IFS" +IFS=$(echo -en "\n\b") +SOURCE_INFO_PROCESSED=($(echo "$SOURCE_INFO")) +IFS="$OIFS" +NSOURCES=${#SOURCE_INFO_PROCESSED[*]} + +for ((i=0; i < NSOURCES; i++)); do + OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':') + GETOPT="${GETOPT}${OP}:" +done + +# parse the command line first +while getopts "$GETOPT" opt; do + case $opt in + d) + case $OPTARG in + -[A-Za-z]*) + Usages "$SCRIPT_NAME" + exit 1 + ;; + *) + LDK_DIR="$OPTARG" + ;; + esac + ;; + e) + EOE=1 + ;; + h) + Usages "$SCRIPT_NAME" + exit 1 + ;; + t) + TAG="$OPTARG" + PROCESSED=() + for ((i=0; i < NSOURCES; i++)); do + OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':') + if [[ ! " ${PROCESSED[@]} " =~ " ${OP} " ]]; then + UpdateTags $OP $TAG + PROCESSED+=("${OP}") + fi + done + ;; + [A-Za-z]) + case $OPTARG in + -[A-Za-z]*) + eval arg=\$$((OPTIND-1)) + case $arg in + -[A-Za-Z]-*) + Usages "$SCRIPT_NAME" + exit 1 + ;; + *) + ProcessSwitch "-$opt" "" + OPTIND=$((OPTIND-1)) + ;; + esac + ;; + *) + ProcessSwitch "-$opt" "$OPTARG" + ;; + esac + ;; + :) + case $OPTARG in + #required arguments + d) + Usages "$SCRIPT_NAME" + exit 1 + ;; + #optional arguments + [A-Za-z]) + ProcessSwitch "-$OPTARG" "" + ;; + esac + ;; + \?) + echo "Terminating... wrong switch: $@" >&2 + Usages "$SCRIPT_NAME" + exit 1 + ;; + esac +done +shift $((OPTIND-1)) + +GRET=0 +for ((i=0; i < NSOURCES; i++)); do + OPT=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':') + WHAT=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 2 -d ':') + REPO=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 3 -d ':') + TAG=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 4 -d ':') + DNLOAD=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 5 -d ':') + + if [ $DALL -eq 1 -o "x${DNLOAD}" == "xy" ]; then + DownloadAndSync "$WHAT" "${LDK_DIR}/${WHAT}" "git://${REPO}" "${TAG}" "${OPT}" + tRET=$? + let GRET=GRET+tRET + if [ $tRET -ne 0 -a $EOE -eq 1 ]; then + exit $tRET + fi + fi +done + +exit $GRET