Thu, 27 May 2010 19:08:38 -0700
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", "
")) |
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("\"",""")); |
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 | } |