Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perlmod / Midas / 3.32 / lib / site_perl / 5.8.0 / Midas / State.pm
CommitLineData
86530b38
AT
1# ========== Copyright Header Begin ==========================================
2#
3# OpenSPARC T2 Processor File: State.pm
4# Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5# 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6#
7# * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; version 2 of the License.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21#
22# For the avoidance of doubt, and except that if any non-GPL license
23# choice is available it will apply instead, Sun elects to use only
24# the General Public License version 2 (GPLv2) at this time for any
25# software where a choice of GPL license versions is made
26# available with the language indicating that GPLv2 or any later version
27# may be used, or where a choice of which version of the GPL is applied is
28# otherwise unspecified.
29#
30# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31# CA 95054 USA or visit www.sun.com if you need additional information or
32# have any questions.
33#
34# ========== Copyright Header End ============================================
35# -*- perl -*-
36
37package Midas::State;
38use strict;
39
40use File::Spec;
41use Cwd;
42
43use Midas::MMU;
44use Midas::Configure;
45use Midas::Command;
46use Midas::Paths;
47use Midas::Globals;
48use Midas::Error;
49
50require Exporter;
51our @ISA = qw(Exporter);
52our @EXPORT = qw(init_state);
53our @EXPORT_OK = qw();
54
55use fields qw(
56 start_dir
57 build_dir
58 dest_dir
59
60 diag_root
61
62 created_build_dir
63 skipping_build
64
65 mmu
66 tsbs
67 tsblinks
68
69 apps
70 );
71
72##############################################################################
73
74sub init_state {
75 my $diag_root = shift;
76 my $start_dir = shift;
77 my $dest_dir = shift;
78
79 $diag_root = $ENV{DV_ROOT} unless defined $diag_root;
80 $start_dir = getcwd unless defined $start_dir;
81 $dest_dir = getcwd unless defined $start_dir;
82
83 $diag_root = File::Spec->rel2abs($diag_root, getcwd);
84 $start_dir = File::Spec->rel2abs($start_dir, getcwd);
85 $dest_dir = File::Spec->rel2abs($dest_dir, getcwd);
86
87 my $state = Midas::State->new(start_dir => $start_dir,
88 dest_dir => $dest_dir,
89 diag_root => $diag_root,
90 );
91
92
93 $state->set_build_dir($state->get_build_dir());
94
95 $ENV{DIAG_ROOT} = $diag_root;
96 $ENV{START_DIR} = $start_dir;
97 $ENV{DEST_DIR} = $dest_dir;
98
99 return $state;
100}
101
102##############################################################################
103
104sub new {
105 my $this = shift;
106 my %args = @_;
107
108 unless (ref $this) {
109 $this = fields::new($this);
110 }
111
112 $this->set_defaults();
113
114 foreach my $key (keys %args) {
115 $this->{$key} = $args{$key};
116 }
117 return $this;
118}
119
120##############################################################################
121
122sub set_defaults {
123 my $this = shift;
124
125 $this->{start_dir} = '.';
126 $this->{build_dir} = undef;
127 $this->{dest_dir} = '.';
128 $this->{diag_root} = $ENV{DV_ROOT};
129 $this->{created_build_dir} = 0;
130 $this->{skipping_build} = 0;
131 $this->{mmu} = undef;
132 $this->{apps} = {};
133 $this->{tsbs} = {};
134 $this->{tsblinks} = {};
135}
136
137##############################################################################
138
139sub get_build_dir {
140 my $this = shift;
141 my @args = @_;
142
143 my $build = $this->{build_dir};
144 if(not defined $build) {
145 $build = $CONFIG{build_dir};
146 }
147 my $build_abs = File::Spec->rel2abs($build, $this->{start_dir});
148
149 if(grep /^\-abs$/, @args) {
150 return $build_abs;
151 }
152
153 return compact_path($build_abs);
154}
155
156##############################################################################
157
158sub set_build_dir {
159 my $this = shift;
160 my $build_dir = shift;
161
162 my $build = File::Spec->rel2abs($build_dir, $this->{start_dir});
163 $this->{build_dir} = $build;
164 return $this->{build_dir};
165}
166
167##############################################################################
168
169sub get_start_dir {
170 my $this = shift;
171 my @args = @_;
172
173 my $start_dir = $this->{start_dir};
174
175 if(grep /^\-abs$/, @args) {
176 return $start_dir;
177 }
178
179 return compact_path $start_dir;
180}
181
182##############################################################################
183
184sub get_dest_dir {
185 my $this = shift;
186 my @args = @_;
187
188 my $dest_dir = $this->{dest_dir};
189
190 if(grep /^\-abs$/, @args) {
191 return $dest_dir;
192 }
193
194 return compact_path $dest_dir;
195}
196
197##############################################################################
198
199sub set_dest_dir {
200 my $this = shift;
201 my $dest_dir = shift;
202
203 $this->{dest_dir} = File::Spec->rel2abs($dest_dir);
204}
205
206##############################################################################
207
208sub get_created_build_dir {
209 my $this = shift;
210
211 return $this->{created_build_dir};
212}
213
214##############################################################################
215
216sub set_created_build_dir {
217 my $this = shift;
218 my $val = shift;
219
220 $val = 1 unless defined $val;
221 $this->{created_build_dir} = $val;
222 return $this->{created_build_dir};
223}
224
225##############################################################################
226
227sub get_diag_root {
228 my $this = shift;
229
230 return $this->{diag_root};
231}
232
233##############################################################################
234
235sub get_mmu {
236 my $this = shift;
237 my $type = shift;
238
239 fatal "Tried to get mmu of specified type $type when an mmu already ".
240 "exists!\n", M_CODE if defined $type && defined $this->{mmu};
241
242 return $this->{mmu} if defined $this->{mmu};
243
244 my $mmu = create_mmu( defined $type ? $type : $CONFIG{mmu_type} );
245 $this->{mmu} = $mmu;
246 return $this->{mmu};
247}
248
249##############################################################################
250
251sub clear {
252 my $this = shift;
253 $this->set_defaults();
254}
255
256##############################################################################
257
258sub skipping_build {
259 my $this = shift;
260 my $bool = shift;
261 $this->{skipping_build} = $bool if defined $bool;
262 return $this->{skipping_build};
263}
264
265##############################################################################
266
267sub get_tsb {
268 my $this = shift;
269 my $name = shift;
270
271 return $this->{tsbs}{$name} if exists $this->{tsbs}{$name};
272 return;
273}
274
275##############################################################################
276
277sub get_tsblink {
278 my $this = shift;
279 my $name = shift;
280
281 return $this->{tsblinks}{$name} if exists $this->{tsblinks}{$name};
282 return;
283}
284
285##############################################################################
2861;