summaryrefslogtreecommitdiffstats
path: root/src/build/tools/sbePatchUtility.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/build/tools/sbePatchUtility.py')
-rw-r--r--src/build/tools/sbePatchUtility.py179
1 files changed, 179 insertions, 0 deletions
diff --git a/src/build/tools/sbePatchUtility.py b/src/build/tools/sbePatchUtility.py
new file mode 100644
index 00000000..b5103610
--- /dev/null
+++ b/src/build/tools/sbePatchUtility.py
@@ -0,0 +1,179 @@
+#!/usr/bin/python
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/tools/sbePatchUtility.py $
+#
+# OpenPOWER sbe Project
+#
+# Contributors Listed Below - COPYRIGHT 2016
+#
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+# IBM_PROLOG_END_TAG
+'''
+###########################################################
+# @file sbeCmvcUtility.py
+# @author: George Keishing <gkeishin@in.ibm.com>
+# @brief Utilility Module to Patching files for SBE simics
+#
+# Created on March 23, 2016
+# ----------------------------------------------------
+# @version Developer Date Description
+# ----------------------------------------------------
+# 1.0 gkeishin 23/03/16 Initial create
+###########################################################
+'''
+
+#-------------------------
+# Imports
+#-------------------------
+import os, sys
+import time
+import os.path
+import subprocess
+import shutil
+import hashlib
+from subprocess import Popen, PIPE
+from os.path import expanduser # for getting $HOME PATH
+import stat # for File permission op
+
+# Libraries/utility funcs and user define const
+import sbeCmvcConstants as errorcode
+import sbeCmvcUtility as utilcode
+
+##########################################################################
+# Function : utilPatchSimics
+#
+# @param i_sandbox_path : Sandbox full path
+#
+# @param i_sandbox_root : Sandbox RC root path
+#
+# @brief Patch pre-req patches for simics
+#
+##########################################################################
+def utilPatchSimics(i_sandbox_path, i_sandbox_root):
+ print "\n ... Patching simics files "
+
+ sb_name=os.path.basename(i_sandbox_path)
+
+ # Write the hooks for sim setup
+ l_sim_file = utilShell_hooks(i_sandbox_path)
+
+ if not l_sim_file:
+ return errorcode.ERROR_HOOKING_FILE
+
+ l_sim_cmd = "workon -m ppc " + sb_name + " -c " + l_sim_file + " -rc " + i_sandbox_root +"/sbesandboxrc"
+ print " ", l_sim_cmd
+
+ os.system(l_sim_cmd)
+
+ # Copy action files. As we are taking actions files from ppe, copy them here
+ # so that any workaround necessary can be applied over them in pre-simsetup path
+ # mkdir -p $SANDBOXBASE/src/simu/data/cec-chip
+ # cp $SBEROOT/import/chips/p9/sw_simulation/* $SANDBOXBASE/src/simu/data/cec-chip || exit -1
+
+ print " [ Copying action files to fips Sandbox ]"
+ # Ge the Sandbox base
+ sandbox_base = utilcode.utilFind_ENV_string("SANDBOXBASE").rstrip('\n')
+ sandbox_path = sandbox_base + "/src/simu/data/cec-chip"
+ cmd = "mkdir -p " + sandbox_path
+ print " * Executing : ",cmd
+ os.system(cmd)
+
+ # Ge the ppe root
+ ppe_base = utilcode.utilFind_ENV_string("SBEROOT").rstrip('\n')
+ ppe_path = ppe_base + "/import/chips/p9/sw_simulation/"
+ p_cmd = "cp -f " + ppe_path + "* " + sandbox_path
+ print " * Executing : ",p_cmd
+ rc = os.system(p_cmd)
+ if rc:
+ print " ERROR rc :",rc
+ return rc
+
+ return errorcode.SUCCESS_EXIT
+
+##########################################################################
+# Function : utilExecuteShell
+#
+# @param i_ppe_root : Root folder for PPE. This script must be
+# from PPE repo.
+#
+# @param i_sandbox_path : fips Sandbox path
+#
+# @param i_shell_file : User defined shell script name
+#
+# @brief Apply the simics patches pre define in shell script.
+#
+##########################################################################
+def utilExecuteShell(i_ppe_root, i_sandbox_path, i_shell_file):
+ print "\n ... Executing shell : ",i_shell_file
+
+ # Sanbox name
+ if i_sandbox_path != "None":
+ sb_name=os.path.basename(i_sandbox_path)
+
+ # Find the file and execute
+ l_path_name = i_ppe_root + '/src/build/'
+ l_shell_path=utilcode.utilFindFile(i_shell_file, l_path_name)
+ print " [ %s ]"%l_shell_path
+
+ if i_sandbox_path != "None":
+ # Load the shell onto the Sandbox env and execute
+ l_shell_exec = "workon -m ppc " + sb_name + " -c " + l_shell_path + " -rc " + i_sandbox_path.replace(sb_name,"") +"/sbesandboxrc"
+ else:
+ # Execute a stand alone script
+ l_shell_exec = l_shell_path
+
+ #rc = subprocess.call([l_shell_exec])
+ rc = os.system(l_shell_exec)
+ if rc :
+ return rc
+
+ return errorcode.SUCCESS_EXIT
+
+##########################################################################
+# Function : utilShell_hooks
+#
+# @param i_sandbox_path : Sandbox full path
+#
+# @brief find the ENV string set in the env
+#
+##########################################################################
+def utilShell_hooks(i_sandbox_path):
+ # Find the simics machine from ENV
+ l_machine = os.environ['MACHINE'].rstrip('\n')
+ print " Machine : ",l_machine
+ l_cmd_exec = 'start_simics -no_start -machine ' + l_machine + ' -batch_mode '
+
+ # Write the compile shell hook on the fips sandbox location
+ hook_file=i_sandbox_path + '/src/simsb'
+ f = open(hook_file,'w')
+
+ # simsb: This hook schell script will look like this
+ #
+ # #!/bin/sh
+ # start_simics -no_start -machine NIMBUS -batch_mode
+
+ f.write('#!/bin/sh \n')
+ f.write('\n')
+ f.write(l_cmd_exec)
+ f.close()
+
+ # Change the file permission for execute
+ perm_st = os.stat(hook_file)
+ os.chmod(hook_file, perm_st.st_mode | stat.S_IEXEC)
+
+ return hook_file # path of the shell file
+
OpenPOWER on IntegriCloud