src/share/tools/MakeDeps/WinGammaPlatformVC7.java

Thu, 27 May 2010 19:08:38 -0700

author
trims
date
Thu, 27 May 2010 19:08:38 -0700
changeset 1907
c18cbe5936b8
parent 1279
bd02caa94611
permissions
-rw-r--r--

6941466: Oracle rebranding changes for Hotspot repositories
Summary: Change all the Sun copyrights to Oracle copyright
Reviewed-by: ohair

duke@435 1 /*
trims@1907 2 * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 import java.io.*;
duke@435 26 import java.util.*;
duke@435 27
duke@435 28 public class WinGammaPlatformVC7 extends WinGammaPlatform {
duke@435 29
ikrylov@1094 30 String projectVersion() {return "7.10";};
ikrylov@1094 31
duke@435 32 public void writeProjectFile(String projectFileName, String projectName,
duke@435 33 Vector allConfigs) throws IOException {
duke@435 34 System.out.println();
duke@435 35 System.out.println(" Writing .vcproj file...");
duke@435 36 // If we got this far without an error, we're safe to actually
duke@435 37 // write the .vcproj file
duke@435 38 printWriter = new PrintWriter(new FileWriter(projectFileName));
duke@435 39
duke@435 40 printWriter.println("<?xml version=\"1.0\" encoding=\"windows-1251\"?>");
duke@435 41 startTag(
duke@435 42 "VisualStudioProject",
duke@435 43 new String[] {
duke@435 44 "ProjectType", "Visual C++",
ikrylov@1094 45 "Version", projectVersion(),
duke@435 46 "Name", projectName,
duke@435 47 "ProjectGUID", "{8822CB5C-1C41-41C2-8493-9F6E1994338B}",
duke@435 48 "SccProjectName", "",
duke@435 49 "SccLocalPath", ""
duke@435 50 }
duke@435 51 );
duke@435 52
duke@435 53 startTag("Platforms", null);
duke@435 54 tag("Platform", new String[] {"Name", Util.os});
duke@435 55 endTag("Platforms");
duke@435 56
duke@435 57 startTag("Configurations", null);
duke@435 58
duke@435 59 for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
duke@435 60 writeConfiguration((BuildConfig)i.next());
duke@435 61 }
duke@435 62
duke@435 63 endTag("Configurations");
duke@435 64
duke@435 65 tag("References", null);
duke@435 66
duke@435 67 writeFiles(allConfigs);
duke@435 68
duke@435 69 tag("Globals", null);
duke@435 70
duke@435 71 endTag("VisualStudioProject");
duke@435 72 printWriter.close();
duke@435 73
duke@435 74 System.out.println(" Done.");
duke@435 75 }
duke@435 76
duke@435 77
duke@435 78 abstract class NameFilter {
duke@435 79 protected String fname;
duke@435 80
duke@435 81 abstract boolean match(FileInfo fi);
duke@435 82
duke@435 83 String filterString() { return ""; }
duke@435 84 String name() { return this.fname;}
duke@435 85 }
duke@435 86
duke@435 87 class DirectoryFilter extends NameFilter {
duke@435 88 String dir;
duke@435 89 int baseLen, dirLen;
duke@435 90
duke@435 91 DirectoryFilter(String dir, String sbase) {
duke@435 92 this.dir = dir;
duke@435 93 this.baseLen = sbase.length();
duke@435 94 this.dirLen = dir.length();
duke@435 95 this.fname = dir;
duke@435 96 }
duke@435 97
duke@435 98 DirectoryFilter(String fname, String dir, String sbase) {
duke@435 99 this.dir = dir;
duke@435 100 this.baseLen = sbase.length();
duke@435 101 this.dirLen = dir.length();
duke@435 102 this.fname = fname;
duke@435 103 }
duke@435 104
duke@435 105
duke@435 106 boolean match(FileInfo fi) {
duke@435 107 return fi.full.regionMatches(true, baseLen, dir, 0, dirLen);
duke@435 108 }
duke@435 109 }
duke@435 110
duke@435 111 class TypeFilter extends NameFilter {
duke@435 112 String[] exts;
duke@435 113
duke@435 114 TypeFilter(String fname, String[] exts) {
duke@435 115 this.fname = fname;
duke@435 116 this.exts = exts;
duke@435 117 }
duke@435 118
duke@435 119 boolean match(FileInfo fi) {
duke@435 120 for (int i=0; i<exts.length; i++) {
duke@435 121 if (fi.full.endsWith(exts[i])) {
duke@435 122 return true;
duke@435 123 }
duke@435 124 }
duke@435 125 return false;
duke@435 126 }
duke@435 127
duke@435 128 String filterString() {
duke@435 129 return Util.join(";", exts);
duke@435 130 }
duke@435 131 }
duke@435 132
duke@435 133 class TerminatorFilter extends NameFilter {
duke@435 134 TerminatorFilter(String fname) {
duke@435 135 this.fname = fname;
duke@435 136
duke@435 137 }
duke@435 138 boolean match(FileInfo fi) {
duke@435 139 return true;
duke@435 140 }
duke@435 141
duke@435 142 }
duke@435 143
duke@435 144 class SpecificNameFilter extends NameFilter {
duke@435 145 String pats[];
duke@435 146
duke@435 147 SpecificNameFilter(String fname, String[] pats) {
duke@435 148 this.fname = fname;
duke@435 149 this.pats = pats;
duke@435 150 }
duke@435 151
duke@435 152 boolean match(FileInfo fi) {
duke@435 153 for (int i=0; i<pats.length; i++) {
duke@435 154 if (fi.attr.shortName.matches(pats[i])) {
duke@435 155 return true;
duke@435 156 }
duke@435 157 }
duke@435 158 return false;
duke@435 159 }
duke@435 160
duke@435 161 }
duke@435 162
duke@435 163 class ContainerFilter extends NameFilter {
duke@435 164 Vector children;
duke@435 165
duke@435 166 ContainerFilter(String fname) {
duke@435 167 this.fname = fname;
duke@435 168 children = new Vector();
duke@435 169
duke@435 170 }
duke@435 171 boolean match(FileInfo fi) {
duke@435 172 return false;
duke@435 173 }
duke@435 174
duke@435 175 Iterator babies() { return children.iterator(); }
duke@435 176
duke@435 177 void add(NameFilter f) {
duke@435 178 children.add(f);
duke@435 179 }
duke@435 180 }
duke@435 181
duke@435 182
duke@435 183 void writeCustomToolConfig(Vector configs, String[] customToolAttrs) {
duke@435 184 for (Iterator i = configs.iterator(); i.hasNext(); ) {
duke@435 185 startTag("FileConfiguration",
duke@435 186 new String[] {
duke@435 187 "Name", (String)i.next()
duke@435 188 }
duke@435 189 );
duke@435 190 tag("Tool", customToolAttrs);
duke@435 191
duke@435 192 endTag("FileConfiguration");
duke@435 193 }
duke@435 194 }
duke@435 195
duke@435 196 // here we define filters, which define layout of what can be seen in 'Solution View' of MSVC
duke@435 197 // Basically there are two types of entities - container filters and real filters
duke@435 198 // - container filter just provides a container to group together real filters
duke@435 199 // - real filter can select elements from the set according to some rule, put it into XML
duke@435 200 // and remove from the list
duke@435 201 Vector makeFilters(TreeSet files) {
duke@435 202 Vector rv = new Vector();
duke@435 203 String sbase = Util.normalize(BuildConfig.getFieldString(null, "SourceBase")+"/src/");
duke@435 204
duke@435 205 ContainerFilter rt = new ContainerFilter("Runtime");
duke@435 206 rt.add(new DirectoryFilter("share/vm/prims", sbase));
duke@435 207 rt.add(new DirectoryFilter("share/vm/runtime", sbase));
duke@435 208 rt.add(new DirectoryFilter("share/vm/oops", sbase));
duke@435 209 rv.add(rt);
duke@435 210
duke@435 211 ContainerFilter gc = new ContainerFilter("GC");
duke@435 212 gc.add(new DirectoryFilter("share/vm/memory", sbase));
duke@435 213 gc.add(new DirectoryFilter("share/vm/gc_interface", sbase));
duke@435 214
duke@435 215 ContainerFilter gc_impl = new ContainerFilter("Implementations");
duke@435 216 gc_impl.add(new DirectoryFilter("CMS",
duke@435 217 "share/vm/gc_implementation/concurrentMarkSweep",
duke@435 218 sbase));
duke@435 219 gc_impl.add(new DirectoryFilter("Parallel Scavenge",
duke@435 220 "share/vm/gc_implementation/parallelScavenge",
duke@435 221 sbase));
duke@435 222 gc_impl.add(new DirectoryFilter("Shared",
duke@435 223 "share/vm/gc_implementation/shared",
duke@435 224 sbase));
duke@435 225 // for all leftovers
duke@435 226 gc_impl.add(new DirectoryFilter("Misc",
duke@435 227 "share/vm/gc_implementation",
duke@435 228 sbase));
duke@435 229
duke@435 230 gc.add(gc_impl);
duke@435 231 rv.add(gc);
duke@435 232
duke@435 233 rv.add(new DirectoryFilter("C1", "share/vm/c1", sbase));
duke@435 234
duke@435 235 ContainerFilter c2 = new ContainerFilter("C2");
duke@435 236 //c2.add(new DirectoryFilter("share/vm/adlc", sbase));
duke@435 237 c2.add(new DirectoryFilter("share/vm/opto", sbase));
duke@435 238 c2.add(new SpecificNameFilter("Generated", new String[] {"^ad_.+", "^dfa_.+", "^adGlobals.+"}));
duke@435 239 rv.add(c2);
duke@435 240
duke@435 241 ContainerFilter comp = new ContainerFilter("Compiler Common");
duke@435 242 comp.add(new DirectoryFilter("share/vm/asm", sbase));
duke@435 243 comp.add(new DirectoryFilter("share/vm/ci", sbase));
duke@435 244 comp.add(new DirectoryFilter("share/vm/code", sbase));
duke@435 245 comp.add(new DirectoryFilter("share/vm/compiler", sbase));
duke@435 246 rv.add(comp);
duke@435 247
duke@435 248 rv.add(new DirectoryFilter("Interpreter",
duke@435 249 "share/vm/interpreter",
duke@435 250 sbase));
duke@435 251
duke@435 252 ContainerFilter misc = new ContainerFilter("Misc");
duke@435 253 //misc.add(new DirectoryFilter("share/vm/launch", sbase));
duke@435 254 misc.add(new DirectoryFilter("share/vm/libadt", sbase));
duke@435 255 misc.add(new DirectoryFilter("share/vm/services", sbase));
duke@435 256 misc.add(new DirectoryFilter("share/vm/utilities", sbase));
duke@435 257 rv.add(misc);
duke@435 258
duke@435 259 rv.add(new DirectoryFilter("os_cpu", sbase));
duke@435 260
duke@435 261 rv.add(new DirectoryFilter("cpu", sbase));
duke@435 262
duke@435 263 rv.add(new DirectoryFilter("os", sbase));
duke@435 264
duke@435 265 rv.add(new SpecificNameFilter("JVMTI Generated", new String[] {"^jvmti.+"}));
duke@435 266
duke@435 267 rv.add(new SpecificNameFilter("C++ Interpreter Generated", new String[] {"^bytecodeInterpreterWithChecks.+"}));
duke@435 268
duke@435 269 rv.add(new SpecificNameFilter("Include DBs", new String[] {"^includeDB_.+"}));
duke@435 270
duke@435 271 // this one is to catch files not caught by other filters
duke@435 272 //rv.add(new TypeFilter("Header Files", new String[] {"h", "hpp", "hxx", "hm", "inl", "fi", "fd"}));
duke@435 273 rv.add(new TerminatorFilter("Source Files"));
duke@435 274
duke@435 275 return rv;
duke@435 276 }
duke@435 277
duke@435 278 void writeFiles(Vector allConfigs) {
duke@435 279
duke@435 280 Hashtable allFiles = computeAttributedFiles(allConfigs);
duke@435 281
duke@435 282 Vector allConfigNames = new Vector();
duke@435 283 for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
duke@435 284 allConfigNames.add(((BuildConfig)i.next()).get("Name"));
duke@435 285 }
duke@435 286
duke@435 287 TreeSet sortedFiles = sortFiles(allFiles);
duke@435 288
duke@435 289 startTag("Files", null);
duke@435 290
duke@435 291 for (Iterator i = makeFilters(sortedFiles).iterator(); i.hasNext(); ) {
duke@435 292 doWriteFiles(sortedFiles, allConfigNames, (NameFilter)i.next());
duke@435 293 }
duke@435 294
duke@435 295
duke@435 296 startTag("Filter",
duke@435 297 new String[] {
duke@435 298 "Name", "Resource Files",
duke@435 299 "Filter", "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
duke@435 300 }
duke@435 301 );
duke@435 302 endTag("Filter");
duke@435 303
duke@435 304 endTag("Files");
duke@435 305 }
duke@435 306
duke@435 307 void doWriteFiles(TreeSet allFiles, Vector allConfigNames, NameFilter filter) {
duke@435 308 startTag("Filter",
duke@435 309 new String[] {
duke@435 310 "Name", filter.name(),
duke@435 311 "Filter", filter.filterString()
duke@435 312 }
duke@435 313 );
duke@435 314
duke@435 315 if (filter instanceof ContainerFilter) {
duke@435 316
duke@435 317 Iterator i = ((ContainerFilter)filter).babies();
duke@435 318 while (i.hasNext()) {
duke@435 319 doWriteFiles(allFiles, allConfigNames, (NameFilter)i.next());
duke@435 320 }
duke@435 321
duke@435 322 } else {
duke@435 323
duke@435 324 Iterator i = allFiles.iterator();
duke@435 325 while (i.hasNext()) {
duke@435 326 FileInfo fi = (FileInfo)i.next();
duke@435 327
duke@435 328 if (!filter.match(fi)) {
duke@435 329 continue;
duke@435 330 }
duke@435 331
duke@435 332 startTag("File",
duke@435 333 new String[] {
duke@435 334 "RelativePath", fi.full.replace('/', '\\')
duke@435 335 }
duke@435 336 );
duke@435 337
duke@435 338 FileAttribute a = fi.attr;
duke@435 339 if (a.pchRoot) {
duke@435 340 writeCustomToolConfig(allConfigNames,
duke@435 341 new String[] {
duke@435 342 "Name", "VCCLCompilerTool",
duke@435 343 "UsePrecompiledHeader", "1"
duke@435 344 });
duke@435 345 }
duke@435 346
duke@435 347 if (a.noPch) {
duke@435 348 writeCustomToolConfig(allConfigNames,
duke@435 349 new String[] {
duke@435 350 "Name", "VCCLCompilerTool",
duke@435 351 "UsePrecompiledHeader", "0"
duke@435 352 });
duke@435 353 }
duke@435 354
duke@435 355 if (a.configs != null) {
duke@435 356 for (Iterator j=allConfigNames.iterator(); j.hasNext();) {
duke@435 357 String cfg = (String)j.next();
duke@435 358 if (!a.configs.contains(cfg)) {
duke@435 359 startTag("FileConfiguration",
duke@435 360 new String[] {
duke@435 361 "Name", cfg,
duke@435 362 "ExcludedFromBuild", "TRUE"
duke@435 363 });
duke@435 364 tag("Tool", new String[] {"Name", "VCCLCompilerTool"});
duke@435 365 endTag("FileConfiguration");
duke@435 366
duke@435 367 }
duke@435 368 }
duke@435 369 }
duke@435 370
duke@435 371 endTag("File");
duke@435 372
duke@435 373 // we not gonna look at this file anymore
duke@435 374 i.remove();
duke@435 375 }
duke@435 376 }
duke@435 377
duke@435 378 endTag("Filter");
duke@435 379 }
duke@435 380
duke@435 381
duke@435 382 void writeConfiguration(BuildConfig cfg) {
duke@435 383 startTag("Configuration",
duke@435 384 new String[] {
duke@435 385 "Name", cfg.get("Name"),
duke@435 386 "OutputDirectory", cfg.get("OutputDir"),
duke@435 387 "IntermediateDirectory", cfg.get("OutputDir"),
duke@435 388 "ConfigurationType", "2",
duke@435 389 "UseOfMFC", "0",
duke@435 390 "ATLMinimizesCRunTimeLibraryUsage", "FALSE"
duke@435 391 }
duke@435 392 );
duke@435 393
duke@435 394
duke@435 395
duke@435 396 tagV("Tool", cfg.getV("CompilerFlags"));
duke@435 397
duke@435 398 tag("Tool",
duke@435 399 new String[] {
duke@435 400 "Name", "VCCustomBuildTool"
duke@435 401 }
duke@435 402 );
duke@435 403
duke@435 404 tagV("Tool", cfg.getV("LinkerFlags"));
duke@435 405
duke@435 406 tag("Tool",
duke@435 407 new String[] {
duke@435 408 "Name", "VCPostBuildEventTool"
duke@435 409 }
duke@435 410 );
duke@435 411
duke@435 412 tag("Tool",
duke@435 413 new String[] {
duke@435 414 "Name", "VCPreBuildEventTool"
duke@435 415 }
duke@435 416 );
duke@435 417
duke@435 418 tag("Tool",
duke@435 419 new String[] {
duke@435 420 "Name", "VCPreLinkEventTool",
duke@435 421 "Description", BuildConfig.getFieldString(null, "PrelinkDescription"),
ikrylov@1094 422 //Caution: String.replace(String,String) is available from JDK5 onwards only
ikrylov@1094 423 "CommandLine", cfg.expandFormat(BuildConfig.getFieldString(null, "PrelinkCommand").replace
ikrylov@1094 424 ("\t", "&#x0D;&#x0A;"))
duke@435 425 }
duke@435 426 );
duke@435 427
duke@435 428 tag("Tool",
duke@435 429 new String[] {
duke@435 430 "Name", "VCResourceCompilerTool",
duke@435 431 // XXX???
duke@435 432 "PreprocessorDefinitions", "NDEBUG",
duke@435 433 "Culture", "1033"
duke@435 434 }
duke@435 435 );
duke@435 436 tag("Tool",
duke@435 437 new String[] {
duke@435 438 "Name", "VCWebServiceProxyGeneratorTool"
duke@435 439 }
duke@435 440 );
duke@435 441
duke@435 442 tag ("Tool",
duke@435 443 new String[] {
duke@435 444 "Name", "VCXMLDataGeneratorTool"
duke@435 445 }
duke@435 446 );
duke@435 447
duke@435 448 tag("Tool",
duke@435 449 new String[] {
duke@435 450 "Name", "VCWebDeploymentTool"
duke@435 451 }
duke@435 452 );
duke@435 453 tag("Tool",
duke@435 454 new String[] {
duke@435 455 "Name", "VCManagedWrapperGeneratorTool"
duke@435 456 }
duke@435 457 );
duke@435 458 tag("Tool",
duke@435 459 new String[] {
duke@435 460 "Name", "VCAuxiliaryManagedWrapperGeneratorTool"
duke@435 461 }
duke@435 462 );
duke@435 463
duke@435 464 tag("Tool",
duke@435 465 new String[] {
duke@435 466 "Name", "VCMIDLTool",
duke@435 467 "PreprocessorDefinitions", "NDEBUG",
duke@435 468 "MkTypLibCompatible", "TRUE",
duke@435 469 "SuppressStartupBanner", "TRUE",
duke@435 470 "TargetEnvironment", "1",
duke@435 471 "TypeLibraryName", cfg.get("OutputDir") + Util.sep + "vm.tlb",
duke@435 472 "HeaderFileName", ""
duke@435 473 }
duke@435 474 );
duke@435 475
duke@435 476 endTag("Configuration");
duke@435 477 }
duke@435 478
duke@435 479 int indent;
duke@435 480
duke@435 481 private void startTagPrim(String name,
duke@435 482 String[] attrs,
duke@435 483 boolean close) {
duke@435 484 doIndent();
duke@435 485 printWriter.print("<"+name);
duke@435 486 indent++;
duke@435 487
duke@435 488 if (attrs != null) {
duke@435 489 printWriter.println();
duke@435 490 for (int i=0; i<attrs.length; i+=2) {
duke@435 491 doIndent();
duke@435 492 printWriter.println(" " + attrs[i]+"=\""+attrs[i+1]+"\"");
duke@435 493 }
duke@435 494 }
duke@435 495
duke@435 496 if (close) {
duke@435 497 indent--;
duke@435 498 //doIndent();
duke@435 499 printWriter.println("/>");
duke@435 500 } else {
duke@435 501 //doIndent();
duke@435 502 printWriter.println(">");
duke@435 503 }
duke@435 504 }
duke@435 505
duke@435 506 void startTag(String name, String[] attrs) {
duke@435 507 startTagPrim(name, attrs, false);
duke@435 508 }
duke@435 509
duke@435 510 void startTagV(String name, Vector attrs) {
duke@435 511 String s[] = new String [attrs.size()];
duke@435 512 for (int i=0; i<attrs.size(); i++) {
duke@435 513 s[i] = (String)attrs.elementAt(i);
duke@435 514 }
duke@435 515 startTagPrim(name, s, false);
duke@435 516 }
duke@435 517
duke@435 518 void endTag(String name) {
duke@435 519 indent--;
duke@435 520 doIndent();
duke@435 521 printWriter.println("</"+name+">");
duke@435 522 }
duke@435 523
duke@435 524 void tag(String name, String[] attrs) {
duke@435 525 startTagPrim(name, attrs, true);
duke@435 526 }
duke@435 527
duke@435 528 void tagV(String name, Vector attrs) {
duke@435 529 String s[] = new String [attrs.size()];
duke@435 530 for (int i=0; i<attrs.size(); i++) {
duke@435 531 s[i] = (String)attrs.elementAt(i);
duke@435 532 }
duke@435 533 startTagPrim(name, s, true);
duke@435 534 }
duke@435 535
duke@435 536
duke@435 537 void doIndent() {
duke@435 538 for (int i=0; i<indent; i++) {
duke@435 539 printWriter.print(" ");
duke@435 540 }
duke@435 541 }
duke@435 542
duke@435 543 protected String getProjectExt() {
duke@435 544 return ".vcproj";
duke@435 545 }
duke@435 546 }
duke@435 547
duke@435 548 class CompilerInterfaceVC7 extends CompilerInterface {
ikrylov@1094 549 void getBaseCompilerFlags_common(Vector defines, Vector includes, String outDir,Vector rv) {
duke@435 550
duke@435 551 // advanced M$ IDE (2003) can only recognize name if it's first or
duke@435 552 // second attribute in the tag - go guess
duke@435 553 addAttr(rv, "Name", "VCCLCompilerTool");
duke@435 554 addAttr(rv, "AdditionalIncludeDirectories", Util.join(",", includes));
ikrylov@1094 555 addAttr(rv, "PreprocessorDefinitions",
ikrylov@1094 556 Util.join(";", defines).replace("\"","&quot;"));
ikrylov@1094 557 addAttr(rv, "PrecompiledHeaderThrough",
ikrylov@1094 558 "incls"+Util.sep+"_precompiled.incl");
duke@435 559 addAttr(rv, "PrecompiledHeaderFile", outDir+Util.sep+"vm.pch");
duke@435 560 addAttr(rv, "AssemblerListingLocation", outDir);
duke@435 561 addAttr(rv, "ObjectFile", outDir+Util.sep);
duke@435 562 addAttr(rv, "ProgramDataBaseFileName", outDir+Util.sep+"vm.pdb");
ikrylov@1094 563 // Set /nologo optin
duke@435 564 addAttr(rv, "SuppressStartupBanner", "TRUE");
ikrylov@1094 565 // Surpass the default /Tc or /Tp. 0 is compileAsDefault
duke@435 566 addAttr(rv, "CompileAs", "0");
ikrylov@1094 567 // Set /W3 option. 3 is warningLevel_3
duke@435 568 addAttr(rv, "WarningLevel", "3");
ikrylov@1094 569 // Set /WX option,
duke@435 570 addAttr(rv, "WarnAsError", "TRUE");
ikrylov@1094 571 // Set /GS option
duke@435 572 addAttr(rv, "BufferSecurityCheck", "FALSE");
ikrylov@1094 573 // Set /Zi option. 3 is debugEnabled
ikrylov@1094 574 addAttr(rv, "DebugInformationFormat", "3");
ikrylov@1094 575 }
ikrylov@1094 576 Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir) {
ikrylov@1094 577 Vector rv = new Vector();
ikrylov@1094 578
ikrylov@1094 579 getBaseCompilerFlags_common(defines,includes, outDir, rv);
ikrylov@1094 580 // Set /Yu option. 3 is pchUseUsingSpecific
ikrylov@1094 581 // Note: Starting VC8 pchUseUsingSpecific is 2 !!!
ikrylov@1094 582 addAttr(rv, "UsePrecompiledHeader", "3");
ikrylov@1094 583 // Set /EHsc- option
duke@435 584 addAttr(rv, "ExceptionHandling", "FALSE");
duke@435 585
duke@435 586 return rv;
duke@435 587 }
duke@435 588
duke@435 589 Vector getBaseLinkerFlags(String outDir, String outDll) {
duke@435 590 Vector rv = new Vector();
duke@435 591
duke@435 592 addAttr(rv, "Name", "VCLinkerTool");
duke@435 593 addAttr(rv, "AdditionalOptions",
duke@435 594 "/export:JNI_GetDefaultJavaVMInitArgs " +
duke@435 595 "/export:JNI_CreateJavaVM " +
duke@435 596 "/export:JNI_GetCreatedJavaVMs "+
duke@435 597 "/export:jio_snprintf /export:jio_printf "+
duke@435 598 "/export:jio_fprintf /export:jio_vfprintf "+
duke@435 599 "/export:jio_vsnprintf ");
duke@435 600 addAttr(rv, "AdditionalDependencies", "Wsock32.lib winmm.lib");
duke@435 601 addAttr(rv, "OutputFile", outDll);
ikrylov@1094 602 // Set /INCREMENTAL option. 1 is linkIncrementalNo
duke@435 603 addAttr(rv, "LinkIncremental", "1");
duke@435 604 addAttr(rv, "SuppressStartupBanner", "TRUE");
duke@435 605 addAttr(rv, "ModuleDefinitionFile", outDir+Util.sep+"vm.def");
duke@435 606 addAttr(rv, "ProgramDatabaseFile", outDir+Util.sep+"vm.pdb");
ikrylov@1094 607 // Set /SUBSYSTEM option. 2 is subSystemWindows
duke@435 608 addAttr(rv, "SubSystem", "2");
duke@435 609 addAttr(rv, "BaseAddress", "0x8000000");
duke@435 610 addAttr(rv, "ImportLibrary", outDir+Util.sep+"jvm.lib");
ikrylov@1094 611 // Set /MACHINE option. 1 is machineX86
duke@435 612 addAttr(rv, "TargetMachine", "1");
duke@435 613
duke@435 614 return rv;
duke@435 615 }
duke@435 616
ikrylov@1094 617 void getDebugCompilerFlags_common(String opt,Vector rv) {
ikrylov@1094 618
ikrylov@1094 619 // Set /On option
ikrylov@1094 620 addAttr(rv, "Optimization", opt);
ikrylov@1094 621 // Set /FR option. 1 is brAllInfo
ikrylov@1094 622 addAttr(rv, "BrowseInformation", "1");
ikrylov@1094 623 addAttr(rv, "BrowseInformationFile", "$(IntDir)" + Util.sep);
ikrylov@1094 624 // Set /MD option. 2 is rtMultiThreadedDLL
ikrylov@1094 625 addAttr(rv, "RuntimeLibrary", "2");
ikrylov@1094 626 // Set /Oy- option
ikrylov@1094 627 addAttr(rv, "OmitFramePointers", "FALSE");
ikrylov@1094 628
ikrylov@1094 629 }
ikrylov@1094 630
duke@435 631 Vector getDebugCompilerFlags(String opt) {
duke@435 632 Vector rv = new Vector();
duke@435 633
ikrylov@1094 634 getDebugCompilerFlags_common(opt,rv);
duke@435 635
duke@435 636 return rv;
duke@435 637 }
duke@435 638
duke@435 639 Vector getDebugLinkerFlags() {
duke@435 640 Vector rv = new Vector();
duke@435 641
ikrylov@1094 642 addAttr(rv, "GenerateDebugInformation", "TRUE"); // == /DEBUG option
duke@435 643
duke@435 644 return rv;
duke@435 645 }
duke@435 646
ikrylov@1094 647 void getProductCompilerFlags_common(Vector rv) {
ikrylov@1094 648 // Set /O2 option. 2 is optimizeMaxSpeed
ikrylov@1094 649 addAttr(rv, "Optimization", "2");
ikrylov@1094 650 // Set /Oy- option
ikrylov@1094 651 addAttr(rv, "OmitFramePointers", "FALSE");
ikrylov@1094 652 }
ikrylov@1094 653
duke@435 654 Vector getProductCompilerFlags() {
duke@435 655 Vector rv = new Vector();
duke@435 656
ikrylov@1094 657 getProductCompilerFlags_common(rv);
ikrylov@1094 658 // Set /Ob option. 1 is expandOnlyInline
duke@435 659 addAttr(rv, "InlineFunctionExpansion", "1");
ikrylov@1094 660 // Set /GF option.
duke@435 661 addAttr(rv, "StringPooling", "TRUE");
ikrylov@1094 662 // Set /MD option. 2 is rtMultiThreadedDLL
duke@435 663 addAttr(rv, "RuntimeLibrary", "2");
ikrylov@1094 664 // Set /Gy option
duke@435 665 addAttr(rv, "EnableFunctionLevelLinking", "TRUE");
duke@435 666
duke@435 667 return rv;
duke@435 668 }
duke@435 669
duke@435 670 Vector getProductLinkerFlags() {
duke@435 671 Vector rv = new Vector();
duke@435 672
ikrylov@1094 673 // Set /OPT:REF option. 2 is optReferences
duke@435 674 addAttr(rv, "OptimizeReferences", "2");
ikrylov@1094 675 // Set /OPT:optFolding option. 2 is optFolding
duke@435 676 addAttr(rv, "EnableCOMDATFolding", "2");
duke@435 677
duke@435 678 return rv;
duke@435 679 }
duke@435 680
duke@435 681 String getOptFlag() {
duke@435 682 return "2";
duke@435 683 }
duke@435 684
duke@435 685 String getNoOptFlag() {
duke@435 686 return "0";
duke@435 687 }
duke@435 688
duke@435 689 String makeCfgName(String flavourBuild) {
duke@435 690 return flavourBuild + "|" + Util.os;
duke@435 691 }
duke@435 692 }

mercurial