diff options
Diffstat (limited to 'tools/xmlGenerator')
-rw-r--r-- | tools/xmlGenerator/Android.mk | 19 | ||||
-rwxr-xr-x | tools/xmlGenerator/hostDomainGenerator.sh | 218 |
2 files changed, 237 insertions, 0 deletions
diff --git a/tools/xmlGenerator/Android.mk b/tools/xmlGenerator/Android.mk index cae6485..6e9b9ba 100644 --- a/tools/xmlGenerator/Android.mk +++ b/tools/xmlGenerator/Android.mk @@ -24,10 +24,29 @@ LOCAL_PATH := $(call my-dir) # Scripts are not compiled so the prebuild mechanism is used to export them. include $(CLEAR_VARS) +LOCAL_MODULE := PFWScriptGenerator.py +LOCAL_SRC_FILES := $(LOCAL_MODULE) +LOCAL_MODULE_CLASS := EXECUTABLES +LOCAL_IS_HOST_MODULE := true +include $(BUILD_PREBUILT) + +include $(CLEAR_VARS) LOCAL_MODULE := hostConfig.py LOCAL_SRC_FILES := $(LOCAL_MODULE) LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_IS_HOST_MODULE := true include $(BUILD_PREBUILT) +include $(CLEAR_VARS) +LOCAL_MODULE := hostDomainGenerator.sh +LOCAL_SRC_FILES := $(LOCAL_MODULE) +LOCAL_REQUIRED_MODULES := \ + PFWScriptGenerator.py \ + hostConfig.py \ + test-platform_host \ + remote-process_host +LOCAL_MODULE_CLASS := EXECUTABLES +LOCAL_IS_HOST_MODULE := true +include $(BUILD_PREBUILT) + ################################################## diff --git a/tools/xmlGenerator/hostDomainGenerator.sh b/tools/xmlGenerator/hostDomainGenerator.sh new file mode 100755 index 0000000..00bde35 --- /dev/null +++ b/tools/xmlGenerator/hostDomainGenerator.sh @@ -0,0 +1,218 @@ +#!/bin/bash +# +# INTEL CONFIDENTIAL +# Copyright (c) 2013 Intel +# Corporation All Rights Reserved. +# +# The source code contained or described herein and all documents related to +# the source code ("Material") are owned by Intel Corporation or its suppliers +# or licensors. Title to the Material remains with Intel Corporation or its +# suppliers and licensors. The Material contains trade secrets and proprietary +# and confidential information of Intel or its suppliers and licensors. The +# Material is protected by worldwide copyright and trade secret laws and +# treaty provisions. No part of the Material may be used, copied, reproduced, +# modified, published, uploaded, posted, transmitted, distributed, or +# disclosed in any way without Intel's prior express written permission. +# +# No license under any patent, copyright, trade secret or other intellectual +# property right is granted to or conferred upon you by disclosure or delivery +# of the Materials, either expressly, by implication, inducement, estoppel or +# otherwise. Any license under such intellectual property rights must be +# express and approved by Intel in writing. +# + +set -ueo pipefail + +# In order to dispatch log properly 4 output streams are available: +# - 1 info +# - 2 error +# - 3 (reserved) +# - 4 standard +# - 5 warning + +# Leave standard output unmodified +exec 4>&1 +# If the verbose long option is provided, output info log lines prefixed on stderr. +if test "$1" == --verbose +then + shift + exec 1> >(sed 's/^/Info: /' >&2) +else + exec 1>/dev/null +fi +# Prefix all warning and error log lines and redirect them to stderr +exec 5> >(sed 's/^/Warning: /' >&2) +exec 2> >(sed 's/^/Error: /' >&2) + +# Get script arguments +PFWconfigurationFilePath="$1"; shift +CriterionFilePath="$1"; shift +xmlDomainFilePath="$1"; shift + +# Set constant variables +testPlatform="test-platform_host" +remoteProcess="remote-process_host" + +hostConfig="hostConfig.py" +PFWScriptGenerator="PFWScriptGenerator.py" + +TPHost=localhost +PFWHost=localhost + +HostRoot="$ANDROID_HOST_OUT" +TargetRoot="$ANDROID_PRODUCT_OUT/system" + +# Global variables +TPSocket=5003 +PFWSocket=5000 + +tmpFile=$(mktemp) +testPlatformPID=0 + +# Set environment paths +export LD_LIBRARY_PATH="$HostRoot/lib:${LD_LIBRARY_PATH:-}" + +# Setup clean trap, it will be called automatically on exit +clean_up () { + status=$? + echo "Clean sub process: $testPlatformPID" + test $testPlatformPID != 0 && kill $testPlatformPID 2>&1 + rm "$tmpFile" + return $status +} + +trap clean_up SIGHUP SIGINT SIGTERM EXIT + +# Create a symlink link to rename a library. +# Eg: /lib/ contains the lib mylib_host.so but it must be found under the name +# mylib.so. linkLibrary mylib_host.so mylib.so will create a symlink in mylib_host.so's folder +# called mylib.so, pointing to mylib_host.so +linkLibrary () { + local src="$1" + local dest="$2" + local path=$(find $HostRoot/lib -name "$src") + if test "$(basename "$path")" != "$dest" + then + ln -fs "$src" "$(dirname "$path")/$dest" + else + return 1 + fi +} + +# The retry function will execute the provided command nbRety times util success. +# It also sleep sleepTime second between each retry. +retry() { + local command=$1 + local nbRetry=$2 + local sleepTime=$3 + local retry=0 + while ! $command 2>/dev/null >&2 + do + (($retry < $nbRetry)) || return 1 + retry=$(($retry + 1)) + sleep $sleepTime + done + return 0; +} + +# Configure the PFW main config file for simulation +formatConfigFile () { + "$hostConfig" $PFWSocket "$(dirname "$1")" <"$1" +} + +# The initTestPlatform starts a testPlatform instance with the config file given in argument. +# It will also set the PFWSocket global variable to the PFW remote processor listening socket. +initTestPlatform () { + # Format the PFW config file + formatConfigFile "$1" >"$tmpFile" + + # Start test platform + $testPlatform "$tmpFile" $TPSocket 2>&5 & + testPlatformPID=$! + + if ! retry "$remoteProcess $TPHost $TPSocket help" 2 0.1 + then + echo "Unable to launch the simulation platform (using socket $TPSocket)" >&5 + return 4 + else + echo "Test platform successfuly loaded!" + fi +} + +# Execute a command for each input line, stopping in case of error +forEachLine () { + xargs -I@ sh -c "echo \> $1;$1 || exit 255" +} + +# Configure test platform (mainly criterion) and start the PFW +launchTestPlatform () { + local TPSendCommand="$remoteProcess $TPHost $TPSocket" + sed -e 's/InclusiveCriterion/createInclusiveSelectionCriterionFromStateList/' \ + -e 's/ExclusiveCriterion/createExclusiveSelectionCriterionFromStateList/' \ + -e 's/[[:space:]]:[[:space:]]/ /g' "$CriterionFilePath" | + forEachLine "$TPSendCommand @" + + $TPSendCommand setFailureOnMissingSubsystem false + $TPSendCommand setFailureOnFailedSettingsLoad false + $TPSendCommand start + if ! retry "$remoteProcess $PFWHost $PFWSocket help" 2 0.1 + then + echo "Unable to launch the parameter framework (using socket $PFWSocket)" >&5 + return 5 + else + echo "Parameter framework successfully started!" + fi +} + + +startPFW () { + initTestPlatform "$PFWconfigurationFilePath" && + launchTestPlatform "$CriterionFilePath" +} + +# Start the pfw using different socket if it fails +safeStartPFW () { + local retry=0 + local nbRetry=10 + + while ! startPFW + do + (($retry < $nbRetry)) || return 1 + retry=$(($retry + 1)) + + clean_up || true + TPSocket=$(($TPSocket + 10)) + PFWSocket=$(($PFWSocket + 10)) + echo "unable to start PFW, try again with socket $TPSocket and $PFWSocket" + done +} + +deleteEscapedNewLines () { + sed -r ':a;/\\$/{N;s/\\\n//;ba}' +} + +# The PFW looks for a libremote-processor.so library, not a libremote-processor_host.so +linkLibrary libremote-processor_host.so libremote-processor.so + +# Start test platform and the PFW +safeStartPFW + +PFWSendCommand="$remoteProcess $PFWHost $PFWSocket" + +$PFWSendCommand setTuningMode on + +# Send the xml domain tunning file +$PFWSendCommand setDomainsWithSettingsXML "$(cat $xmlDomainFilePath)" + +# Send the extended domain description routing files converted to pfw commands +m4 "$@" | + "$PFWScriptGenerator" --pfw | + deleteEscapedNewLines | + forEachLine "$PFWSendCommand @" | sed '/^Done$/d' + +# Export the global xml domains description +$PFWSendCommand getDomainsWithSettingsXML | + # Delete trailing carriage return and format absolute paths + sed -r -e 's/\r$//' \ + -e 's/(xsi:noNamespaceSchemaLocation=")[^"]*tmp/\1/' >&4 + |