src/share/tools/ProjectCreator/BuildConfig.java

Tue, 08 Aug 2017 15:57:29 +0800

author
aoqi
date
Tue, 08 Aug 2017 15:57:29 +0800
changeset 6876
710a3c8b516e
parent 5500
31f3b1e1c5e5
parent 0
f90c822e73f8
permissions
-rw-r--r--

merge

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation.
aoqi@0 8 *
aoqi@0 9 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 * accompanied this code).
aoqi@0 14 *
aoqi@0 15 * You should have received a copy of the GNU General Public License version
aoqi@0 16 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 *
aoqi@0 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 * or visit www.oracle.com if you need additional information or have any
aoqi@0 21 * questions.
aoqi@0 22 *
aoqi@0 23 */
aoqi@0 24
aoqi@0 25 import java.util.Enumeration;
aoqi@0 26 import java.util.Hashtable;
aoqi@0 27 import java.util.Vector;
aoqi@0 28
aoqi@0 29 class BuildConfig {
aoqi@0 30 @SuppressWarnings("rawtypes")
aoqi@0 31 Hashtable vars;
aoqi@0 32 Vector<String> basicNames, basicPaths;
aoqi@0 33 String[] context;
aoqi@0 34
aoqi@0 35 static CompilerInterface ci;
aoqi@0 36 static CompilerInterface getCI() {
aoqi@0 37 if (ci == null) {
aoqi@0 38 String comp = (String)getField(null, "CompilerVersion");
aoqi@0 39 try {
aoqi@0 40 ci = (CompilerInterface)Class.forName("CompilerInterface" + comp).newInstance();
aoqi@0 41 } catch (Exception cnfe) {
aoqi@0 42 System.err.println("Cannot find support for compiler " + comp);
aoqi@0 43 throw new RuntimeException(cnfe.toString());
aoqi@0 44 }
aoqi@0 45 }
aoqi@0 46 return ci;
aoqi@0 47 }
aoqi@0 48
aoqi@0 49 @SuppressWarnings("rawtypes")
aoqi@0 50 protected void initNames(String flavour, String build, String outDll) {
aoqi@0 51 if (vars == null) vars = new Hashtable();
aoqi@0 52
aoqi@0 53 String flavourBuild = flavour + "_" + build;
aoqi@0 54 String platformName = getFieldString(null, "PlatformName");
aoqi@0 55 System.out.println();
aoqi@0 56 System.out.println(flavourBuild);
aoqi@0 57
aoqi@0 58 put("Name", getCI().makeCfgName(flavourBuild, platformName));
aoqi@0 59 put("Flavour", flavour);
aoqi@0 60 put("Build", build);
aoqi@0 61 put("PlatformName", platformName);
aoqi@0 62
aoqi@0 63 // ones mentioned above were needed to expand format
aoqi@0 64 String buildBase = expandFormat(getFieldString(null, "BuildBase"));
aoqi@0 65 String sourceBase = getFieldString(null, "SourceBase");
aoqi@0 66 String buildSpace = getFieldString(null, "BuildSpace");
aoqi@0 67 String outDir = buildBase;
aoqi@0 68 String jdkTargetRoot = getFieldString(null, "JdkTargetRoot");
aoqi@0 69
aoqi@0 70 put("Id", flavourBuild);
aoqi@0 71 put("OutputDir", outDir);
aoqi@0 72 put("SourceBase", sourceBase);
aoqi@0 73 put("BuildBase", buildBase);
aoqi@0 74 put("BuildSpace", buildSpace);
aoqi@0 75 put("OutputDll", outDir + Util.sep + outDll);
aoqi@0 76 put("JdkTargetRoot", jdkTargetRoot);
aoqi@0 77
aoqi@0 78 context = new String [] {flavourBuild, flavour, build, null};
aoqi@0 79 }
aoqi@0 80
aoqi@0 81 protected void init(Vector<String> includes, Vector<String> defines) {
aoqi@0 82 initDefaultDefines(defines);
aoqi@0 83 initDefaultCompilerFlags(includes);
aoqi@0 84 initDefaultLinkerFlags();
aoqi@0 85 //handleDB();
aoqi@0 86 }
aoqi@0 87
aoqi@0 88
aoqi@0 89 protected void initDefaultCompilerFlags(Vector<String> includes) {
aoqi@0 90 Vector compilerFlags = new Vector();
aoqi@0 91
aoqi@0 92 compilerFlags.addAll(getCI().getBaseCompilerFlags(getV("Define"),
aoqi@0 93 includes,
aoqi@0 94 get("OutputDir")));
aoqi@0 95
aoqi@0 96 put("CompilerFlags", compilerFlags);
aoqi@0 97 }
aoqi@0 98
aoqi@0 99 protected void initDefaultLinkerFlags() {
aoqi@0 100 Vector linkerFlags = new Vector();
aoqi@0 101
aoqi@0 102 linkerFlags.addAll(getCI().getBaseLinkerFlags( get("OutputDir"), get("OutputDll"), get("PlatformName")));
aoqi@0 103
aoqi@0 104 put("LinkerFlags", linkerFlags);
aoqi@0 105 }
aoqi@0 106
aoqi@0 107 public boolean matchesIgnoredPath(String path) {
aoqi@0 108 Vector<String> rv = new Vector<String>();
aoqi@0 109 collectRelevantVectors(rv, "IgnorePath");
aoqi@0 110 for (String pathPart : rv) {
aoqi@0 111 if (path.contains(pathPart)) {
aoqi@0 112 return true;
aoqi@0 113 }
aoqi@0 114 }
aoqi@0 115 return false;
aoqi@0 116 }
aoqi@0 117
aoqi@0 118 public boolean matchesHidePath(String path) {
aoqi@0 119 Vector<String> rv = new Vector<String>();
aoqi@0 120 collectRelevantVectors(rv, "HidePath");
aoqi@0 121 for (String pathPart : rv) {
aoqi@0 122 if (path.contains(Util.normalize(pathPart))) {
aoqi@0 123 return true;
aoqi@0 124 }
aoqi@0 125 }
aoqi@0 126 return false;
aoqi@0 127 }
aoqi@0 128
aoqi@0 129 public Vector<String> matchesAdditionalGeneratedPath(String fullPath) {
aoqi@0 130 Vector<String> rv = new Vector<String>();
aoqi@0 131 Hashtable<String, String> v = (Hashtable<String, String>)BuildConfig.getField(this.toString(), "AdditionalGeneratedFile");
aoqi@0 132 if (v != null) {
aoqi@0 133 for (Enumeration<String> e=v.keys(); e.hasMoreElements(); ) {
aoqi@0 134 String key = e.nextElement();
aoqi@0 135 String val = v.get(key);
aoqi@0 136
aoqi@0 137 if (fullPath.endsWith(expandFormat(key))) {
aoqi@0 138 rv.add(expandFormat(val));
aoqi@0 139 }
aoqi@0 140 }
aoqi@0 141 }
aoqi@0 142 return rv;
aoqi@0 143 }
aoqi@0 144
aoqi@0 145 // Returns true if the specified path refers to a relative alternate
aoqi@0 146 // source file. RelativeAltSrcInclude is usually "src\closed".
aoqi@0 147 public static boolean matchesRelativeAltSrcInclude(String path) {
aoqi@0 148 String relativeAltSrcInclude =
aoqi@0 149 getFieldString(null, "RelativeAltSrcInclude");
aoqi@0 150 Vector<String> v = getFieldVector(null, "AltRelativeInclude");
aoqi@0 151 for (String pathPart : v) {
aoqi@0 152 if (path.contains(relativeAltSrcInclude + Util.sep + pathPart)) {
aoqi@0 153 return true;
aoqi@0 154 }
aoqi@0 155 }
aoqi@0 156 return false;
aoqi@0 157 }
aoqi@0 158
aoqi@0 159 // Returns the relative alternate source file for the specified path.
aoqi@0 160 // Null is returned if the specified path does not have a matching
aoqi@0 161 // alternate source file.
aoqi@0 162 public static String getMatchingRelativeAltSrcFile(String path) {
aoqi@0 163 Vector<String> v = getFieldVector(null, "RelativeAltSrcFileList");
aoqi@0 164 if (v == null) {
aoqi@0 165 return null;
aoqi@0 166 }
aoqi@0 167 for (String pathPart : v) {
aoqi@0 168 if (path.endsWith(pathPart)) {
aoqi@0 169 String relativeAltSrcInclude =
aoqi@0 170 getFieldString(null, "RelativeAltSrcInclude");
aoqi@0 171 return relativeAltSrcInclude + Util.sep + pathPart;
aoqi@0 172 }
aoqi@0 173 }
aoqi@0 174 return null;
aoqi@0 175 }
aoqi@0 176
aoqi@0 177 // Returns true if the specified path has a matching alternate
aoqi@0 178 // source file.
aoqi@0 179 public static boolean matchesRelativeAltSrcFile(String path) {
aoqi@0 180 return getMatchingRelativeAltSrcFile(path) != null;
aoqi@0 181 }
aoqi@0 182
aoqi@0 183 // Track the specified alternate source file. The source file is
aoqi@0 184 // tracked without the leading .*<sep><RelativeAltSrcFileList><sep>
aoqi@0 185 // part to make matching regular source files easier.
aoqi@0 186 public static void trackRelativeAltSrcFile(String path) {
aoqi@0 187 String pattern = getFieldString(null, "RelativeAltSrcInclude") +
aoqi@0 188 Util.sep;
aoqi@0 189 int altSrcInd = path.indexOf(pattern);
aoqi@0 190 if (altSrcInd == -1) {
aoqi@0 191 // not an AltSrc path
aoqi@0 192 return;
aoqi@0 193 }
aoqi@0 194
aoqi@0 195 altSrcInd += pattern.length();
aoqi@0 196 if (altSrcInd >= path.length()) {
aoqi@0 197 // not a valid AltSrc path
aoqi@0 198 return;
aoqi@0 199 }
aoqi@0 200
aoqi@0 201 String altSrcFile = path.substring(altSrcInd);
aoqi@0 202 Vector v = getFieldVector(null, "RelativeAltSrcFileList");
aoqi@0 203 if (v == null || !v.contains(altSrcFile)) {
aoqi@0 204 addFieldVector(null, "RelativeAltSrcFileList", altSrcFile);
aoqi@0 205 }
aoqi@0 206 }
aoqi@0 207
aoqi@0 208 void addTo(Hashtable ht, String key, String value) {
aoqi@0 209 ht.put(expandFormat(key), expandFormat(value));
aoqi@0 210 }
aoqi@0 211
aoqi@0 212 void initDefaultDefines(Vector defines) {
aoqi@0 213 Vector sysDefines = new Vector();
aoqi@0 214 sysDefines.add("WIN32");
aoqi@0 215 sysDefines.add("_WINDOWS");
aoqi@0 216 sysDefines.add("HOTSPOT_BUILD_USER=\\\""+System.getProperty("user.name")+"\\\"");
aoqi@0 217 sysDefines.add("HOTSPOT_BUILD_TARGET=\\\""+get("Build")+"\\\"");
aoqi@0 218 sysDefines.add("INCLUDE_TRACE=1");
aoqi@0 219 sysDefines.add("_JNI_IMPLEMENTATION_");
aoqi@0 220 if (vars.get("PlatformName").equals("Win32")) {
aoqi@0 221 sysDefines.add("HOTSPOT_LIB_ARCH=\\\"i386\\\"");
aoqi@0 222 } else {
aoqi@0 223 sysDefines.add("HOTSPOT_LIB_ARCH=\\\"amd64\\\"");
aoqi@0 224 }
aoqi@0 225
aoqi@0 226 sysDefines.addAll(defines);
aoqi@0 227
aoqi@0 228 put("Define", sysDefines);
aoqi@0 229 }
aoqi@0 230
aoqi@0 231 String get(String key) {
aoqi@0 232 return (String)vars.get(key);
aoqi@0 233 }
aoqi@0 234
aoqi@0 235 Vector getV(String key) {
aoqi@0 236 return (Vector)vars.get(key);
aoqi@0 237 }
aoqi@0 238
aoqi@0 239 Object getO(String key) {
aoqi@0 240 return vars.get(key);
aoqi@0 241 }
aoqi@0 242
aoqi@0 243 Hashtable getH(String key) {
aoqi@0 244 return (Hashtable)vars.get(key);
aoqi@0 245 }
aoqi@0 246
aoqi@0 247 Object getFieldInContext(String field) {
aoqi@0 248 for (int i=0; i<context.length; i++) {
aoqi@0 249 Object rv = getField(context[i], field);
aoqi@0 250 if (rv != null) {
aoqi@0 251 return rv;
aoqi@0 252 }
aoqi@0 253 }
aoqi@0 254 return null;
aoqi@0 255 }
aoqi@0 256
aoqi@0 257 Object lookupHashFieldInContext(String field, String key) {
aoqi@0 258 for (int i=0; i<context.length; i++) {
aoqi@0 259 Hashtable ht = (Hashtable)getField(context[i], field);
aoqi@0 260 if (ht != null) {
aoqi@0 261 Object rv = ht.get(key);
aoqi@0 262 if (rv != null) {
aoqi@0 263 return rv;
aoqi@0 264 }
aoqi@0 265 }
aoqi@0 266 }
aoqi@0 267 return null;
aoqi@0 268 }
aoqi@0 269
aoqi@0 270 void put(String key, String value) {
aoqi@0 271 vars.put(key, value);
aoqi@0 272 }
aoqi@0 273
aoqi@0 274 void put(String key, Vector vvalue) {
aoqi@0 275 vars.put(key, vvalue);
aoqi@0 276 }
aoqi@0 277
aoqi@0 278 void add(String key, Vector vvalue) {
aoqi@0 279 getV(key).addAll(vvalue);
aoqi@0 280 }
aoqi@0 281
aoqi@0 282 String flavour() {
aoqi@0 283 return get("Flavour");
aoqi@0 284 }
aoqi@0 285
aoqi@0 286 String build() {
aoqi@0 287 return get("Build");
aoqi@0 288 }
aoqi@0 289
aoqi@0 290 Object getSpecificField(String field) {
aoqi@0 291 return getField(get("Id"), field);
aoqi@0 292 }
aoqi@0 293
aoqi@0 294 void putSpecificField(String field, Object value) {
aoqi@0 295 putField(get("Id"), field, value);
aoqi@0 296 }
aoqi@0 297
aoqi@0 298 void collectRelevantVectors(Vector rv, String field) {
aoqi@0 299 for (String ctx : context) {
aoqi@0 300 Vector<String> v = getFieldVector(ctx, field);
aoqi@0 301 if (v != null) {
aoqi@0 302 for (String val : v) {
aoqi@0 303 rv.add(expandFormat(val).replace('/', '\\'));
aoqi@0 304 }
aoqi@0 305 }
aoqi@0 306 }
aoqi@0 307 }
aoqi@0 308
aoqi@0 309 void collectRelevantHashes(Hashtable rv, String field) {
aoqi@0 310 for (String ctx : context) {
aoqi@0 311 Hashtable v = (Hashtable)getField(ctx, field);
aoqi@0 312 if (v != null) {
aoqi@0 313 for (Enumeration e=v.keys(); e.hasMoreElements(); ) {
aoqi@0 314 String key = (String)e.nextElement();
aoqi@0 315 String val = (String)v.get(key);
aoqi@0 316 addTo(rv, key, val);
aoqi@0 317 }
aoqi@0 318 }
aoqi@0 319 }
aoqi@0 320 }
aoqi@0 321
aoqi@0 322
aoqi@0 323 Vector getDefines() {
aoqi@0 324 Vector rv = new Vector();
aoqi@0 325 collectRelevantVectors(rv, "Define");
aoqi@0 326 return rv;
aoqi@0 327 }
aoqi@0 328
aoqi@0 329 Vector getIncludes() {
aoqi@0 330 Vector rv = new Vector();
aoqi@0 331 collectRelevantVectors(rv, "AbsoluteInclude");
aoqi@0 332 rv.addAll(getSourceIncludes());
aoqi@0 333 return rv;
aoqi@0 334 }
aoqi@0 335
aoqi@0 336 private Vector getSourceIncludes() {
aoqi@0 337 Vector<String> rv = new Vector<String>();
aoqi@0 338 String sourceBase = getFieldString(null, "SourceBase");
aoqi@0 339
aoqi@0 340 // add relative alternate source include values:
aoqi@0 341 String relativeAltSrcInclude =
aoqi@0 342 getFieldString(null, "RelativeAltSrcInclude");
aoqi@0 343 Vector<String> asri = new Vector<String>();
aoqi@0 344 collectRelevantVectors(asri, "AltRelativeInclude");
aoqi@0 345 for (String f : asri) {
aoqi@0 346 rv.add(sourceBase + Util.sep + relativeAltSrcInclude +
aoqi@0 347 Util.sep + f);
aoqi@0 348 }
aoqi@0 349
aoqi@0 350 Vector<String> ri = new Vector<String>();
aoqi@0 351 collectRelevantVectors(ri, "RelativeInclude");
aoqi@0 352 for (String f : ri) {
aoqi@0 353 rv.add(sourceBase + Util.sep + f);
aoqi@0 354 }
aoqi@0 355 return rv;
aoqi@0 356 }
aoqi@0 357
aoqi@0 358 static Hashtable cfgData = new Hashtable();
aoqi@0 359 static Hashtable globalData = new Hashtable();
aoqi@0 360
aoqi@0 361 static boolean appliesToTieredBuild(String cfg) {
aoqi@0 362 return (cfg != null &&
aoqi@0 363 (cfg.startsWith("compiler1") ||
aoqi@0 364 cfg.startsWith("compiler2")));
aoqi@0 365 }
aoqi@0 366
aoqi@0 367 // Filters out the IgnoreFile and IgnorePaths since they are
aoqi@0 368 // handled specially for tiered builds.
aoqi@0 369 static boolean appliesToTieredBuild(String cfg, String key) {
aoqi@0 370 return (appliesToTieredBuild(cfg))&& (key != null && !key.startsWith("Ignore"));
aoqi@0 371 }
aoqi@0 372
aoqi@0 373 static String getTieredBuildCfg(String cfg) {
aoqi@0 374 assert appliesToTieredBuild(cfg) : "illegal configuration " + cfg;
aoqi@0 375 return "tiered" + cfg.substring(9);
aoqi@0 376 }
aoqi@0 377
aoqi@0 378 static Object getField(String cfg, String field) {
aoqi@0 379 if (cfg == null) {
aoqi@0 380 return globalData.get(field);
aoqi@0 381 }
aoqi@0 382
aoqi@0 383 Hashtable ht = (Hashtable)cfgData.get(cfg);
aoqi@0 384 return ht == null ? null : ht.get(field);
aoqi@0 385 }
aoqi@0 386
aoqi@0 387 static String getFieldString(String cfg, String field) {
aoqi@0 388 return (String)getField(cfg, field);
aoqi@0 389 }
aoqi@0 390
aoqi@0 391 static Vector getFieldVector(String cfg, String field) {
aoqi@0 392 return (Vector)getField(cfg, field);
aoqi@0 393 }
aoqi@0 394
aoqi@0 395 static void putField(String cfg, String field, Object value) {
aoqi@0 396 putFieldImpl(cfg, field, value);
aoqi@0 397 if (appliesToTieredBuild(cfg, field)) {
aoqi@0 398 putFieldImpl(getTieredBuildCfg(cfg), field, value);
aoqi@0 399 }
aoqi@0 400 }
aoqi@0 401
aoqi@0 402 private static void putFieldImpl(String cfg, String field, Object value) {
aoqi@0 403 if (cfg == null) {
aoqi@0 404 globalData.put(field, value);
aoqi@0 405 return;
aoqi@0 406 }
aoqi@0 407
aoqi@0 408 Hashtable ht = (Hashtable)cfgData.get(cfg);
aoqi@0 409 if (ht == null) {
aoqi@0 410 ht = new Hashtable();
aoqi@0 411 cfgData.put(cfg, ht);
aoqi@0 412 }
aoqi@0 413
aoqi@0 414 ht.put(field, value);
aoqi@0 415 }
aoqi@0 416
aoqi@0 417 static Object getFieldHash(String cfg, String field, String name) {
aoqi@0 418 Hashtable ht = (Hashtable)getField(cfg, field);
aoqi@0 419
aoqi@0 420 return ht == null ? null : ht.get(name);
aoqi@0 421 }
aoqi@0 422
aoqi@0 423 static void putFieldHash(String cfg, String field, String name, Object val) {
aoqi@0 424 putFieldHashImpl(cfg, field, name, val);
aoqi@0 425 if (appliesToTieredBuild(cfg, field)) {
aoqi@0 426 putFieldHashImpl(getTieredBuildCfg(cfg), field, name, val);
aoqi@0 427 }
aoqi@0 428 }
aoqi@0 429
aoqi@0 430 private static void putFieldHashImpl(String cfg, String field, String name, Object val) {
aoqi@0 431 Hashtable ht = (Hashtable)getField(cfg, field);
aoqi@0 432
aoqi@0 433 if (ht == null) {
aoqi@0 434 ht = new Hashtable();
aoqi@0 435 putFieldImpl(cfg, field, ht);
aoqi@0 436 }
aoqi@0 437
aoqi@0 438 ht.put(name, val);
aoqi@0 439 }
aoqi@0 440
aoqi@0 441 static void addFieldVector(String cfg, String field, String element) {
aoqi@0 442 addFieldVectorImpl(cfg, field, element);
aoqi@0 443 if (appliesToTieredBuild(cfg, field)) {
aoqi@0 444 addFieldVectorImpl(getTieredBuildCfg(cfg), field, element);
aoqi@0 445 }
aoqi@0 446 }
aoqi@0 447
aoqi@0 448 private static void addFieldVectorImpl(String cfg, String field, String element) {
aoqi@0 449 Vector v = (Vector)getField(cfg, field);
aoqi@0 450
aoqi@0 451 if (v == null) {
aoqi@0 452 v = new Vector();
aoqi@0 453 putFieldImpl(cfg, field, v);
aoqi@0 454 }
aoqi@0 455
aoqi@0 456 v.add(element);
aoqi@0 457 }
aoqi@0 458
aoqi@0 459 String expandFormat(String format) {
aoqi@0 460 if (format == null) {
aoqi@0 461 return null;
aoqi@0 462 }
aoqi@0 463
aoqi@0 464 if (format.indexOf('%') == -1) {
aoqi@0 465 return format;
aoqi@0 466 }
aoqi@0 467
aoqi@0 468 StringBuffer sb = new StringBuffer();
aoqi@0 469 int len = format.length();
aoqi@0 470 for (int i=0; i<len; i++) {
aoqi@0 471 char ch = format.charAt(i);
aoqi@0 472 if (ch == '%') {
aoqi@0 473 char ch1 = format.charAt(i+1);
aoqi@0 474 switch (ch1) {
aoqi@0 475 case '%':
aoqi@0 476 sb.append(ch1);
aoqi@0 477 break;
aoqi@0 478 case 'b':
aoqi@0 479 sb.append(build());
aoqi@0 480 break;
aoqi@0 481 case 'f':
aoqi@0 482 sb.append(flavour());
aoqi@0 483 break;
aoqi@0 484 default:
aoqi@0 485 sb.append(ch);
aoqi@0 486 sb.append(ch1);
aoqi@0 487 }
aoqi@0 488 i++;
aoqi@0 489 } else {
aoqi@0 490 sb.append(ch);
aoqi@0 491 }
aoqi@0 492 }
aoqi@0 493
aoqi@0 494 return sb.toString();
aoqi@0 495 }
aoqi@0 496 }
aoqi@0 497
aoqi@0 498 abstract class GenericDebugConfig extends BuildConfig {
aoqi@0 499 abstract String getOptFlag();
aoqi@0 500
aoqi@0 501 protected void init(Vector includes, Vector defines) {
aoqi@0 502 defines.add("_DEBUG");
aoqi@0 503 defines.add("ASSERT");
aoqi@0 504
aoqi@0 505 super.init(includes, defines);
aoqi@0 506
aoqi@0 507 getV("CompilerFlags").addAll(getCI().getDebugCompilerFlags(getOptFlag()));
aoqi@0 508 getV("LinkerFlags").addAll(getCI().getDebugLinkerFlags());
aoqi@0 509 }
aoqi@0 510 }
aoqi@0 511
aoqi@0 512 abstract class GenericDebugNonKernelConfig extends GenericDebugConfig {
aoqi@0 513 protected void init(Vector includes, Vector defines) {
aoqi@0 514 super.init(includes, defines);
aoqi@0 515 getCI().getAdditionalNonKernelLinkerFlags(getV("LinkerFlags"));
aoqi@0 516 }
aoqi@0 517 }
aoqi@0 518
aoqi@0 519 class C1DebugConfig extends GenericDebugNonKernelConfig {
aoqi@0 520 String getOptFlag() {
aoqi@0 521 return getCI().getNoOptFlag();
aoqi@0 522 }
aoqi@0 523
aoqi@0 524 C1DebugConfig() {
aoqi@0 525 initNames("compiler1", "debug", "jvm.dll");
aoqi@0 526 init(getIncludes(), getDefines());
aoqi@0 527 }
aoqi@0 528 }
aoqi@0 529
aoqi@0 530 class C1FastDebugConfig extends GenericDebugNonKernelConfig {
aoqi@0 531 String getOptFlag() {
aoqi@0 532 return getCI().getOptFlag();
aoqi@0 533 }
aoqi@0 534
aoqi@0 535 C1FastDebugConfig() {
aoqi@0 536 initNames("compiler1", "fastdebug", "jvm.dll");
aoqi@0 537 init(getIncludes(), getDefines());
aoqi@0 538 }
aoqi@0 539 }
aoqi@0 540
aoqi@0 541 class C2DebugConfig extends GenericDebugNonKernelConfig {
aoqi@0 542 String getOptFlag() {
aoqi@0 543 return getCI().getNoOptFlag();
aoqi@0 544 }
aoqi@0 545
aoqi@0 546 C2DebugConfig() {
aoqi@0 547 initNames("compiler2", "debug", "jvm.dll");
aoqi@0 548 init(getIncludes(), getDefines());
aoqi@0 549 }
aoqi@0 550 }
aoqi@0 551
aoqi@0 552 class C2FastDebugConfig extends GenericDebugNonKernelConfig {
aoqi@0 553 String getOptFlag() {
aoqi@0 554 return getCI().getOptFlag();
aoqi@0 555 }
aoqi@0 556
aoqi@0 557 C2FastDebugConfig() {
aoqi@0 558 initNames("compiler2", "fastdebug", "jvm.dll");
aoqi@0 559 init(getIncludes(), getDefines());
aoqi@0 560 }
aoqi@0 561 }
aoqi@0 562
aoqi@0 563 class TieredDebugConfig extends GenericDebugNonKernelConfig {
aoqi@0 564 String getOptFlag() {
aoqi@0 565 return getCI().getNoOptFlag();
aoqi@0 566 }
aoqi@0 567
aoqi@0 568 TieredDebugConfig() {
aoqi@0 569 initNames("tiered", "debug", "jvm.dll");
aoqi@0 570 init(getIncludes(), getDefines());
aoqi@0 571 }
aoqi@0 572 }
aoqi@0 573
aoqi@0 574 class TieredFastDebugConfig extends GenericDebugNonKernelConfig {
aoqi@0 575 String getOptFlag() {
aoqi@0 576 return getCI().getOptFlag();
aoqi@0 577 }
aoqi@0 578
aoqi@0 579 TieredFastDebugConfig() {
aoqi@0 580 initNames("tiered", "fastdebug", "jvm.dll");
aoqi@0 581 init(getIncludes(), getDefines());
aoqi@0 582 }
aoqi@0 583 }
aoqi@0 584
aoqi@0 585 abstract class ProductConfig extends BuildConfig {
aoqi@0 586 protected void init(Vector includes, Vector defines) {
aoqi@0 587 defines.add("NDEBUG");
aoqi@0 588 defines.add("PRODUCT");
aoqi@0 589
aoqi@0 590 super.init(includes, defines);
aoqi@0 591
aoqi@0 592 getV("CompilerFlags").addAll(getCI().getProductCompilerFlags());
aoqi@0 593 getV("LinkerFlags").addAll(getCI().getProductLinkerFlags());
aoqi@0 594 }
aoqi@0 595 }
aoqi@0 596
aoqi@0 597 class C1ProductConfig extends ProductConfig {
aoqi@0 598 C1ProductConfig() {
aoqi@0 599 initNames("compiler1", "product", "jvm.dll");
aoqi@0 600 init(getIncludes(), getDefines());
aoqi@0 601 }
aoqi@0 602 }
aoqi@0 603
aoqi@0 604 class C2ProductConfig extends ProductConfig {
aoqi@0 605 C2ProductConfig() {
aoqi@0 606 initNames("compiler2", "product", "jvm.dll");
aoqi@0 607 init(getIncludes(), getDefines());
aoqi@0 608 }
aoqi@0 609 }
aoqi@0 610
aoqi@0 611 class TieredProductConfig extends ProductConfig {
aoqi@0 612 TieredProductConfig() {
aoqi@0 613 initNames("tiered", "product", "jvm.dll");
aoqi@0 614 init(getIncludes(), getDefines());
aoqi@0 615 }
aoqi@0 616 }
aoqi@0 617
aoqi@0 618
aoqi@0 619 abstract class CompilerInterface {
aoqi@0 620 abstract Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir);
aoqi@0 621 abstract Vector getBaseLinkerFlags(String outDir, String outDll, String platformName);
aoqi@0 622 abstract Vector getDebugCompilerFlags(String opt);
aoqi@0 623 abstract Vector getDebugLinkerFlags();
aoqi@0 624 abstract void getAdditionalNonKernelLinkerFlags(Vector rv);
aoqi@0 625 abstract Vector getProductCompilerFlags();
aoqi@0 626 abstract Vector getProductLinkerFlags();
aoqi@0 627 abstract String getOptFlag();
aoqi@0 628 abstract String getNoOptFlag();
aoqi@0 629 abstract String makeCfgName(String flavourBuild, String platformName);
aoqi@0 630
aoqi@0 631 void addAttr(Vector receiver, String attr, String value) {
aoqi@0 632 receiver.add(attr); receiver.add(value);
aoqi@0 633 }
aoqi@0 634 void extAttr(Vector receiver, String attr, String value) {
aoqi@0 635 int attr_pos=receiver.indexOf(attr) ;
aoqi@0 636 if ( attr_pos == -1) {
aoqi@0 637 // If attr IS NOT present in the Vector - add it
aoqi@0 638 receiver.add(attr); receiver.add(value);
aoqi@0 639 } else {
aoqi@0 640 // If attr IS present in the Vector - append value to it
aoqi@0 641 receiver.set(attr_pos+1,receiver.get(attr_pos+1)+value);
aoqi@0 642 }
aoqi@0 643 }
aoqi@0 644 }

mercurial