summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinay Verma <vvinay@codeaurora.org>2018-02-19 07:45:32 +0530
committerMichael Bestas <mkbestas@lineageos.org>2019-09-15 18:30:38 +0300
commite9a15bb017a7fd94cb2571199c85f3af6d9b6287 (patch)
tree62201ab4586a75cca69fd3c50df93b9342e7f4e0
parent912bf6be711a585fd844141942f2e3758a42f2ab (diff)
downloadandroid_vendor_qcom_opensource_interfaces-e9a15bb017a7fd94cb2571199c85f3af6d9b6287.tar.gz
android_vendor_qcom_opensource_interfaces-e9a15bb017a7fd94cb2571199c85f3af6d9b6287.tar.bz2
android_vendor_qcom_opensource_interfaces-e9a15bb017a7fd94cb2571199c85f3af6d9b6287.zip
Add Script to generate vendor hal make files
Author: Vinay Verma <vvinay@codeaurora.org> Date: Mon Feb 19 07:45:32 2018 +0530 Add Script to generate vendor hal make files Script will generate blueprint files for vendor hals present under proprieatry and opensource projects.It will recursively search for all hal files and generate accordingly Change-Id: Id08c68d0d059a9bbbf0260350e2c3d5bd702d517 Author: Vinay Verma <vvinay@codeaurora.org> Date: Wed Mar 14 17:18:23 2018 +0530 - Do not generate fingerprint bp files - Check for bp files and exit if found. Change-Id: Iae998facddd73d4ac24b4366dcd0f3bea119e6b7 Author: Vinay Verma <vvinay@codeaurora.org> Date: Tue Apr 17 10:40:33 2018 +0530 Generate blueprint files for HAL's - Add condition to check if .bp exists - Generate .bp only if not present in build tree for a HAL. - Remove fingerprint hard-coding and checks for not generating bp files. It will be taken care by above point. Change-Id: I21501c768e732167f44887730e0a1dc38ada4140 Author: David Ng <dave@codeaurora.org> Date: Fri May 4 18:53:24 2018 -0700 Re-run hidl-gen on updated vendor HALs Update vendor_hal makefile generation script to always re-run for previously compile-time generated Android.bp's - but update only if there are differences. hidl-gen is skipped in HAL directories where there's an existing Android.bp but are not previously compile-time generated. Compile-time generated Android.bp's are denoted by an .hidl-autogen alongside the Android.bp. Change-Id: I79f70d48a72c456649d975b450a4d69bb47e9e93 Author: David Ng <dave@codeaurora.org> Date: Fri May 11 19:09:13 2018 -0700 Sanitize host tools used in vendor HAL hidl-gen wrapper Sanitize all host tools used by the vendor HAL hidl-gen wrapper. This is an attempt to standardize the host tool behaviors that may be impacted by variations in build-time environments. Change-Id: I2f6eb5af05a7f2a3f5ea82ee1780a94f305b2b18 Author: Vinay Verma <vvinay@codeaurora.org> Date: Sun Jun 24 19:53:06 2018 +0530 Handle case when .bp generation is failed - Return exit command to calling function if .bp generation is failed. - Do not proceed with other HAL's if error is found. - Move creation of .hidl-gen file at earlier stage because failure in bp genration results in empty .bp file and script can run in wrong case of pre-existing .bp files in next run. Change-Id: I0f45326913fa1a4e3b6e289cf56a43b4382a9f7e Author: Vinay Verma <vvinay@codeaurora.org> Date: Tue Jul 17 17:49:01 2018 +0530 Create .hidl-autogen marker If Android.bp is already present then it is moved to .hidl-autogen and then back to Android.bp after checking diff. In this case we are left with no marker and in next iteration Android.bp is treated as committed file and hence not updated. Creating .hidl-autogen explicitly. Change-Id: I9c02dbba9a86cbdc4551d43a75b47d7d17c1b9d3 Author: Dileep Marchya <dmarchya@codeaurora.org> Date: Wed Jun 26 20:42:17 2019 +0530 hidl-gen: Match exact string in hidl-gen before skipping. - Grep leads to a substring match and causes package names to get skipped incorrectly. Use -w option to find the exact match. CRs-Fixed: 2479486 Change-Id: Ic1fbe72304177d396eab142eaf832b841b61da24 Change-Id: Ic574fbee9ce858ee102235e248a9bf494112848b
-rwxr-xr-xvendor_hal_makefile_generator.sh161
1 files changed, 161 insertions, 0 deletions
diff --git a/vendor_hal_makefile_generator.sh b/vendor_hal_makefile_generator.sh
new file mode 100755
index 0000000..8a01731
--- /dev/null
+++ b/vendor_hal_makefile_generator.sh
@@ -0,0 +1,161 @@
+#!/bin/bash
+# Copyright (c) 2018, The Linux Foundation. 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 The Linux Foundation 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 "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# 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 US
+
+# This file is used to generate blueprint/makefiles for the vendor hals
+
+# Sanitize host tools
+LS=`which ls`
+LS=${LS:-ls}
+MV=`which mv`
+MV=${MV:-mv}
+CAT=`which cat`
+CAT=${CAT:-cat}
+CUT=`which cut`
+CUT=${CUT:-cut}
+REV=`which rev`
+REV=${REV:-rev}
+SED=`which sed`
+SED=${SED:-sed}
+DIFF=`which diff`
+DIFF=${DIFF:-diff}
+ECHO=`which echo`
+ECHO=${ECHO:-echo}
+FIND=`which find`
+FIND=${FIND:-find}
+GREP=`which grep`
+GREP=${GREP:-grep}
+SORT=`which sort`
+SORT=${SORT:-sort}
+TOUCH=`which touch`
+TOUCH=${TOUCH:-touch}
+
+function generate_make_files() {
+ local dir_path="$ANDROID_BUILD_TOP/$1"
+ pushd $dir_path > /dev/null
+
+ # Due to same package name in different folders we need to detect
+ # opensource case so that it can be handled.
+ local flag_opensource=false
+ if ${ECHO} "$dir_path" | ${GREP} "opensource" > /dev/null;then
+ flag_opensource=true
+ fi
+
+ # Search for all HAL files in given dir.
+ local halFilePaths=`${ECHO} $(${FIND} -iname "*.hal" | ${SORT})`
+
+ #Store package name in below array to create a unique set so that we trigger
+ #hidl-gen only once for a given package.
+ package_collection=()
+
+ #Iterate over identified .hal Paths
+ local prev_path=""
+ for file in $halFilePaths; do
+ local hal_path=`${ECHO} "$file" | ${REV} | ${CUT} -d"/" -f2- | ${REV}`
+ if [ -e "$hal_path/Android.bp" ] && [ ! -e "$hal_path/.hidl-autogen" ]; then
+ if [ ! "$hal_path" = "$prev_path" ]; then
+ ${ECHO} "Skipping hidl-gen on $1/$hal_path as Android.bp is not compile-time generated"
+ prev_path="$hal_path"
+ fi
+ continue;
+ fi
+ prev_path="$hal_path"
+
+ # Find out package name from HAL file
+ local hal_package=`${ECHO} $(${CAT} $file | ${GREP} -E -m 1 "^package ") | ${CUT} -d' ' -f2`
+
+ # Get rid of extra delimter
+ hal_package=${hal_package%?}
+
+ #Check if we already executed hidl-gen for a given package
+ if ${ECHO} "${package_collection[@]}" | ${GREP} -w $hal_package > /dev/null; then
+ continue;
+ else
+ package_collection+=($hal_package)
+ local delimeter=`${ECHO} "$file" | ${CUT} -d'/' -f2`
+ local root=`${ECHO} "$hal_package" | ${SED} "s/$delimeter/#/g" | ${CUT} -d'#' -f1`
+ #Identify Package Root
+ root=${root%?}
+ #Create root arguments for hidl-command
+ local root_arguments="-r $root:$1 -r $2"
+ fi
+
+ local hal_path2=$1;
+ #Handling for opensource HAL to solve package name conflict
+ if [ "$flag_opensource" = true ]; then
+ root="$root.$delimeter"
+ hal_path2="$hal_path2/$delimeter"
+ fi
+
+ local root_arguments="-r $root:$hal_path2 -r $2"
+
+ update_check=0
+ if [ -e "$hal_path/Android.bp" ]; then
+ ${MV} $hal_path/Android.bp $hal_path/.hidl-autogen
+ update_check=1
+ fi
+ ${TOUCH} $hal_path/.hidl-autogen
+
+ ${ECHO} -n "Running hidl-gen on $hal_package: "
+ hidl-gen -Landroidbp $root_arguments $hal_package;
+ rc=$?; if [[ $rc != 0 ]]; then return $rc; fi
+
+ if [ "$update_check" -eq 1 ]; then
+ ${DIFF} -q $hal_path/Android.bp $hal_path/.hidl-autogen > /dev/null
+ if [ $? -eq 0 ]; then
+ ${ECHO} "no changes"
+ ${MV} $hal_path/.hidl-autogen $hal_path/Android.bp
+ else
+ ${ECHO} "updated"
+ fi
+ else
+ ${ECHO} "created"
+ fi
+ ${TOUCH} $hal_path/.hidl-autogen
+ done
+ popd > /dev/null
+}
+
+function start_script_for_interfaces {
+ #Find interfaces in workspace
+ local interfaces=$(${LS} -d ${ANDROID_BUILD_TOP}/vendor/qcom/*/interfaces)
+
+ ${ECHO} "HIDL interfaces: Scanning for changes..."
+ for interface in $interfaces; do
+ #generate interfaces
+ local relative_interface=${interface#${ANDROID_BUILD_TOP}/}
+ generate_make_files $relative_interface "android.hidl:system/libhidl/transport"
+ if [ $? -ne 0 ] ; then
+ ${ECHO} "HIDL interfaces: Update Failed"
+ return 1;
+ fi
+ done
+ ${ECHO} "HIDL interfaces: Update complete."
+}
+
+#Start script for interfaces
+start_script_for_interfaces
+