各位大大好: 5 g/ G2 D, n4 r 小弟執行nanosim時,卻無法跑出視窗來,有個錯誤可是我不清楚該如何解決?問題如下 " F' `1 \, N! ^3 J. @) T: f [: 113: 64: unexpected operator' }3 Z F( v, L
/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim: 1: Syntax error: Unterminated quoted string ( a! T5 @, B2 s! b1 J( H有大大遇過這方面的問題或是指導我方向去解決, 謝謝. 3 z& ~* y K5 R8 q
我在猜可能是這個檔案內的文字需要修改 但不知道該如何修改?& }2 m; ~- v+ m' {) F
以下為/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim 的檔案內容:( c" Q7 z% J9 i! y
#!/bin/sh 5 l' V. X8 U& E& Z. Q#$ a$ y% [# o6 s- M8 V5 e
# Copyright (C) 2001 Synopsys INC* a- y/ X3 `& J3 E8 A0 c1 q
# EPIC Dynamic Simulation Wrapper (DSW)" w# W* Q! E# V5 o+ U5 O& u, D# P
#9 X5 c- }0 Q. C& G j+ f, O
eval ${DBG_EPIC_WRAPPER:+"set -x"}& H9 U. m/ n# ]4 \- ^
9 p6 W& Q6 B, ?* c) e; C, E
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then. Q3 E5 \) h. O# h7 _4 ]
TEMP_ARCH="$SES_ARCH" ! u0 `# f+ b) Delse # @; ~0 D( p0 ]+ w TEMP_ARCH="$EPIC_ARCH" 2 c$ ]9 E+ L( Q9 Z$ n0 k, nfi! B+ _% t1 q" d4 l4 u8 ?, H
8 }/ S% C5 C2 x0 B/ ]$ E0 P& uscan_for_hva_args()$ j/ u: i) m: x5 F8 z. W e& F
{. \) D3 E* {! x/ G1 `/ n
/bin/rm -f hva.init 1>&2 : V* A/ a. y' a- H/ m while [ $# -gt 0 ]; do D! `9 |3 [5 Q* x case "$1" in 9 b+ X0 `, }: y) K -vaf) 6 t5 V* X0 A" J( q1 O* i/ G0 P have_vaf_flag=1 ! Z# R* m9 k, v- i7 T& w9 [* L _ have_va_flag=0$ ~( Z2 h# x" K% e
shift;/ S' P0 L5 D" ]0 X; G0 n
continue; ) }' R) N* K, Q8 t ;;* K2 q$ \+ X' B( e
-va) * I7 ]* Q! H- Z" { have_va_flag=14 n: E8 a( E1 ]! `8 L
have_vaf_flag=0 4 h& n8 M1 v2 j7 i9 \$ _/ _6 S shift;% J) a. ^! F$ o1 [. L1 S5 H3 h! r
continue; 5 R; f* F' R9 q$ h% { ;; 3 Z! w- I1 I- f3 C9 F @( C5 \ -*) $ Y& d8 W e4 d% n' S ARGV="$ARGV $1"4 ]9 y! _( f' r9 ?
have_va_flag=0" D1 M7 [+ R7 R, v0 j- V9 Z
have_vaf_flag=0 + p! o# P! I7 h: ~) ` shift;; I% p" K: f6 j* S* L" f
continue;8 j+ H: r+ O( J7 C4 c, n
;; ) G% B, \! q% W2 a8 o1 e# u *) & J, v% F" {; x, P6 ?9 N* u if [ x"$have_va_flag" = x"1" ] ; then 2 Z: V; L4 j0 _* h
VA_FILE="$VA_FILE $1"/ u! k8 W6 F: z$ q( c+ I: q: b9 B. g- G
elif [ x"$have_vaf_flag" = x"1" ] ; then , D4 X- u/ S2 L& d0 F$ E0 p
X="`cat $1 | sed -e '/\;/d;`" 5 p0 O8 C7 m3 C3 Y for token in ${X}; do 4 Z$ D# z+ ?; Z ]/ i Y0 R VA_FILE="$VA_FILE $token" ; B2 P- U1 T& ^+ \5 c) T done & A2 X# I3 H) p, ]1 x+ B
else& n1 ~1 x( l8 C
ARGV="$ARGV $1"" b' l6 _: v O4 p' X! T
fi% R6 W% h) \! D3 B; s( D, r, ~3 u D
shift;5 a c0 e$ r' v: Z- @% B5 Y
;;9 d* x6 M5 m' A( [" q% [$ b
esac 3 X2 L' y: z* n/ l% ]8 V4 E done( G3 E! ^% N6 u7 Y& n
% J! D7 H5 v- f/ J; f# t6 r
if [ x"$VA_FILE" != x"" ] ; then + E4 l. {2 N% v/ z: J4 S
## /bin/echo " xxx ARGV $ARGV", s$ t. }& z! u9 N1 V
/bin/echo "choose nanosim $ARGV ;" > hva.init : {- Z& F" N# M echo vcs +ad=hva.init $VA_FILE -o simv ; p0 ~! a. ]- ]5 w5 B h vcs +ad=hva.init $VA_FILE -o simv U# K. p" b9 ~' Z" f. z9 N exe_status=$?9 X. s2 ?* u% Y- K
if [ $exe_status != 100 ]; then : g( F" ]' ]6 L' z0 F /bin/echo ""+ T- e. H, H- v, |
/bin/echo "ERROR: Execution of vcs exited with code $exe_status"/ @/ h& j. t3 K' Z
/bin/echo ""- n; G+ ~- b3 i/ r4 d' I. l
exit $exe_status . Y2 @- i6 W" ^6 A2 f fi 4 w% o& J- Q0 q$ A) @8 A! K" [ hva_files="-n simv.daidir/amsVD.ntl simv.daidir/amsWRAP.spi"8 o$ [6 V6 J% Z
ARGV="$ARGV $hva_files" `) k9 X6 v/ K3 x! Y% b) T
fi: I/ a' s# C7 o/ G$ f
} 8 b- ~; E# `; E9 F: ~#-------------------------------------------------------------------------) ^- H' ?7 S. O9 W
p+ |6 M- B1 b% k! P& |cleanup()% |7 m( |1 ]4 q1 w* {# J
{9 {1 Y+ M, i/ F. g0 L5 X
if [ -d "$rundir" ]; then , V/ |4 q& k+ T- X! b # On AIX, a .nfsXXX file is created if libModel.o is removed4 Q- X0 g' n7 t5 B6 e
# so .epicrun is not removed because directory is not empty. # `3 l4 R S0 S/ T # Solution is to remove it again if the first rm failed) x% t9 d# Y% i1 \6 Y# |
# (rm -rf $rundir || rm -rf $rundir) 1> /dev/null 2>&1 0 [% T; B4 `6 B! G1 I! q if [ "$EXTRA_CAPACITY" = "YES" ]; then 0 y- | M* G; K chmod u+x $rundir/rpcidfile8 ?, N) n- r2 }, m$ B. M
$rundir/rpcidfile 9 U3 R6 h2 I- c9 [ rm $rundir/rpcidfile! |( s( a5 m3 k7 a" @7 G$ N
fi 7 x* h, s+ a% O |. M' Z3 n! Q' S' ] rm -rf $rundir5 \' \9 S' J$ F. T) ?; B; j
, s- d* Z/ g7 E7 j1 c+ r
#Due to NFS problem, we have to copy files needed to + a# p7 I9 k. S& |- b0 I& d8 u #/tmp/<temporary directory>, then symlink's files 2 g! r: F) M/ {3 A #to the local temporary 'rundir'. This avoids the problem) \: j: Z/ G+ \+ m2 c
#to remove 'rundir' ! L8 w+ a* ~0 r0 o2 B1 @ if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then . i, _9 m8 ~! V$ q ] if [ -d "$tdir" ]; then ! ?8 H8 X% p3 t8 k+ ^: |# `* I' D$ L rm -rf $tdir 7 O0 G- F- i/ ]: V/ _$ m$ o fi % m( j, q1 @- q) _5 B; I fi - c8 p$ ?, L2 e- P fi 9 }6 N) ]4 ^6 u if [ ${exitstatus:-0} -eq $ld_err_code ]; then: m( G, N% @ b0 g
[ "$has_model" = "YES" ] && rm -f $cwd/libModel$suffix / f$ t5 L4 K2 \2 ]0 e: K9 X [ "$has_custom" = "YES" ] && rm -f $cwd/libCustom$suffix , J$ m" K Q Z+ g- z fi7 F; v) V G, D
[ -f "$EPIC_SCRIPT_MESSAGES_FILE" ] && rm -f $EPIC_SCRIPT_MESSAGES_FILE 1>&22 a$ i b9 g3 V3 _- K
exit ${exitstatus:-0} ' o2 k; [& b# E8 k# h}) W0 }2 o* `3 Q! X3 l" X5 Y; Z
/ H+ u# Z. c2 h7 lExit()/ b. w% O Q& w8 g0 X7 J
{ 0 y% h4 _" q& e6 v+ K exitstatus=$1' c# ]# N3 C% K8 h# l
exit $exitstatus3 X T' B! x3 d2 d$ \
} 0 R- ]& E$ d3 G! H% L5 M$ a3 H0 m0 s1 R+ ~0 j- g6 M; i5 u+ g5 O9 R
# get_epicrc filename keyword 3 X7 S }+ G- y1 Uget_epicrc()0 }* O0 n) z3 h! l
{ " o# V: k) k+ B8 w+ h- E8 Y2 a [ -f $1 ] || exit 0 X x7 b2 Q, e, q* t( R key="/^$cmd2:/{print \$3}" ) o& D k' M* [3 ~0 k' b" L" t awk -F":" "$key" $1 # q; N9 c& e# o- l7 ^( Q) a} P& x' r/ Z# d8 v9 E' F/ L
; c" v% Q7 c& W7 x5 I5 Z
#- x# y$ ~7 r& R) F6 f
# set datasize limit to hardlimit ) s, S- q: S- g8 C7 ?2 H# ( C8 d2 M+ n" D, ]( ]set_data_limit() ' f0 u6 w# [# K: C! [" g5 \# W7 S" C{9 T/ C+ I T: W: ~
dbglimit=0 : J' Y7 Z* D; ^8 z2 x! X# I hardlimit=`ulimit -Hd` ; \; K2 D8 D# g softlimit=`ulimit -d` ! c! M6 r) X W1 N7 L% z6 P desiredlimit=3500000' m7 z1 D$ \4 T8 m/ |4 [7 v
hardisunlimited=0* ^8 m; a+ `5 g
softisunlimited=0 4 c6 \6 i: `/ I# A# e4 S is64=0 " H% M6 n: e \6 t# u! ^( Z : W# r# s* F- ?' R case "$EPIC_ARCH" in6 T5 }# E) l3 w* Q8 H E$ ~
*SUN*64)! H) q3 B7 j2 M( t
is64=1 9 l L* U1 r5 @& T ;; 7 a! o8 x$ k4 x8 e: ?) o; S amd64)% l/ f$ q2 ^+ e1 l
is64=1 8 l+ b) Y/ c- L8 A6 ?" U! [! }/ b. f ;; ( n* E) M; W" q* t( e" L x86sol64) 7 S0 j/ v) q" q( s is64=1. P' C3 y$ A) T+ R: t
;;9 x9 k1 _. `" ^4 r; {, K- }
aix64) , V6 z% G7 @! A" q' ~, p: _ is64=1 5 N) d, K* I; _' s. E0 h$ F( g ;;; @, n; z, B/ ` [, P# H; \
suse64) / E' a0 C) g7 | o; Z+ K- D is64=1 : ]1 Z6 i8 e0 A3 f# t ;;: s7 @6 E5 X# ^. z
esac 3 p! t- u7 _1 W* ]- y2 V ' t! I$ ?9 @& [2 D2 a) d) W3 y if [ $dbglimit -eq 1 ]; then! f" |* \- E+ A$ k: h+ ]
echo hard $hardlimit soft $softlimit% V/ |$ f" Z# M: P+ v2 f p: X
fi , S# D/ g: G! ^& j$ [' n q+ P. C0 T' K% R4 u- Z! \) g0 S# d
if [ x$softlimit = "xunlimited" ]; then4 {. [9 r# E$ h: C; w
softisunlimited=17 M- z) f4 c( v- B. x3 W1 Y( G2 T
fi* L: t$ V7 ?& V
. j- k7 w7 e: J- Z5 ^ if [ x$hardlimit = "xunlimited" ]; then , E" |- ?* o, y, z: f1 A( H2 O/ P hardisunlimited=1 8 r/ b1 d( v! Q- \. k* o fi* \! K8 N9 z7 p$ J) Y+ j
6 b( I5 Q/ M' n* g; Z- F7 t5 a
# 64 bit machine should have bigger than 4G ' U0 S5 L0 A, g( X2 K if [ $is64 -eq 1 ]; then' b* F# C# J! x/ Y6 d( T, ]
desiredlimit=5000000 ) n; \2 x. U3 A; u$ |- o. o7 H fi 3 }% x6 ]$ u: [) B; O# k" m1 I4 ^( f
if [ $hardisunlimited -eq 0 ]; then - _* V3 H9 I( }6 g- Q7 [, f' ?; t if [ $hardlimit -lt $desiredlimit ]; then ; }% V' ]; Z) `2 ]1 c echo "WARNING: datasize hard limit $hardlimit K is too small." 3 i& G6 `0 Y3 h! o6 K fi! n0 d! Q; L5 ?9 N0 }- Z
fi+ B8 f2 m" J. ]; m" M, ]
* T, A8 z) U& q' y5 k2 t
if [ $hardlimit != $softlimit ]; then, L5 H* T7 _$ i1 r1 H9 e6 C. e
ulimit -Sd $hardlimit. K+ Z5 R( P* \" D1 D$ d" Z
# echo "WARNING: datasize limit is set to `ulimit -Sd`" + f% J- \# L& ^& o) H fi" a4 `0 T4 ~: L. ^' G9 j
, S+ _- C* I2 N0 f2 U; o, i W! L
if [ $dbglimit -eq 1 ]; then& a. @( y1 d- T5 ^* S% X
echo datasize hard limit: `ulimit -Hd`8 S9 V- |$ M. e% ] `' d, P) u
echo datasize soft limit: `ulimit -d`( u, @+ e6 P; r) m2 T
fi % @1 Y- D4 `) p& h1 M}4 @& W8 r" Z* E: L
: D G2 n2 v. u- W#1 l2 D) m3 t8 ]3 C) A0 U: M: q
# set stacksize limit to desired limit % H3 m( R4 G% k' j# 2 I. G4 ?) ^( _- _' }$ {# [set_stack_limit() " t T; K8 q4 j6 ]* Y f{ " T( P# K; a+ ^8 Q dbglimit=0 : k0 @. ~) ^6 S9 A hardlimit=`ulimit -Hs`# w1 B) G6 W0 Y. U
softlimit=`ulimit -s`- u( q% J$ R# R N6 f
desiredlimit=60000 + r. F7 X0 j' ~% i1 ~$ H hardisunlimited=0 3 }( G( P, u0 q softisunlimited=0 + ?0 |$ q, D0 W* M* [ is64=0 " h0 o$ D' p7 ^* o* [% ~' c h$ S8 u& w4 p7 A( y8 i- z& Y# s
case "$EPIC_ARCH" in* J/ i3 H. R' ?- K
*SUN*64) + Q5 |& z) S/ g r/ S& J$ `9 _ Y is64=1 0 y( D6 s8 n _6 S. S' V ;;2 `" ^- `; U+ j/ l* L2 n) T
amd64) 8 Q0 w1 y! M3 D% ^8 }7 [- y2 U U/ f is64=1$ D8 y1 |, Q, e2 A8 p: B
;;' R2 o7 N' W6 E. v, ^$ U
x86sol64). D7 y0 [% }6 T) x. @9 e3 F
is64=1 5 ?* N4 o: P T* ?+ ]( X X2 M ;; - V6 _6 t# L. t. @: L; c aix64)/ }8 f& l& {7 {* z+ A, a
is64=13 U' n N3 h5 g* j
;; + K$ X; k8 R: W ]# g( f1 c, s suse64) $ m# _- w* r! @6 e, R is64=1# b# p' `9 W# D; g/ v8 H5 f7 R+ L
;;8 ~8 j8 A8 ^# g
esac 3 x! G" @) l6 g' ]2 M7 a8 K% k2 ~. X& w$ |
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then, G! m. q" _8 M* c2 f! z4 l' T
if [ $is64 -eq 1 ]; then2 i: h+ u6 S8 {6 p' v
desiredlimit=200000 7 P, n3 e, ]$ x J, y# G fi 0 e8 L. A+ r: Pelse. s$ ^3 W/ _& c! l1 q
case "$EPIC_ARCH" in 3 `6 D( O! x4 _& C H) f *SUN*64)+ o0 e0 W- n* R# O- O- l
desiredlimit=200000. {- E+ e6 d* T0 ?/ G2 m7 E
;; $ z6 [5 [/ D" a esac8 g M/ s6 J6 ?$ {9 W# u' x$ m
fi& O% {0 q {% H/ T! t
- _8 M0 Q+ _) K4 m4 ~3 z if [ $dbglimit -eq 1 ]; then& ~/ M1 w. V4 m
echo hard $hardlimit soft $softlimit , G6 }4 F5 {1 G fi) N% E1 Q1 }, U6 u: D
7 P' Z7 ]3 T7 E
#stacksize can not be unlimited, pick smaller number- b' v, D3 J' L) p4 l
, [* I2 ?$ _/ m4 `: d
stacklimit=$desiredlimit' _) T. h6 N5 ~: H, i
* q1 Q* j; J$ a( {3 d% `. `1 d$ r$ C if [ x$hardlimit = "xunlimited" ]; then' q0 N( m; r+ E8 \8 y) L
hardisunlimited=1 ! J+ a! P2 B, n. _5 f fi O U, j5 P( J- R8 \. ^; b1 r
/ }, J, O" T. r8 }; Q6 M% N. Z: Q
if [ x$softlimit = "xunlimited" ]; then # ~( I" e! s1 D8 }' r+ h softisunlimited=1 : E2 x# v7 r! A7 ?1 f7 V/ N fi 5 K2 m, _& M( k, w5 E) P! b5 B " f: q0 @/ X. f: B* \, z if [ $hardisunlimited -eq 0 ]; then 7 J' s8 f; v7 m" |) l if [ $hardlimit -lt $desiredlimit ]; then ) g1 k3 o, p5 q; j. b echo "WARNING: stacksize hard limit $hardlimit K is too small." ; \. }! x' J+ V, S' O9 s desiredlimit=$hardlimit 3 O, K; }7 f" N( H7 P) W, \1 ` stacklimit=$desiredlimit" m9 r9 i- `7 G
fi . I2 C) _8 Y/ \0 i# n0 o4 v fi % F s$ n' n* M7 X8 M6 s' t9 }) V* R* v8 ~9 C8 y
# desiredlimit is set to proper value (< hardlimit) - k; q6 X7 ^7 p" e9 ^* E* c& c( [# P! ]* P* W1 x+ c
if [ $softisunlimited -eq 0 ]; then5 [6 M) C, M' m
if [ $softlimit -gt $desiredlimit ]; then; s8 Q, q/ E# W5 [" ]
stacklimit=$softlimit * ?8 A/ m! O3 A, Z" Q fi $ m4 a' g T7 j fi+ y( U$ W; A+ T3 L# R2 i
8 X3 {* [3 F0 L; ?3 y if [ $softlimit != $stacklimit ]; then 7 ^0 I+ e6 I% n+ [$ u0 K- M: _. p ulimit -Ss $stacklimit2 J- z; J8 q' V0 f- r
# echo "WARNING: stacksize limit is set to `ulimit -Ss`"& N: z! U& s' J% n; ?. O+ z: D
fi * n0 r7 V1 p/ X2 r' F& C5 m1 y6 v/ @1 j( F1 Z' Q- Z! E) r
if [ $dbglimit -eq 1 ]; then 7 S1 u7 _ U% j" e) X9 @ echo stacksize hard limit: `ulimit -Hs`) t2 y0 C( f: u( p0 s# P5 @
echo stackize soft limit: `ulimit -s` ) a. v& J: e. x: |9 l3 S H [$ d fi : A7 h3 }/ W4 e: v} 7 C) M) i& j/ Q2 d: T$ y/ D1 ~$ Q N6 @" A
open_epicscriptmessages()$ g- B. m4 _$ L$ \: @# E* I* K
{+ {# q# f; Q* ]9 @- W8 K
#generate temp ".epicscriptmessages" file based on pid + z$ b0 T) @* i4 nEPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$ , h( w2 s+ q/ ^, Z% P# Uif [ -f $EPIC_SCRIPT_MESSAGES_FILE ]$ C- [! o5 b7 g' _& Q) c5 L
then " v1 `" [: P, x3 T) x4 F until [ ! -f $EPIC_SCRIPT_MESSAGES_FILE ] j3 d9 b- y1 G# g do) l' m: w( J, `- B! D1 N% d- m5 u
EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$ ) h+ I3 Z Y W; m* w3 } done. G0 o, t9 t3 L. N$ C# `9 m
fi: @" v1 H# E; {: [1 d3 _
8 }; E+ c4 P3 L- t# c2 R8 S
export EPIC_SCRIPT_MESSAGES_FILE 5 [8 m9 T$ x' y}4 w' X" a; E* \2 t+ k$ B+ G
# Y) q t+ D# O) o ' f+ Z& D; ^! X/ U, e5 m( ~+ {, ecmdname=`basename $0` 9 A3 Q+ F$ c# V* Q4 ~postgres="n") j( O; [% N+ {- |: ]
ostore="n"0 n. [) y C3 i. \0 ?* t
gui="n" / S9 f' Y- c9 f7 P |8 ddatabaseOn="n" 4 Q% M3 D" O& v9 u: [) T8 `. \# of_next=0 2 l9 l8 `" F; v- W- x- Lf_option=""% m/ A5 O3 E) k1 V! L+ h
o_next=04 Q( P0 E. d6 h3 g9 f3 c
o_option=""+ W% C* z0 C, ]0 X
workDir="". q; k. m/ {0 ~/ k/ E. Z
workDir_next=0 ) ^3 K d: @1 B6 _$ F- xerrFile="powrmill.err"- v/ U+ L. w! p! h( o0 A k
win32flags=""6 f" u) n2 H# Q: r) P: q
ln_default="ln -s" 1 x3 |( R+ V1 B! Y( A/ L! r. [' J6 T0 E" w6 _! J2 V0 T
har_hilo_file="". G3 W/ e H8 {( }( J6 p6 Y
have_har_flag=0 * E3 W( U% }; G _; O! Ihave_har_setup_flag=0 + p+ ^! K$ A; \4 Gis_special_har_run=06 c* G1 C( C2 P3 d1 {3 h# T; a+ l! b
har_ofile_prefix=""9 F4 C2 a7 A) z+ X5 b+ W8 n- s
" u4 ^- h! B$ H" c
have_va_flag=0; o( {# E0 V1 c* I x, w7 t
have_vaf_flag=0 ! |& s" J* s2 wVAF_FILE="" 7 l( }# B" h0 G% ?VA_FILE=""7 E8 h( f6 p. x! m- o4 ?5 Z, c* b
ARGV="" ( j( O$ I1 z* L p/ L* C5 T) A$ e$ X% p: E! ?8 h& D2 R4 w- ^, E. s
ORIGINAL_COMMAND_LINE= $ ?: I1 X Y$ h$ v3 a- \LOOP_CTRL_FILE=".ns_ba_env" # r9 R3 n+ F2 ?ALTER_HK_FILE=".alter_hkf"- n/ G) E; Z4 b3 G+ {4 z( j0 `
ALTER_COUNT_FILE=".alter_count" " H4 x+ w' v+ P) H: {MONTE_IMG_FILE=".monte_img_f" 1 L6 \$ T' N+ sMONTE_COUNT_FILE=".monte_count" * u) Y0 v4 d8 O# m- QMONTE_CFG_FILE=".monte_cfg"- l4 \8 @5 J1 _0 y3 r: D" E. t/ ]
EPIC_SCRIPT_MESSAGES_FILE=".epicscriptmessages" 3 Y' h/ M5 l& M; R6 O & U- |. X3 V+ uopen_epicscriptmessages $@3 V( j2 o) W, @3 B7 W
& A" n. C9 h0 Y* K' S3 b) }7 y3 bscan_for_hva_args $@3 ~ G7 Z ~* G- A e
5 N! `/ V8 U2 y5 v
scan_for_har_args() . a& v! _& D; m/ H6 G" O8 R{ . @7 a- M9 P4 b/ h while [ $# -gt 0 ]; do & U0 t; ]7 k2 @1 Z2 Q5 k: a6 g case "$1" in ) J( q' F& P# w: u8 b: ~ \3 k; K6 d -har)8 \' ^% s" j0 F
have_har_flag=1 - {& c5 Y( C3 O) ]. W" T [ $# -gt 0 ] && shift 7 T+ E( u% f/ [8 z( ^1 V if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then , L2 Q) W8 Y% w+ G$ V har_hilo_file=$1, S* O. Z4 k+ ^$ ? P7 T
shift 4 h& a, M- _ E& ?0 R fi E: Z: L# x, D* X
if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then b$ l$ e9 b" x
echo "Too many arguments to -har flag. Only one hilo file allowed."( w9 S$ ^7 G8 \7 L8 R: j
exit 16 e0 Y" k7 C0 j; C) P+ S& s
fi , D" u+ t" H% L3 ]. }; ]1 { break ' H8 r1 f% B- ]+ b3 \0 ^2 m% f ;;$ x3 S! Z7 q! i1 Y4 k: x" O
-har_setup) / k$ y& M# l1 J; E/ b/ K have_har_setup_flag=14 Y* [4 X- t$ b5 q' }% y
break6 {/ O" Y' M9 y# K' {& h
;; # f3 F6 R3 o$ [! _4 U$ l' Q3 h) U; y3 ? *)% w l/ j: `- ~+ F# s
shift; y5 P$ c. Y7 w- I/ O* T
;;6 f- i i! \" X
esac* ^( W% P. f/ x* u1 d
done( n1 ?/ D j$ f
}( R$ \0 m" p* B
9 o( ~& U7 _) dscan_for_har_args $@ 0 D, g& `1 a$ E+ p 3 S5 I3 ? v( Y% Lfor argv in $@1 }- Y5 S; N3 u: U5 q! x/ Q
do5 U8 G+ t8 ?7 f' l4 J: `2 x9 b) x2 d5 A
ORIGINAL_COMMAND_LINE="$ORIGINAL_COMMAND_LINE $argv"6 k% s. r- N1 }3 O2 u
if [ $argv = "-gadb" ]; then 8 ]! a4 o% ~6 S' r$ l, { databaseOn="y"- |; S4 b9 u3 C$ a3 f9 ?* w
workDir_next=1! R4 T' q) F k6 L
elif [ $workDir_next -eq 1 ]; then 6 Z7 w# q! x; _: }/ z workDir=$argv& F9 i4 ` n5 Y! Y. ~* o4 s2 t, p
workDir_next=06 f9 Q0 B4 o% g! t; h
elif [ $argv = "-ga" ]; then/ ?: e; w2 \- A" S1 ]
gui="y"7 h6 K+ v- {0 ~9 J: r
elif [ $argv = "-f" ]; then! e* D. f3 n- x9 W
f_next=1; F7 Z$ w! m* g
elif [ $f_next -eq 1 ]; then: z# R1 q/ m4 g3 t5 p( _
f_option=$argv: E6 \8 U! X; X; O. }$ k J* \& }1 B" ]
f_next=02 W, F! s2 r9 h. M
elif [ $argv = "-o" ]; then 5 \" O' `' m* y% `" ]/ a, l o_next=1 % c( f U& R+ T. E& a7 N elif [ $o_next -eq 1 ]; then/ y% \5 I9 ~/ x$ w) N9 l6 r# ~
o_option=$argv % W$ D x7 i( G, F: y% h o_next=0- u* J8 b# n& f9 W
fi4 N+ ^9 G! [- M$ \- Q& z7 e
done " K/ W5 L1 F: u+ ~echo "Command line options: $ORIGINAL_COMMAND_LINE" > $EPIC_SCRIPT_MESSAGES_FILE ; T9 h, T' Q) m0 V d
7 V6 z5 m9 j! A2 Y
if [ $databaseOn = "y" -o $gui = "y" ]; then; R k& x, U* l
if [ $cmdname = "pathmill" ]; then % l0 q$ S* M2 C5 I' w' @ if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" -o "$EPIC_ARCH" = "SUN4_SUNOS_5_64" ]; then 8 H2 G# B3 E$ W/ c ostore="y" ( \, \8 }" k! Q postgres="n"8 U; I i/ M( J G4 X2 F2 D. \$ V
else $ L$ N. \2 c, O/ t- P% s1 o9 H echo "athmill GUI is supported on Solaris platforms only" 1>&2 ) q' H% l- R8 L2 O5 f1 V$ I" z7 H exit }4 X3 K4 }% J' p0 U6 }+ a' a# L fi5 N e8 r- o2 E2 H
else 4 U" a3 E0 P) L- M+ N& c5 M8 Z postgres="y"3 F5 u. K: ^, x$ n I
ostore="n" 5 {- G& b# K0 z) _+ v6 c+ F0 } fi ; f1 g" H+ u9 H! e1 H7 C9 l- r8 e" `fi( J8 k& |2 C5 @
/ E( [5 \8 v* y2 |( B" y
if [ $gui = "y" ]; then * i) s4 }$ C9 U+ j6 |2 Z9 N if [ $cmdname = "powrmill" ]; then" G0 X+ `- N# \# {
pwga $@$ N8 w( W0 N: g" y+ k1 ~1 n2 a
exit , z% k' l; q$ m2 V2 Y( B7 {6 Q fi 0 l: }; K8 @% C* q % R6 L5 X8 u# n1 m$ v$ E T: H if [ $cmdname = "pathmill" ]; then 9 K5 D- s1 b# U* M8 B% l' H& n7 t if [ $ostore = "y" ]; then # K# E) T8 h" ~2 T+ @: b! o ./pathfinder $@ ! Y9 j6 u2 Z* T) L exit8 T4 R \* b1 t" m' N; f# ?: b
elif [ $postgres = "y" ]; then. ]$ G; c% j& v5 Q4 R( r
pmga $@ 4 i, S- Q$ J! d, K' B exit" Y. Z. n* @4 f9 e. R
fi & H% L2 U) d7 T+ g7 d fi% ^ J* q: n. ]; q8 |
fi 8 b( n0 r* N( A1 u h- H$ B' }' R% H) gif [ $databaseOn = "y" ]; then 6 W$ e, @2 d8 q1 h if [ $ostore = "y" ]; then2 A- z( l) a3 ^6 c9 r& }
if [ -z "$workDir" ]; then 6 c5 J k! n+ i# y( i7 { echo "Error: Missing argument for -gadb option" & z) d1 J/ N1 l9 w& l' a3 B' i) \ Exit 12 t% T: t1 h3 D% z* t, `& h; P4 B
fi # R9 j7 v" n3 U* R4 e( h. `: F3 x fi; u- g. `0 y% G& ^
if [ $postgres = "y" ]; then1 ?% R5 V. ^9 S: |- p( J
if [ -z "$workDir" ]; then 0 j6 p4 o- s, T+ x# } echo "Error: Missing argument for -gadb option" 8 N6 w; Q: m! S3 {3 c9 y" j Exit 11 k1 ]- g, E4 G6 a8 D" Y* i* f
fi : ^( `2 }) [/ ^% T4 m. h fi. o! k: y0 n( }& P2 G* A
fi, K8 D% R; v/ v/ D0 c
: d: z$ R. m7 G0 y) ~
if [ $postgres = "y" ]; then! F3 Y% _$ P' x$ x* \
- a9 W) B: g @; ^) I if [ -r $EPIC_BIN/scripts/gui-init ]; then: O/ y6 B) N8 ]2 C" ?. R
. $EPIC_BIN/scripts/gui-init 0 M. K5 h9 e$ ? elif [ -r $SES_ROOT/bin/scripts/gui-init ]; then$ \9 E& u' X1 k; o
. $SES_ROOT/bin/scripts/gui-init1 V% c [: S/ c" u6 H% ]3 S, Z
else8 q3 w% ~, }/ B8 H; O
echo " ** Installation in \"$EPIC_HOME\" has been corrupted!" 1>&2 , N; I; Y& i6 e echo " file bin/scripts/gui-init is missing." 1>&2 " ?" x, w- m/ Q7 g# D fi ' ^9 @. R& X- R& ?; ?( q& t D% Z" D9 w( a/ b
workfile -tool $cmdname $@$ b3 g1 D. \1 I9 [# J7 H
fi s" X7 c: l9 V8 [3 V3 A$ @7 r
" O0 } G3 z: o3 w$ \6 s/ O
if [ ! -z "$o_option" ]; then 1 k6 k" Q g5 }( g, C/ ~3 ~1 I- e) G errFile=${o_option}.err, f* s* V A8 w' f( _" n
elif [ ! -z "$f_option" ]; then z& ?( s& x1 B6 b0 V/ w X if [ -d $f_option ]; then. n+ G- P/ M3 {6 U
errFile=${f_option}/powrmill.err7 j1 p; Y M2 E" v! t
else errFile=${f_option}.err 4 B; I9 K2 l1 a( O fi 9 U8 z: m$ |" w: mfi 5 t" ]% G7 v* r3 M6 F: V! F . c; p% H& [$ K+ C: T4 _: d6 n# `; r; c; c" `0 b1 Q- p
if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then# @" d4 n" S( ]% \2 Z* R
rundir=.epicrun # L$ |. v/ F% u3 zelse # M& I2 K4 C# X% u% [4 P( W; c rundir=.epicrun$$! d$ N% `9 \/ Q3 D& W+ f
fi ( W; X2 B+ x, V% Z: x. @5 g4 e9 H' @2 J8 |: P
libpath="$rundir${EPIC_DLIM}$EPIC_DIR" 9 Y/ w8 L! F; D5 F8 a' d6 x+ j+ z3 X/ Z! t, ?
cwd=`pwd -P` 0 y8 ]2 @5 w0 U; p- v1 N/ K) K9 r2 Wif [ $cmdname = "acehdl_w" ]; then8 a! Q6 ?$ k$ C: C/ ^7 e# S$ |1 b/ N
cmd=`basename $0 .sun` % E2 y& a+ X' a) f4 N# ? cmd=`basename $cmd _w` ) o# k# t* W- r% G, D: t0 Delse# F8 c7 R- J/ w+ ]
cmd=`basename $0 .sun`: l( U) p' P; }* g) g
fi / M- {2 _" e& r ; t- d0 n. w. n {8 D/ u& G6 ecommand="$EPIC_EXEC/$cmd$EPIC_EXEX" $ I4 ~) x/ l7 P. ~[ ! -x "$command" ] && echo "$cmd: not installed!" 1>&2 && exit 1! x8 U8 J* T1 u* r. c
+ x' x8 q9 B/ e. g9 q# buildmod extracts -u/-fm options and calls genepiclib 0 B) |& I0 U+ A9 S# It also set the remaining options to variable CMDLINE ! ]) M" E" i6 M% A# look up in .epicrc for -fm & -FM parameters4 v/ S8 l C2 I4 G
* o: S% T1 f% N0 I6 t+ vfmlist1="`get_epicrc ./.epicrc user_adfm_obj_modules`", G+ o: f* n7 C# r% E9 y
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules`"5 X* v8 D& j' s! }
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules`" 8 y. ]; F+ M! H5 Y . T9 A5 q7 R5 P, E7 ^FMlist1="`get_epicrc ./.epicrc user_adfm_obj_modules_force`"$ F3 Q2 n+ ?3 B) n' M' }* S: B& P
[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules_force`" & ~6 I8 u- F) q" w: _[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules_force`"7 b H* X6 j% l1 e
) @' q! |5 t ?- ?
if [ $# -gt 0 -o "$FMlist1" != "" -o "$fmlist1" != "" ]; then % m3 w: ^( j) G9 r7 Z5 b1 S5 j+ W # note that the buildmod script will set the CMDLINE variable % p4 [4 s; P M% ^ B2 s! f1 l4 G3 e . $EPIC_BIN/scripts/buildmod : a; x0 i+ _' s# y" d7 c. y% ~1 _1 O/ J
#echo "This is the value of cmdline=$CMDLINE"5 V/ `( V) ^+ R% A$ r; y y- J
#exit 0% t1 Y' P0 H$ X! P. I$ u# P/ b
' K. Y/ E' j* D' r
# if a new timemill/powrmill/pathmill built, run the new one% z* ]- q/ _, I
[ -x "$rundir/$cmd$EPIC_EXEX" ] && command="$rundir/$cmd$EPIC_EXEX" " o6 h1 P" w7 }* ]fi ( L9 K' Z* {6 f % I; N- s2 z2 ?if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" ]; then) |' T2 X1 b+ `) D& h- V+ x0 K" k e
if [ $have_har_flag -eq 1 ]; then , h1 X5 ~* \( j7 ] is_special_har_run=1/ S$ x: [9 C+ g, N
if [ "$o_option" = "" ]; then8 c1 h* x" t: u) Y0 s3 H
case $cmd in + a5 ]& \( ` I timemill) ) E+ u/ \6 m7 H! w har_ofile_prefix=timemill$ E* [$ K9 A ?0 O$ P# X
;;; x: U. q" p$ \, R! G* t
powrmill)" L! V8 \2 B y
har_ofile_prefix=powrmill ; K( m& y6 H# b7 K( E ;;9 c% ~* c3 b( M+ Z* B6 j$ j
nanosim) / C& ^1 r5 ^: m3 } har_ofile_prefix=nanosim4 y- l. @. @( ~3 X( C! Z
;; 0 f) }/ Y0 {9 ~$ |$ _) A esac+ V' x& ?8 {. c- q7 Z9 l
else # l D' y0 X2 H3 G C2 P" P- l/ T/ b har_ofile_prefix=$o_option# X/ z3 ], W) {; C2 S
fi+ a( X1 }/ A9 ^, ^% v
fi; [9 @" e w# G
fi " z# b) @) Y. A; n b, B' \, v$ m# z8 T8 L& T) A: T
# Call Double precision version of the product if -D * W0 C& m$ q3 k0 |# or simulation time > 1,000,000 ns. 6 a7 O+ X+ ?0 v. E+ ~4 H+ e# sif [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" -o "$cmd" = "railmill" -o "$cmd" = "pwarc" ]; then 4 f- W4 Q9 H' N - T7 O: ]4 p$ L$ Y/ ~7 m # Now the binary always has the ACE feature( k, A1 U) l G0 a
USE_ACE=YES 7 Y) B: _/ y" P$ ]6 o8 v6 }7 H+ O' t/ z* ~) _2 C
HAVE_DP=NO 4 E) \. g- \" j2 g4 I; r1 ], _ EXTRA_CAPACITY=NO % O. L) [. m& a3 _ DB_REAL=${FORCE_DB_REAL:-"0"} * X0 E& ?$ m' g3 y 8 o8 k+ a" j6 {0 W3 T1 ` # Enhance for ACE ease of use 4 N ^4 |9 }6 h' U1 Z; E # If no command line option or only a -T option, do: 0 }' p+ G2 Y @% Y! G+ r # 1. set -A option 5 p, {* e. D! U+ W # 2. assume input file to be hspice ! W+ @5 h0 Q+ \' _ # 3. set -o to input file prefix - T$ |$ a, \6 X9 F, g$ [& b # 4. set -z to input file prefix # S% ^+ H3 B* B6 J( q% V. Q. H # 5. set -c to default config file 0 H# v: }( R9 q9 z. m2 \; W netlist=""6 ]) F6 y% k' m, p6 Q
minusT=NO5 }* x. J: h/ d+ ~) o, G. ]
useStdCmdOpt=0" K6 I! c. P: I! m6 F3 ^8 i$ w% e
prefix="": z! r5 @! m& C5 |" p p4 j
circuitType=""8 |1 J- w6 Q, J# a) C6 k
for opt in $CMDLINE 6 q& p) h; F. ^. i) c4 k' i$ U do " S7 N* ?& o. J" x/ i7 B+ f- s case "$opt" in : E# B7 J5 M$ U' z! Z% | -T) ) ^' ?- S% ~+ G% \3 r minusT=YES# D! _$ G9 @( s A6 E0 C9 f
;;( S; b( [% i3 V z3 W* V
-*) . j2 o) u" i# L, T # using standard powrmill command line% c( V A f3 b- i6 n. X6 N/ g$ O
useStdCmdOpt=12 y, i+ X$ u, v" K& Z6 T
break ! y8 h8 e6 |0 L' ] k7 C ;;. o" a& S2 a* P9 [
*) " h/ G' D2 {/ [0 t9 ]5 _% m, m if [ "$minusT" = "YES" ]; then7 }: d4 E5 X; p3 B# {( c
circuitType=$opt / T+ c) N2 K y4 \, | minusT=NO # reset flag7 L8 [: l5 f6 s5 B3 M# ~
else + A* K# p8 B% v3 m5 m
if [ "$netlist" = "" ]; then' x, ^) [! p+ H9 Q
prefix=`basename $opt` $ U6 P& B. P8 z; l7 D prefix=`expr $prefix : '\([^.]*\)\..*' \| $prefix`# _9 [/ w1 ?: C8 H0 _; E/ U
fi/ o$ S! M4 U0 u8 f
netlist="$netlist $opt" ~! w8 c6 [% f- s( f7 N
fi ! ^0 M2 ~3 M/ K0 Z7 `; }& K3 @ ;; ' E* t; z8 `* n2 ]8 r3 F esac# G4 C7 Y& p* @. a& k
done" W$ c9 W+ V0 S: o% ~- X0 l
' L$ d3 {. M- e5 B, x# m+ ]2 [2 ]5 D9 Y- X9 |
if [ $useStdCmdOpt -eq 1 ]; then$ {, j! F. J1 b9 ~* o
# use standard powrmill/timemill command option ' i" ^- a4 ~& \" f+ N+ j! V for opt in $CMDLINE * `8 D% w; J* t; J4 q! j# s% ` do ; O6 T. ?4 ]" J) Z- ^1 d case "$opt" in / V% Q# ]9 s" k) O
-A) }2 P0 b" z0 ]0 ~/ A DB_REAL=14 y2 a: E! E0 ` u4 N1 o
;; - G& u6 O, c1 Z; s/ S l! m& D esac V# p7 G0 }! H& k; N$ c
done ' B# G" z8 F( L5 ~# B: H# C# C3 A if [ "$netlist" != "" ]; then : o I8 H9 x# l) L' i' g" I+ r9 w CMDLINE="-nspice $CMDLINE" . Y8 ^( ]4 M; n fi 8 b& R3 d5 N- R. [+ F( Q else 2 |( V3 n" @+ u& z) B7 t2 E if [ "$netlist" != "" ]; then ; {- A, q- ^8 s8 o6 s1 E EPIC_DEFAULT_CFG_DIR=${EPIC_DEFAULT_CFG_DIR:-"$EPIC_AUXX/etc/$cmd"}1 z- {' q! K8 r r! ~
# construct new command option( e4 V+ u( k( u* y8 r6 z; q
if [ -f $cmd.ini -a "$circuitType" = "" ]; then 2 }# [# I2 R- U7 C6 B CMDLINE="-nspice $cmd.ini $netlist" 4 c! J1 _5 K- D8 M/ |6 r+ s else; m ^. F( @% |* q) g, x3 M
if [ "$circuitType" = "" ]; then ) f0 O+ W% @1 {8 h2 d6 R8 S circuitType="msana" - G8 A; ]( R! r5 p& o fi ( G* w/ ]' Z7 z: [4 |' W+ I6 V CMDLINE="-nspice $netlist -c $EPIC_DEFAULT_CFG_DIR/$circuitType.cfg" . b+ i, b' _/ ?0 D fi- q! T& T8 `7 A
CMDLINE="$CMDLINE -A -o $prefix"6 v7 M5 x0 h' b1 e6 J
DB_REAL=11 ?, S* K9 u: Z |
echo $cmd $CMDLINE : [7 d1 I( G* [ fi 4 X8 o7 T# ?, O" v fi 9 ~/ y: c, l5 o, i% Q Gfi # cmd is timemill or powrmill or nanosim or railmill or pwarc* L' q; m- h6 k+ k
& s" z1 Z) A2 O) B l
[ "$HAVE_DP" = "YES" ] && [ -x "${command}_a" ] && command=$command"_a" 5 ~' f8 w( j) }0 D1 B4 V( ^[ "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a" ] && command=$command"_a" ( c* T2 Z% @) h; R- g# u% {! i# P[ "$USE_ACE" = "YES" -a "$vlog_design" != "" -a -x "${command}_v" ] && command=$command"_v" u( R* a0 x: o7 v3 M ) J# x% {, j1 Y1 D; M- Aif [ "$__engine_wrapper_called__" != "Indeed" ]; then1 D/ b: J" k$ B ^! H6 z, [
__engine_wrapper_called__=Indeed s/ V5 k0 v9 }) |
if [ "$cmd" != "amps" ]; then1 W; o) x6 B2 a
export __engine_wrapper_called__ ' b9 P0 k# P# j8 T+ M2 H4 I fi 1 J3 W" T% J. v6 ^ z. l8 ~- H9 m& s! x& I- t8 g& ^/ B
trap "cleanup" 0" |: d- X$ g! F- b8 S$ t$ a
trap "" 2: d' v9 R/ h/ U" M# q6 `
5 b. K' t4 |1 k3 _2 @: k
[ -d "$rundir" ] && rm -fr $rundir( a# h1 b% H9 ^* {
[ -d "$rundir" ] || mkdir $rundir - Y! _ q' q4 r* c2 i( R0 O% y0 z) q# E; ?) a5 j$ {3 i a0 A+ M
case "$EPIC_ARCH" in 8 e& t$ f; p2 o/ D+ }3 r+ d' Z *SUN*64) ?( N" C- B5 g/ E& } LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"! z; u1 }$ i9 g! ^' r) [
export LD_LIBRARY_PATH+ }' }0 a6 ^6 w
suffix=.so - P8 M6 z7 v7 K% L: e7 ] ld_err_code=127% u; n9 ?8 g9 e. L, y
;;9 {) @7 W! p! _& c
*SUN*4) * ~% w& a( d! i# p: v
LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"3 ]9 L$ g7 r* {1 f/ U
export LD_LIBRARY_PATH # |' S$ T: I, @, {! h, A suffix=.so.1.09 }7 b: Q; F5 Z, s
ld_err_code=1271 r# j0 a6 e3 T) Y8 Y
;;6 N8 l! P% w7 o# a* Z" C: d$ i, @" C# I
*SUN*5) , s& W* W$ n) o& F4 U5 \! ^, e
LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH" + j5 W" e* ?& C- U: j3 b$ d export LD_LIBRARY_PATH u$ H( U8 m7 k suffix=.so) d2 J" ?. c" O' D+ K
ld_err_code=127 6 Q) F( ^- C( e5 I. ~ ;; 3 S+ k2 }3 E# x6 P x86sol*) : o3 x' B* M1 Z- T# R& x& C
LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH": J# I% P L6 D/ B6 H! t4 D) Y
export LD_LIBRARY_PATH ! p# w5 \, L9 [ suffix=.so 3 o: z- s% H+ J ld_err_code=127 + |$ ^7 o' R+ |% ~* p4 w ;; ) a6 e7 S) b& [ *AIX* | aix64) ! G& M% h7 K" S: F% W # When genepiclib creates shared objects, it creates a import file and 3 Y" S3 ^5 s& F3 o8 M # uses timemill as program. So at exec time,program timemill is needed 8 @, w9 e( t' J9 y6 c3 L# S
# in LIBPATH , \2 ^3 @- x# I. W: ^ $ln_default $command $rundir/foomill" Q) i# t4 e2 K/ J9 g3 q. t
LIBPATH="$libpathLIBPATH:/lib:/usr/lib" # s( `, A4 H R1 b0 k export LIBPATH 5 v) x: f3 J* B% ?4 E6 _$ F suffix=.o 2 f; ^+ d% v* Z% `1 `. Y ld_err_code=8 : o) H2 P$ v7 \, H I if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then l! p+ |( Q6 j- C4 ^
tdir=`echo "/tmp/d"$$` 8 l) B+ P/ w/ O c0 \9 m3 k9 c [ -d "$tdir" ] || mkdir $tdir : t* V9 e$ i! S8 m) N if [ -f $EPIC_DIR/libCustom.o ]; then 2 P4 Z$ G3 l& q- h: W cp $EPIC_DIR/libCustom.o $tdir/" Y, F( g* \$ J+ Q* J8 |: W+ H O x
$ln_default $tdir/libCustom.o $rundir/; U8 R1 O2 [9 p H
fi 0 E4 j; j5 r3 n( I6 D+ B& g; a if [ -f $EPIC_DIR/libModel.o ]; then* a$ f/ Q% y/ |
cp $EPIC_DIR/libModel.o $tdir/4 Y- ~" [5 t. l$ b: c; p: g
$ln_default $tdir/libModel.o $rundir/$ s: J0 Z" |; @, W) ]3 H! ~
fi % ], ~5 E) f5 J b' K" o, K2 h if [ -f $EPIC_DIR/libFuncModel.o ]; then1 W# V! Y$ s% D9 {( @ Q0 m, A5 J
cp $EPIC_DIR/libFuncModel.o $tdir/ Q4 B) @8 {* m- E
$ln_default $tdir/libFuncModel.o $rundir/ 8 j* ?# z' u. _, g: g/ G. ?& i fi . X/ Q: l% H- F. D) x9 y# ^ if [ -f $EPIC_DIR/libFuncModel.34.o ]; then 8 c2 e! H3 C/ `8 i- S& S3 j cp $EPIC_DIR/libFuncModel.34.o $tdir/ % x7 @9 \8 N" _- u5 e1 q $ln_default $tdir/libFuncModel.34.o $rundir/ 5 T% Y8 M: o& t9 i' t3 ] fi . j! r7 j7 D2 r$ q* e( y% E4 a) V fi5 N& X* A6 ?- @# C8 _( ]& x
#Set the IBM flag to enable more shared segids0 O2 e( ^% J& i
EXTSHM="ON"+ v4 p: a7 |2 v$ X0 {. V! i& F
export EXTSHM- C$ p8 d3 C" f
;; ) m. y5 [( [/ U+ T: E/ D *LINUX*) 7 ^: r2 v! n: V& d. v' e( ?6 }
suffix=.so 4 m9 _* l( R/ l" e ld_err_code=1# ?! n! j4 x% p& ] U. d, P2 z+ \
;; & r7 N) x9 I. O* o *amd64*) ; i9 ^' T5 \/ i suffix=.so+ r! S4 Z9 {( b/ Z9 q: q
ld_err_code=1 ( ?! ]+ K7 p# r$ `+ M0 E ;; 2 L! w0 b8 E: c *suse64*) * I. I1 I2 j& x/ w o- i7 Z suffix=.so # ?) r' W8 V& j5 r/ | k# } ld_err_code=1$ _ M3 Z: d: ~; N
;; ) W, E; A- c5 _( w7 \ *suse32*) ) J8 F, E* `- P+ c
suffix=.so+ w& p2 j8 V- I) O" H
ld_err_code=1 - ?/ q4 C" u+ @% \ ;;* t. v$ }; r1 ?/ F, w# [( U
esac/ C6 M: M7 d4 ?
! O$ U# B1 T" D/ S3 l* b [ "$has_custom" = "YES" ] && ulib="$ulib $cwd/libCustom$suffix", }8 F+ [* d/ Q3 z
[ "$cmdname" != "timemill" ] && [ "$cmdname" != "powrmill" ] \+ w6 r4 L* U8 t2 X4 Z) ?
&& [ "$cmdname" != "nanosim" ] \8 M( S! b( k* V5 D' y2 }
&& [ "$has_model" = "YES" ] && ulib="$ulib $cwd/libModel$suffix": U; q5 A: h) K. V6 ~7 L' H9 N1 `
[ "$_VA_" = "YES" ] && ulib="$ulib $cwd/libva$suffix" 2 j! I* {* T6 z# L& `& g& m # S7 S+ h( R' B0 Y- W#Look for command line option for libFuncModel.so1 `( ?7 P& ^; m7 l0 R' a
# user_library_next=0 / a( B0 L) k$ ~) h l has_fmlib="" % E8 P J6 d+ E4 z# } for opt in $CMDLINE0 m" X$ f$ h; T+ i/ C0 h& O
do 2 ~! d4 f8 x; D# C case "$opt" in % V' I7 }2 a: z3 f
-fm) " M) T# h4 I+ x5 t4 l5 v% p7 p- } N CMDLINE="$CMDLINE $cwd/libModel$suffix"* n/ V( M! \' ]: Y0 J3 C- B P
;;5 Z# W5 s; s& C. o: @ g
-fm_user_lib) 8 g( }7 @$ t: j- V; G6 n2 O has_fmlib="YES"6 x4 K6 F7 A" M, H' l
# user_library_next=14 _' Z3 t) F; H3 Y" ]% L
;;7 y6 P" Q2 W$ c: N6 b
-xc) 5 z# F" j8 r( Y$ O" d; ]: J if [ "$EXTRA_CAPACITY" = "NO" ]; then+ e( O! L1 j$ b& ?% [( D
EXTRA_CAPACITY=YES / ` p5 E& q' V; h: I: J fi6 S' K! x) z; k
;; 0 A9 r) o9 x3 O: t/ j1 m# *) . d7 r4 y, U! Q' U/ \" W s# if [ $user_library_next -eq 1 ]; then 9 \9 F+ O. S$ ~0 W: |# u$ {# if [ -f "$opt" ]; then) B6 n# \0 G4 ]( m: ~! x4 b
# libfmodel=$opt2 F2 ?2 w) a: I% ^/ l$ i' y
# else- g0 S* |+ r) v# m/ x
# echo "-fm_user_lib: Specified file not found"6 h g$ }: |2 v" u
# echo "-fm_user_lib: Specified file not found" >> .epicscriptmessages ' \! k: B' g. S; B* t# fi+ @9 A7 L) {# F( n! B
# user_library_next=0 0 x% W4 w1 K- I7 u% a, O( z# fi0 e- f; \0 Z" }' k( r0 N
# ;; _9 J) y1 M% ?% H5 h# Z8 z
esac # n0 v2 m' q9 b" j done 8 o- }& x6 ?$ d 9 s1 v- R* s' k9 ~! o if [ $cmdname = "timemill" -o $cmdname = "powrmill" -o $cmdname = "nanosim" ]; then ! Q, r$ i p7 E5 ` flib=""1 v7 d- c) ?/ v
if [ "$has_fmlib" = "" ]; then N" @0 L9 G' q+ z
flib="$flib `get_epicrc ./.epicrc user_libraries`" + g. {* r, @& P6 i flib="$flib `get_epicrc $HOME/.epicrc user_libraries`" ! l* r( w& l6 l b1 Z! B flib="$flib `get_epicrc $EPIC_DIR/.epicrc user_libraries`"2 L5 f& w5 r( x, n! P8 A1 j- P* J
fi $ h/ O5 t, p1 T1 F$ V% q fi6 W( V8 C6 s s' A
2 A/ N! o& Z( u5 `
for i in $ulib 8 D$ M" [+ I( j+ _$ t6 A do- p4 y. K+ L9 `9 i
[ ! -f "$i" ] && continue) I/ {/ U8 I# p! o5 U: Q
dir=`dirname $i`; cd $dir; dir=`pwd`; cd $cwd! w% v, R/ V2 v" J
i="$dir/`basename $i`" $ x1 }7 ]- E$ z case "$i" in 7 i0 N+ ` v& ]% w% k *libCustom$suffix*) [ "$libcustom" = "" ] && libcustom=$i;; * U" q+ e/ `: Q+ T8 }8 `& R *libFuncModel$suffix*) [ "$libfmodel" = "" ] && libfmodel=$i;;* l- q0 n1 X) v: f7 {; y
*libModel$suffix*) [ "$libmodel" = "" ] && libmodel=$i;; " W( W9 t. J! R$ N9 Y/ p3 k( h2 R *libva$suffix) [ "$libva" = "" ] && libva=$i;;% t9 \/ J- v7 S' Q- ~
esac) P' _; `, z. k. b
[ "$libcustom" != "" -a "$libfmodel" != "" -a "$libmodel" != "" ] \$ a1 |% C* b+ U% F) r2 k2 g
&& break6 R, C2 ~: Y# }$ i
done* a7 O7 O; G+ u% |3 R
' x; j* j! c$ c Q$ W
# symbolic link shared libraries to .epicrun$$ " N- W! C6 t$ p. ], w3 H3 } cd $EPIC_DIR; epicdir=`pwd`; cd $cwd: S- D; `( p2 j1 I
if [ $cmdname != "timemill" -a $cmdname != "powrmill" -a $cmdname != "nanosim" ]; then / N. q9 K1 r+ j if [ "$libfmodel" != "" ]; then: L% y, ?7 Y9 b8 X5 E
[ "$libfmodel" != "$epicdir/libFuncModel$suffix" ] && \0 b2 D3 v6 V2 }
echo "Using $libfmodel ..." && \ 4 x0 [ v+ K- y3 A$ J. A* W echo "Using $libfmodel ..." >> $EPIC_SCRIPT_MESSAGES_FILE 7 ^1 ^) j! W# g. w0 C7 J if [ -f $rundir/libFuncModel$suffix ]; then - v( Q, \0 y/ T$ {+ H$ G rm $rundir/libFuncModel$suffix! `2 y" T% S# D5 Q+ b( s5 G
fi ! {. x% d$ Y, {$ V! M $ln_default $libfmodel $rundir ; @" }3 z1 B/ P& V
fi " ~; Z% u3 {8 ] if [ "$libmodel" != "" ]; then& E& }2 ?8 p( L' o" g" ?
[ "$libmodel" != "$epicdir/libModel$suffix" ] && \* T$ U/ e- Q9 p, s( N
echo "Using $libmodel ..." && \! T$ b+ {8 l( f& ]# {2 k+ w
echo "Using $libmodel ..." >> $EPIC_SCRIPT_MESSAGES_FILE . [) `7 z: \; @1 M$ c if [ -f $rundir/libModel$suffix ]; then& f d9 d6 r1 K. g: l% D
rm $rundir/libModel$suffix) ?& d% m# _/ l8 M; p5 U, V3 O
fi8 i- f+ L T1 `& q3 U
$ln_default $libmodel $rundir + J* D$ ^ `! i7 B* a: f, j1 W: Y fi 7 d& H9 r1 W: I% w fi: _- N1 s) U$ k
if [ "$libcustom" != "" ]; then % f' e8 F @2 p6 m [ "$libcustom" != "$epicdir/libCustom$suffix" ] && \ . e$ h2 t% l, Y3 p) }" ^: ?: b5 C echo "Using $libcustom ..." 3 G& `$ P* A/ ~4 e6 t/ t if [ -f $rundir/libCustom$suffix ]; then - {. L- o4 r! K4 p' M rm $rundir/libCustom$suffix $ W0 x) U; b7 w, [ fi* T) @0 o" t2 z/ ~0 j* E ~
$ln_default $libcustom $rundir * z" d+ O2 Q* X" T4 _+ x$ J; H
fi& Y5 p$ |) B, t/ q+ {8 m6 H! R9 m
4 a* F2 }4 V: s+ ?- P W
if [ "$flib" != "" -a "$flib" != " " ]; then ) N* r! w1 A, V' H) Z2 z4 G8 O: T CMDLINE="$CMDLINE -fm_user_lib $flib" 6 N+ w: |, o/ @8 X8 w: I( P fi! {( e9 b% d+ [8 p8 `- a
6 r1 z8 ^1 _# m5 C+ L( e if [ "$libva" != "" ]; then7 b0 W4 V) v% w2 ^0 c Z
if [ -f $rundir/libva$suffix ]; then# G! v& A. z) A* S. c
rm $rundir/libva$suffix ' B8 ]5 W/ k7 Q/ J0 U+ ^ fi. W: M/ Q0 Q% ^% s7 |2 o( G( j
$ln_default $libva $rundir + ?, A" B i5 g fi 2 c. A0 K# a2 Q2 q$ V; m 1 \, {$ F/ Z: o5 c/ K" _" `, `! A( }5 a
# VCORE design library 2 x( n# e; Q9 c1 T* y1 d. u if [ "$vlog_design" != "" ]; then }, v6 l# i8 P4 d2 F9 h $ln_default $cwd/$vlog_design $rundir/`basename $vlog_design`1 [) e, d# x& D. q, B6 \# i1 {3 k
fi5 w. Q$ t9 _9 K, I3 [% O# `
' `0 d* r: b5 N
if [ "$EPIC_EXTRA_CAPACITY" = "1" ]; then + U& h% w* W2 p: ` EXTRA_CAPACITY=YES ! S8 h% N! `/ X# Q, U fi + m, H9 P( s4 i; v. T6 n! E' f. c ! m9 r$ ]' \1 k+ Q1 X [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "0" -a -x "${command}_xc" ] && command=$command"_xc" 1 N: u/ H# h1 ?- [2 g/ e" H [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a_xc" ] && command=$command"_a_xc" 0 g, A- C4 Z, |+ i0 B9 S) s3 Q #Create temp file if dual process is on 6 @5 J1 u5 W3 m/ C& `6 _6 X if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" ]; then 4 N( b& L N' | if [ "$EXTRA_CAPACITY" = "YES" ]; then " ^5 D/ Y N" u& j8 b9 l touch $rundir/rpcidfile* ~* f0 W- l" q& t, z4 N7 t
fi # W& U. b% U2 g. @9 [* s+ {) D fi 3 x6 o, O9 _7 ~0 T% F1 cfi % I, a; I' {" } 0 X* u8 t3 A2 ^& `: x8 z' S: irun_cmd() ; h1 _) U. A) o4 t{) X6 o" H& d% x
command=$1 6 l- L& V: B5 Z0 X% w0 O$ j shift& C( W- N% B+ T0 K3 V/ b, a, o
1 Q$ B: {- `. U p# c7 {/ E" U if [ x"$VA_FILE" != x"" ] ; then 0 K- l. v i, y0 h2 ^( P( v( o. J cmdline=$ARGV ) |6 o! H, |, @2 V else 1 u$ {. }2 U$ U! f+ l cmdline=$@0 x; e3 C, P# q0 V# ]5 K
fi' f6 G: \5 K" t5 x7 ~7 D$ c! @! j- g
5 x# S: [, @$ s, t debug=${DEBUGGER:+"$DEBUGGER $command"}; 0 |3 W" l/ |# {" U* b" i* z. f ' D1 z$ q9 O) a, E # To disable Exec-shield-randomize in RHEL3 U3+ when running nanosim and nanosim_a , T7 w# x4 i3 f7 _. Z- t, z2 @ # so save-restore may work. + v G g. `2 q' [( q1 ? setarchStr= a7 s: r* Y( }) Q
cmd2run=`basename $command` ) E F! E0 x1 o' ^3 ~ if [ ${cmd2run} = 'nanosim' -o ${cmd2run} = 'nanosim_a' -o ${cmd2run} = 'powrmill' -o ${cmd2run} = 'timemill' ]; then 0 c5 B# K+ ~. P, g0 f+ @ if [ "$EPIC_ARCH" = "IBMPC_LINUX_LINUX" ]; then* Z1 s2 T3 z0 M0 Z
setarchStr="setarch i386 -R " 0 k+ V" V' F& f. h fi + [9 A7 i2 ? H5 p if [ "$EPIC_ARCH" = "linux" ]; then. y' i* C: C% v
setarchStr="setarch i386 -R "% W; [$ z5 P& A! D! C; {! Z3 j
fi + {4 _" i {. D6 [ if [ "$EPIC_ARCH" = "amd64" ]; then 3 a- m0 n" q6 y% `: M% h6 N setarchStr="setarch i686 -R " 4 ^2 }4 S B: O$ M+ v; X fi0 O' Z% K" ^' o. {, E, Z
if [ "$EPIC_ARCH" = "suse32" ]; then 7 Z5 W4 b7 {' B+ T! f# r. d# N setarchStr="setarch_suse i386 -R " 2 D8 D* m# }2 W fi6 V: G. x" e2 Y8 T' a5 \8 q
if [ "$EPIC_ARCH" = "suse64" ]; then% d# I" \- x7 [% K2 l+ n5 r
setarchStr="setarch_suse i686 -R " 4 R7 s# h" E' D7 t fi # |. q5 n2 a" r. w9 S4 p* J fi( `, Z" M: i, \3 @
P! ]2 ?, s6 [) z- \! N
ret_stat=0 0 a! j( ^: T k9 |# [2 p if [ -x "$command" ]; then7 O( _. a- M+ z; d+ w P0 e W% _
if [ "$debug" ]; then( |+ X& ?/ [& \ F6 r
_debug_args_=$cmdline , J4 o# [( V( S/ v . .epic-debug/ c% C! ~/ x6 r: s9 d& f0 w6 h3 m
else7 T% W2 z# E( G7 O! M5 N6 [
DEBUGGER=; export DEBUGGER$ U" y! a; l# f" L% p% J
$setarchStr $command $cmdline 2 b) }. g& g1 t2 M fi6 C- U9 F' `% u0 S5 _# B
ret_stat=$? ! O) y9 c; F4 g1 r& t; \7 P; ^ else& N% z: [& X K% j( O
echo "Corrupt installation, executable \"$1\" not found!"3 ~3 ~5 C* `* T* }4 M
ret_stat=1 $ F4 B6 P& r+ |# E% y# A- ? fi ! N) H0 p" x" | H} 8 e0 f* c& c K# m$ J3 B! h) V ~) Z9 y3 ]' l) ^9 t# keep runing cmd if ctrl file exist5 @& z6 C2 E1 b& A
9 `, }! K% L* s
run_loop() : C2 R' U8 q! {! H{6 V% O! U, Q7 ?/ ^3 J$ ^5 F
command=$14 X! t) _; n9 ?6 e4 G L
shift% e* C5 X% l# m/ c# U+ W6 ]
2 W& y& K1 ^5 |: x( s8 t. P if [ x"$VA_FILE" != x"" ] ; then 0 f5 ?: P- K9 d, W2 Z cmdline=$ARGV7 S# ^: K' K, M2 n* n
else , a( I* \# {% r; N; A' v cmdline=$@ * N5 x: a# [4 C8 a0 S fi $ n8 k# ~, B- V4 P9 r1 k* \ " }: G2 ]7 Q$ D5 P while [ $ret_stat -eq 0 -a -r $LOOP_CTRL_FILE$$ ]; do / e* t; t( G" \% s3 `0 @& I$ r . $LOOP_CTRL_FILE$$ ( a0 s5 ^: v; w& V2 N run_cmd $command $cmdline -banner 28 N: g3 Y. C* L2 W
done;5 P# k l: M* C, T
0 Q1 o2 X/ }$ [' {
if [ $ret_stat -ne 0 -a -r $LOOP_CTRL_FILE$$ ]; then5 M& |3 z! N+ G. K, a0 v
rm -f $LOOP_CTRL_FILE$$4 i( h& C5 ?" K& ~6 f9 Z1 e( h! ^
fi c4 \8 Y$ u! ]) g5 m+ r}" C& n0 v$ k0 n; r9 g! b" z# ?3 x4 X# a
$ @0 F3 E6 A- S8 a$ r) G: Zhar_check_ret_stat() 0 x+ B1 L8 r9 n{, V% G# e2 G! c* \0 R- n& H6 }$ L" |
if [ $ret_stat -ne 0 ]; then $ v; b( l: |& V- |1 ]; d
echo "Simulator returned with non-zero exit status. Stopping."$ U! w2 f: ?2 h) E4 V7 T1 t
exit 14 ^" I' ~2 F' r. ^% B6 e% W
fi7 R$ c) C" U! F' O9 d
}( r9 u& b" G$ {5 a+ W
$ p* n5 q- l4 N! C1 d- O- u: q, R# % V& b4 f: e" N' k) s, R1 D# set stacksize and datasize limit - l2 A- \# n/ L$ H ] }6 P" @#* x5 l! j# ]/ t& [+ r; k
, u H' e" E# ^4 d% \set_data_limit 1 ^1 p+ g! E& sset_stack_limit) n4 y" `3 M% ^, ^ ?: X
( `6 b- w% E: b/ R6 K
#rm -f $LOOP_CTRL_FILE ' c/ q4 K1 l4 K) A" p* f* ?8 W3 |' V9 i4 I* D/ w0 @% u9 R `2 H: M
run_main()/ \3 k7 d0 p: X
{ $ q" E6 [8 @1 z1 R. W( O2 \if [ $is_special_har_run -eq 1 ]; then + w2 \ ~6 j- B+ ~ if [ "$har_ofile_prefix" = "" ]; then4 O9 s, `+ e/ M/ r) N. F
echo "Wrapper bug. Notify Synopsys technical support."; t+ e5 U3 ]/ }& E
exit 1 * X p, Q% l8 R2 ` fi, d; n+ P* p1 g _" w& q
if [ "$har_hilo_file" = "" ]; then 2 C0 a9 E: i+ w1 ^5 V # no user specified hi lo file - do both runs3 _. e& z8 ^4 E3 U* z) l
run_cmd $command $CMDLINE -har_one -har_setup) ]- u4 U7 G- t# o1 {: B; W
if [ $ret_stat -ne 126 ]; then 6 O4 _9 L7 C/ Z har_check_ret_stat( q8 U: g% i% N. X' t7 l& ?
if [ -r $LOOP_CTRL_FILE$$ ]; then , f6 ]) G8 d9 e. C1 T run_loop $command $CMDLINE -har_one -har_sim ${har_ofile_prefix}.hl 1 P& H) [% U, F4 J' J+ H5 \ rm -f ${har_ofile_prefix}.hl7 H5 \2 n9 D) a1 K7 Q3 w4 q( j' Z' J# T
else; p9 b8 L# H% m1 v7 {! a% L
run_cmd $command $CMDLINE -har_one -har_rmhilo -har_sim ${har_ofile_prefix}.hl, @( e0 J3 j" _ ]9 L7 [
fi , _) C( p8 _# M! }. Z, z7 J else6 r+ w3 a( s O* q! B8 G; b9 A( @
ret_stat=0 ) {5 {( \0 u, C# t1 a9 V0 q fi % c: L* e) i) T* D9 V5 v else # D1 Z% D1 O) _. C0 u # user gave a hi lo file name ! ~1 |; p+ U# A$ [ if [ -f $har_hilo_file -a -s $har_hilo_file ]; then 5 O& @$ d) s5 p0 x # file exists - use it - only do sim run: \" D7 b3 b5 T: c6 Z8 K# O K. N. C& `7 b
run_cmd $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}1 M+ y. X L: l$ _# t0 @& V* o
run_loop $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}7 |5 }9 d8 R9 M+ N. b5 D+ _
else* k- r. M6 d4 F% _. m
# no such file - generate it - do both runs , b- e& R: ?7 O; ] run_cmd $command $CMDLINE -har_one -har_fnf -har_setup9 u' t' H$ v% y8 ^! `
if [ $ret_stat -ne 126 ]; then 7 b7 y$ `9 A9 y har_check_ret_stat 2 O, y* T( P2 G if [ ! -f ${har_ofile_prefix}.hl ]; then - A- W9 x* `# ~" o5 _) @/ o echo "No hi lo file generated after setup phase. "; c2 l w) g7 r% t+ x- Z' D V8 @
echo "Contact Synopsys technical support.". v: C% |$ k g/ S) t2 U* _
exit 1 / h& U% c0 D V else 0 f' z. e# M9 M4 D z if [ ${har_ofile_prefix}.hl != $har_hilo_file ]; then/ R& ?1 D6 p! ~) R! k1 `8 ?* T
mv ${har_ofile_prefix}.hl $har_hilo_file 4 O+ c9 y& J8 C$ } fi( ]% I+ d4 H6 ^6 {4 C& y# h
fi : H0 c" @# ?5 Z9 } if [ -r $LOOP_CTRL_FILE$$ ]; then 3 {7 t! w: q' c' A3 J" l) q6 F run_loop $command $CMDLINE -har_one -har_sim $har_hilo_file4 x6 _& B8 Z$ O* V1 g
else ( L/ ] o% {$ y# N7 s run_cmd $command $CMDLINE -har_one -har_sim $har_hilo_file+ J- H4 m5 i/ A8 ?% G/ k2 Q( z
fi& E8 g/ a6 x" w) D) b D* v
else % ^ [% {/ z/ J2 Y7 s! _& n7 q; K
ret_stat=0- q2 T' b8 e6 R' g; t0 ~' @
fi0 l' w2 M) `" B3 W: y1 z# o
fi. q* a7 z& Y; _; J P9 O/ h
fi . s! H. o+ l: z, G2 i0 oelse 8 X# D# ^* Q% o* y+ z9 B6 }; {4 {
# don't loop if -har_setup - g% T/ k$ w5 B% N if [ $have_har_setup_flag -eq 1 ]; then 9 r9 ^$ X5 i6 e- w run_cmd $command $CMDLINE- n; Z# i6 \% b, ?6 W3 F8 z
if [ -r $LOOP_CTRL_FILE$$ ]; then 7 O7 [- V( `, p rm -f $LOOP_CTRL_FILE$$$ F7 ]; v% w$ w0 G1 j" G4 ~' q
fi ) }2 ~# {2 H! ] else " p, j0 w; t! p7 v \/ z& V. m" V run_cmd $command $CMDLINE 2 |$ T2 v7 X C* h- f+ z' D run_loop $command $CMDLINE 9 P( ~9 g p% a) |' C! o9 z- x, T fi# W5 j3 \7 L0 e3 r% i' X- {) Q8 v
fi ' v% C$ {. ~% i7 R1 l7 P/ H/ T9 d' h' O1 \! G
if [ $ret_stat -eq 0 -a $cmdname = "powrmill" -a $postgres = "y" -a ! -z "$workDir" ]; then . ~8 ^+ j- ?! d; { pwCreateErrDB -w $workDir -e $errFile 0 S6 h) @$ I! s' K# j ret_stat=$? 4 N0 Z8 q% x' M9 `fi ; t1 p& x- f2 J. N% J& G% v} " P5 v( y e6 e " W6 d& w5 w% }9 T/ a; o* j5 Ycleanup_alter() 7 I2 C4 C. X6 d( d{ - e% ^ h1 I0 n3 B/ n0 R /bin/rm -f $ALTER_COUNT_FILE 1>&29 J( }! ?' [& g7 E% C5 s
/bin/rm -f $ALTER_HK_FILE 1>&2 5 A4 C4 C; H4 I O, r1 a2 _} / I5 o1 Q, J) n- [! j : T2 L c/ @6 T2 {9 c( g' i#generate alter temp files based on pid2 |8 I2 n- Z# M- O* s/ x$ P
ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$- h7 v. k% M- c' s; I% s
if [ -f $ALTER_COUNT_FILE ] : a) {4 _/ ~" r; R, l7 }( v$ Wthen 1 _; b7 H' a0 i% k0 e. j8 I
until [ ! -f $ALTER_COUNT_FILE ]6 w" C! L* s7 c! J
do , V/ t( w# P, A. ^4 D ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$% z7 n5 x5 m# ^) v3 R0 {
done 9 [* H) q$ _7 o* E* yfi ' {" E) i# D, R4 Xexport ALTER_COUNT_FILE7 I S: e S3 c# L" O
K- _3 f/ J0 j4 c- f/ }; ]4 t; yALTER_HK_FILE="$ALTER_HK_FILE"$$# A: i& S$ l2 l( T
if [ -f $ALTER_HK_FILE ]9 C- t* N7 l/ ]) L* o
then 3 E# o: i0 m$ E4 R) I until [ ! -f $ALTER_HK_FILE ] 0 _4 X& E p4 Q% {2 [% J& v do - ~5 S% q8 b" ]$ _3 _: p ALTER_HK_FILE="$ALTER_HK_FILE"$$ + s( g, X- o! z# K7 Y done $ O T5 b2 m* k+ ~; n( Vfi 3 k" e6 n! @& b$ J( Q1 @export ALTER_HK_FILE( _0 q% W1 V+ y* {9 G$ L" l. Y f: O
/ R( s5 g/ v e! h0 c% ^#generate monte carlo related temp files based on pid( k: R/ I% [" D' l+ X; N7 h
cleanup_monte() _, s: l* O) w$ a/ H% g* a$ M) e
{# g1 P" u8 T4 S& k
/bin/rm -f $MONTE_IMG_FILE 1>&2! ~& ~ U& s7 c1 l2 ~0 K8 U
/bin/rm -f $MONTE_IMG_FILE.gz 1>&2 R, y# h; q) G: ?2 |, | /bin/rm -f $MONTE_COUNT_FILE 1>&2; D- T& c4 j5 ^% l7 N* ]% l
/bin/rm -f $MONTE_CFG_FILE 1>&2% l. z1 | t3 V
}& v/ P; L0 ~# \" J( r$ z
+ ^8 p$ I& I; N/ c& _, V; x1 mMONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$+ X4 @- K' v1 v. i/ u; c7 S8 Q
if [ -f $MONTE_COUNT_FILE ] ( n5 v9 s" s" @7 ~; H' Z) |& uthen* q s& L3 j( i. e
until [ ! -f $MONTE_COUNT_FILE ]5 r/ D$ |$ @8 s% T) v8 H
do1 w$ K. P+ ^, O* `% H" f% Z3 l
MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$1 Y; L$ o! [/ {) P- p m) l
done5 N' t4 k0 |8 E
fi : p, H% c. ~5 H1 J) { J+ K) Sexport MONTE_COUNT_FILE ! F5 z6 X* q- J9 E4 a 1 }8 _1 T2 J/ n# m6 rMONTE_IMG_FILE="$MONTE_IMG_FILE"$$- u- d! b/ {* u2 ?3 _( v0 w
if [ -f $MONTE_IMG_FILE ]9 s, N0 V2 t+ N M' t
then 7 }& D6 G% [$ T' J# i; X: a until [ ! -f $MONTE_IMG_FILE ] 7 f( u6 Z" b( w: j* B5 ]. q do & i4 Y1 E( \* y0 k1 B+ j MONTE_IMG_FILE="$MONTE_IMG_FILE"$$4 w, D5 \ V& z. `% `
done& Y4 O% }. b, z/ g A, K$ |& j
fi0 q* _, R; I v2 U; P6 w2 @5 }
export MONTE_IMG_FILE ( Q+ {. Y( @1 H2 G$ n& T$ V0 l; [5 J1 s+ t' V0 G* V; N- l |& v8 o" t
MONTE_CFG_FILE="$MONTE_CFG_FILE"$$ & m; \% x! h7 @if [ -f $MONTE_CFG_FILE ]3 ~! x. S- S7 K2 |2 m
then' E% H l. U0 t$ k/ y
until [ ! -f $MONTE_CFG_FILE ]$ K& b! c4 [2 R- I
do . {! q$ l, p# ?7 s, @2 W MONTE_CFG_FILE="$MONTE_CFG_FILE"$$' u O% E/ K2 [6 ~0 b
done * C N+ f* W# b% d: d! jfi D+ Z0 A6 N. x9 g# {3 N( F9 `7 |" b5 k
# main iteration2 ^6 P2 N0 i8 z W* J
run_main! k- g7 a9 {5 P1 T: c) L
+ Q4 Q7 t5 V0 g/ }if [ $ret_stat -ne 0 ] 2 I) ]% Y K( [" E3 a4 x9 A6 Othen ' K l, `' P8 |, k
cleanup_alter1 O y' P% i P6 F
cleanup_monte9 A% ]9 b" _7 y- R
Exit $ret_stat* u6 N& C+ L: x. ^
fi 8 a) ]6 d" l2 A! B2 O0 n5 C% \9 v; E9 [9 c/ ?7 s" o
#Alter related iterations ; h- }7 ]3 M/ ~% t8 l) ~6 W3 g! _+ s- W6 H1 y
iterations=0 $ H3 F5 x& Y8 Tcount=0 4 p) z$ @7 Y3 z9 { `if test -s "$ALTER_COUNT_FILE"( `) N- X0 O; B3 n8 _
then! v" W8 p8 W: e3 K- {8 A0 I/ g
if [ -r $ALTER_COUNT_FILE ]; then . ]8 O1 U5 J: Z% _4 c exec 7< $ALTER_COUNT_FILE, e, B* a" v0 r$ \$ z
read iterations <&7" ?- x4 k0 f% G: Z( R5 A4 d4 Y
fi ' i# J6 j* t% [$ r% Gfi - p* {3 ]3 Q" w+ G2 m5 I, N: k: x9 L+ S2 Y4 Z
trap 'echo Program Interrupt; cleanup_alter; exit 1' 2/ z1 m' M6 r8 [* |7 i: z: s& q
while [ $count -lt $iterations ]" v7 a/ r4 r% F9 L. x9 n* r' ]
do" t( s0 w8 Y6 z8 t4 |/ V# w; j
count=`expr $count + 1`8 W( f( G+ y) w# T( z$ t
ALTER_COUNT=$count2 Q5 \0 Z+ g W' E2 s( J* K
export ALTER_COUNT. Y1 O0 c1 Y* }: u& v0 C
1 x4 q v9 T7 o! ?
run_main : L/ P% E! B0 Z9 U1 G# o; l 6 O0 r+ l% O* G7 P; Wdone ( C, F! g+ y7 O3 J& i/ d2 H& z* V9 `6 r0 W, O! Q' ~' ]3 B
#Monte carlo related iterations8 A0 c, i; U1 L& g' a# ?
! u( K; k7 K3 C8 ]$ u0 m9 ~9 e
monte_runtime_summary() 5 X+ ] h7 l$ U2 R/ s7 X{$ ~5 I, g5 O& {3 R8 ~- Y5 {& P, Z
keyword_1=real1 n% w4 ^6 A# I
keyword_2=user x! R; ^2 H, m$ F
keyword_3=sys - b7 z f) N* @' @( h' L { ofile_prefix=nanosim 5 J+ q3 ] x) {; A( q+ G1 u( O# m4 ^3 x" z7 n/ K+ u" e0 _
if [ ! -z "$o_option" ]; then9 c; k8 X( U; m% y: o
logfile=${o_option}.log" a7 t4 t- b* {& e, y$ R
else) ?6 S4 \/ s0 B. u/ z
logfile=${ofile_prefix}.log ) W( v( B& W7 a/ Z* B0 l! q6 d fi2 o" v8 O: Q- m$ t9 T7 c
5 {& c, c% M! A6 F
if [ -f $logfile ]; then / Q7 P' @; e2 A echo "*** Monte Carlo Total Run Time Summary ***" >> $logfile : s1 {' H% k/ \0 P$ \
cat $logfile | grep ${keyword_1} | grep ${keyword_2} | grep ${keyword_3} | awk 'BEGIN{ t_real=0; t_user=0; t_sys=0; } NF==6 { t_real=t_real+$1; t_user=t_user+$3; t_sys=t_sys+$5 } END{ print "\t", t_real, $2, t_user, $4, t_sys, $6 }' >> $logfile : }5 {1 P# T* K% B! d6 K$ L fi 4 O& {5 H J+ y! h: I: C} 6 {) e3 Y7 S1 \* {% e; L. i! O2 x# N% g- W0 N' u
next_monte=01 ~: s3 |- O8 O6 k" U8 M
cur_monte=0 " X4 s9 ^+ q8 E: g' A. A* @ , i" A/ N2 _; A7 f$ ^/ P9 }# N+ F' Uif test -s "$MONTE_COUNT_FILE"1 ]! e& m+ A5 N8 t9 E3 `( @
then9 G8 M: x! Y/ ? Z O: P% C
if [ -r $MONTE_COUNT_FILE ]; then3 _: ^5 p! B6 N3 z: ]- r
exec 8< $MONTE_COUNT_FILE: V/ Z' g+ X A; i0 |2 K
read next_monte <&8 7 M0 ~* v* n: I/ g" ? fi 1 V& _5 d5 g0 i( Ufi1 G+ u# k0 b+ B# ?
. `/ D6 p7 g: M$ J, N, I+ ~1 @
trap 'echo Program Interrupt; cleanup_monte; exit 1' 23 G2 W0 E2 f( \0 _) m) N
while [ $next_monte -gt 0 -a $next_monte != $cur_monte ]- t3 X& F( n0 j! J
do ) @) \, b7 J* D0 U- W& D NS_CURRENT_MONTE_COUNT=$next_monte : O: @& z. z% |6 J! B export NS_CURRENT_MONTE_COUNT" ]8 p0 P2 A9 k! L1 }* P ]
+ d$ g0 N; U7 F' m/ p echo "restore_ckt_state save_file=$MONTE_IMG_FILE" > $MONTE_CFG_FILE, g. `: Z8 \4 v1 F6 X
CMDLINE="$CMDLINE -c $MONTE_CFG_FILE" 7 y$ M6 o3 Y. H- n run_main 2 p/ A/ d7 Q# K/ G# |2 Z9 @ ( {4 `- Y; W: n) u7 b0 x cur_monte=$next_monte 6 p4 r- g0 l2 G exec 8< $MONTE_COUNT_FILE 1 o0 i# R5 f6 ^; u2 | read next_monte <&85 b5 S7 x H$ g% S( C
done 8 U/ j$ p4 d% y8 B9 H' w, i# e/ F: C
if [ -f $MONTE_COUNT_FILE ]$ s. {- T- V f ]5 ~$ l. x
then & T# ~8 o4 B* N% ^5 T3 x3 i monte_runtime_summary+ }) y9 n; ~2 A0 \2 t5 ~7 k {8 q
fi5 j0 K, K6 m3 O$ ?/ x, k) P
$ u9 L0 K" r) O% w/ D% ocleanup_alter( t. r, T0 c' {2 z; [- f# Y
cleanup_monte/ Q; I! C5 x% G. x4 P