src/share/tools/ProjectCreator/WinGammaPlatformVC10.java

Tue, 23 Aug 2011 11:06:30 +0200

author
brutisso
date
Tue, 23 Aug 2011 11:06:30 +0200
changeset 3069
2f27ed2a98fa
parent 2757
c49c3947b98a
child 4112
1a9b9cfcef41
permissions
-rw-r--r--

7082220: Visual Studio projects broken after change 7016797: Hotspot: securely/restrictive load dlls and new
Summary: Add the psapi.lib library to Visual Studio projects
Reviewed-by: jwilhelm, poonam, kamg

sla@2675 1 import java.io.File;
sla@2675 2 import java.io.FileNotFoundException;
sla@2675 3 import java.io.IOException;
sla@2675 4 import java.io.PrintWriter;
sla@2675 5 import java.io.UnsupportedEncodingException;
sla@2675 6 import java.util.Hashtable;
sla@2675 7 import java.util.Iterator;
sla@2675 8 import java.util.TreeSet;
sla@2675 9 import java.util.UUID;
sla@2675 10 import java.util.Vector;
sla@2675 11
sla@2675 12 public class WinGammaPlatformVC10 extends WinGammaPlatformVC7 {
sla@2675 13
sla@2675 14 @Override
sla@2675 15 protected String getProjectExt() {
sla@2675 16 return ".vcxproj";
sla@2675 17 }
sla@2675 18
sla@2675 19 @Override
sla@2675 20 public void writeProjectFile(String projectFileName, String projectName,
sla@2675 21 Vector<BuildConfig> allConfigs) throws IOException {
sla@2675 22 System.out.println();
sla@2675 23 System.out.print(" Writing .vcxproj file: " + projectFileName);
sla@2675 24
sla@2675 25 String projDir = Util.normalize(new File(projectFileName).getParent());
sla@2675 26
sla@2675 27 printWriter = new PrintWriter(projectFileName, "UTF-8");
sla@2675 28 printWriter.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sla@2675 29 startTag("Project",
sla@2675 30 "DefaultTargets", "Build",
sla@2675 31 "ToolsVersion", "4.0",
sla@2675 32 "xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
sla@2675 33 startTag("ItemGroup",
sla@2675 34 "Label", "ProjectConfigurations");
sla@2675 35 for (BuildConfig cfg : allConfigs) {
sla@2675 36 startTag("ProjectConfiguration",
sla@2675 37 "Include", cfg.get("Name"));
sla@2675 38 tagData("Configuration", cfg.get("Id"));
sla@2675 39 tagData("Platform", cfg.get("PlatformName"));
sla@2675 40 endTag("ProjectConfiguration");
sla@2675 41 }
sla@2675 42 endTag("ItemGroup");
sla@2675 43
sla@2675 44 startTag("PropertyGroup", "Label", "Globals");
sla@2675 45 tagData("ProjectGuid", "{8822CB5C-1C41-41C2-8493-9F6E1994338B}");
sla@2675 46 tag("SccProjectName");
sla@2675 47 tag("SccLocalPath");
sla@2675 48 endTag("PropertyGroup");
sla@2675 49
sla@2675 50 tag("Import", "Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");
sla@2675 51
sla@2675 52 for (BuildConfig cfg : allConfigs) {
sla@2675 53 startTag(cfg, "PropertyGroup", "Label", "Configuration");
sla@2675 54 tagData("ConfigurationType", "DynamicLibrary");
sla@2675 55 tagData("UseOfMfc", "false");
sla@2675 56 endTag("PropertyGroup");
sla@2675 57 }
sla@2675 58
sla@2675 59 tag("Import", "Project", "$(VCTargetsPath)\\Microsoft.Cpp.props");
sla@2675 60 startTag("ImportGroup", "Label", "ExtensionSettings");
sla@2675 61 endTag("ImportGroup");
sla@2675 62 for (BuildConfig cfg : allConfigs) {
sla@2675 63 startTag(cfg, "ImportGroup", "Label", "PropertySheets");
sla@2675 64 tag("Import",
sla@2675 65 "Project", "$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props",
sla@2675 66 "Condition", "exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')",
sla@2675 67 "Label", "LocalAppDataPlatform");
sla@2675 68 endTag("ImportGroup");
sla@2675 69 }
sla@2675 70
sla@2675 71 tag("PropertyGroup", "Label", "UserMacros");
sla@2675 72
sla@2675 73 startTag("PropertyGroup");
sla@2675 74 tagData("_ProjectFileVersion", "10.0.30319.1");
sla@2675 75 for (BuildConfig cfg : allConfigs) {
sla@2675 76 tagData(cfg, "OutDir", cfg.get("OutputDir") + Util.sep);
sla@2675 77 tagData(cfg, "IntDir", cfg.get("OutputDir") + Util.sep);
sla@2675 78 tagData(cfg, "LinkIncremental", "false");
sla@2675 79 }
sla@2675 80 for (BuildConfig cfg : allConfigs) {
sla@2675 81 tagData(cfg, "CodeAnalysisRuleSet", "AllRules.ruleset");
sla@2675 82 tag(cfg, "CodeAnalysisRules");
sla@2675 83 tag(cfg, "CodeAnalysisRuleAssemblies");
sla@2675 84 }
sla@2675 85 endTag("PropertyGroup");
sla@2675 86
sla@2675 87 for (BuildConfig cfg : allConfigs) {
sla@2675 88 startTag(cfg, "ItemDefinitionGroup");
sla@2675 89 startTag("ClCompile");
sla@2675 90 tagV(cfg.getV("CompilerFlags"));
sla@2675 91 endTag("ClCompile");
sla@2675 92
sla@2675 93 startTag("Link");
sla@2675 94 tagV(cfg.getV("LinkerFlags"));
sla@2675 95 endTag("Link");
sla@2675 96
sla@2675 97 startTag("PostBuildEvent");
sla@2675 98 tagData("Message", BuildConfig.getFieldString(null, "PostbuildDescription"));
sla@2675 99 tagData("Command", cfg.expandFormat(BuildConfig.getFieldString(null, "PostbuildCommand").replace("\t", "\r\n")));
sla@2675 100 endTag("PostBuildEvent");
sla@2675 101
sla@2675 102 startTag("PreLinkEvent");
sla@2675 103 tagData("Message", BuildConfig.getFieldString(null, "PrelinkDescription"));
sla@2675 104 tagData("Command", cfg.expandFormat(BuildConfig.getFieldString(null, "PrelinkCommand").replace("\t", "\r\n")));
sla@2675 105 endTag("PreLinkEvent");
sla@2675 106
sla@2675 107 endTag("ItemDefinitionGroup");
sla@2675 108 }
sla@2675 109
sla@2675 110 writeFiles(allConfigs, projDir);
sla@2675 111
sla@2675 112 tag("Import", "Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
sla@2675 113 startTag("ImportGroup", "Label", "ExtensionTargets");
sla@2675 114 endTag("ImportGroup");
sla@2675 115
sla@2675 116 endTag("Project");
sla@2675 117 printWriter.close();
sla@2675 118 System.out.println(" Done.");
sla@2675 119
sla@2675 120 writeFilterFile(projectFileName, projectName, allConfigs, projDir);
sla@2675 121 writeUserFile(projectFileName, allConfigs);
sla@2675 122 }
sla@2675 123
sla@2675 124
sla@2675 125 private void writeUserFile(String projectFileName, Vector<BuildConfig> allConfigs) throws FileNotFoundException, UnsupportedEncodingException {
sla@2675 126 String userFileName = projectFileName + ".user";
sla@2675 127 if (new File(userFileName).exists()) {
sla@2675 128 return;
sla@2675 129 }
sla@2675 130 System.out.print(" Writing .vcxproj.user file: " + userFileName);
sla@2675 131 printWriter = new PrintWriter(userFileName, "UTF-8");
sla@2675 132
sla@2675 133 printWriter.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sla@2675 134 startTag("Project",
sla@2675 135 "ToolsVersion", "4.0",
sla@2675 136 "xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
sla@2675 137
sla@2675 138 for (BuildConfig cfg : allConfigs) {
sla@2675 139 startTag(cfg, "PropertyGroup");
sla@2675 140 tagData("LocalDebuggerCommand", "$(TargetDir)/hotspot.exe");
sla@2675 141 endTag("PropertyGroup");
sla@2675 142 }
sla@2675 143
sla@2675 144 endTag("Project");
sla@2675 145 printWriter.close();
sla@2675 146 System.out.println(" Done.");
sla@2675 147 }
sla@2675 148
sla@2675 149 private void writeFilterFile(String projectFileName, String projectName,
sla@2675 150 Vector<BuildConfig> allConfigs, String base) throws FileNotFoundException, UnsupportedEncodingException {
sla@2675 151 String filterFileName = projectFileName + ".filters";
sla@2675 152 System.out.print(" Writing .vcxproj.filters file: " + filterFileName);
sla@2675 153 printWriter = new PrintWriter(filterFileName, "UTF-8");
sla@2675 154
sla@2675 155 printWriter.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sla@2675 156 startTag("Project",
sla@2675 157 "ToolsVersion", "4.0",
sla@2675 158 "xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
sla@2675 159
sla@2675 160 Hashtable<String, FileAttribute> allFiles = computeAttributedFiles(allConfigs);
sla@2675 161 TreeSet<FileInfo> sortedFiles = sortFiles(allFiles);
sla@2675 162 Vector<NameFilter> filters = makeFilters(sortedFiles);
sla@2675 163
sla@2675 164 // first all filters
sla@2675 165 startTag("ItemGroup");
sla@2675 166 for (NameFilter filter : filters) {
sla@2675 167 doWriteFilter(filter, "");
sla@2675 168 }
sla@2675 169 startTag("Filter", "Include", "Resource Files");
sla@2675 170 UUID uuid = UUID.randomUUID();
sla@2675 171 tagData("UniqueIdentifier", "{" + uuid.toString() + "}");
sla@2675 172 tagData("Extensions", "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe");
sla@2675 173 endTag("Filter");
sla@2675 174 endTag("ItemGroup");
sla@2675 175
sla@2675 176 // then all cpp files
sla@2675 177 startTag("ItemGroup");
sla@2675 178 for (NameFilter filter : filters) {
sla@2675 179 doWriteFiles(sortedFiles, filter, "", "ClCompile", new Evaluator() {
sla@2675 180 public boolean pick(FileInfo fi) {
sla@2675 181 return fi.isCpp();
sla@2675 182 }
sla@2675 183 }, base);
sla@2675 184 }
sla@2675 185 endTag("ItemGroup");
sla@2675 186
sla@2675 187 // then all header files
sla@2675 188 startTag("ItemGroup");
sla@2675 189 for (NameFilter filter : filters) {
sla@2675 190 doWriteFiles(sortedFiles, filter, "", "ClInclude", new Evaluator() {
sla@2675 191 public boolean pick(FileInfo fi) {
sla@2675 192 return fi.isHeader();
sla@2675 193 }
sla@2675 194 }, base);
sla@2675 195 }
sla@2675 196 endTag("ItemGroup");
sla@2675 197
sla@2675 198 // then all other files
sla@2675 199 startTag("ItemGroup");
sla@2675 200 for (NameFilter filter : filters) {
sla@2675 201 doWriteFiles(sortedFiles, filter, "", "None", new Evaluator() {
sla@2675 202 public boolean pick(FileInfo fi) {
sla@2675 203 return true;
sla@2675 204 }
sla@2675 205 }, base);
sla@2675 206 }
sla@2675 207 endTag("ItemGroup");
sla@2675 208
sla@2675 209 endTag("Project");
sla@2675 210 printWriter.close();
sla@2675 211 System.out.println(" Done.");
sla@2675 212 }
sla@2675 213
sla@2675 214
sla@2675 215 private void doWriteFilter(NameFilter filter, String start) {
sla@2675 216 startTag("Filter", "Include", start + filter.fname);
sla@2675 217 UUID uuid = UUID.randomUUID();
sla@2675 218 tagData("UniqueIdentifier", "{" + uuid.toString() + "}");
sla@2675 219 endTag("Filter");
sla@2675 220 if (filter instanceof ContainerFilter) {
sla@2675 221 Iterator i = ((ContainerFilter)filter).babies();
sla@2675 222 while (i.hasNext()) {
sla@2675 223 doWriteFilter((NameFilter)i.next(), start + filter.fname + "\\");
sla@2675 224 }
sla@2675 225 }
sla@2675 226 }
sla@2675 227
sla@2675 228 interface Evaluator {
sla@2675 229 boolean pick(FileInfo fi);
sla@2675 230 }
sla@2675 231
sla@2675 232 private void doWriteFiles(TreeSet<FileInfo> allFiles, NameFilter filter, String start, String tool, Evaluator eval, String base) {
sla@2675 233 if (filter instanceof ContainerFilter) {
sla@2675 234 Iterator i = ((ContainerFilter)filter).babies();
sla@2675 235 while (i.hasNext()) {
sla@2675 236 doWriteFiles(allFiles, (NameFilter)i.next(), start + filter.fname + "\\", tool, eval, base);
sla@2675 237 }
sla@2675 238 }
sla@2675 239 else {
sla@2675 240 Iterator i = allFiles.iterator();
sla@2675 241 while (i.hasNext()) {
sla@2675 242 FileInfo fi = (FileInfo)i.next();
sla@2675 243
sla@2675 244 if (!filter.match(fi)) {
sla@2675 245 continue;
sla@2675 246 }
sla@2675 247 if (eval.pick(fi)) {
sla@2675 248 startTag(tool, "Include", rel(fi.full, base));
sla@2675 249 tagData("Filter", start + filter.fname);
sla@2675 250 endTag(tool);
sla@2675 251
sla@2675 252 // we not gonna look at this file anymore (sic!)
sla@2675 253 i.remove();
sla@2675 254 }
sla@2675 255 }
sla@2675 256 }
sla@2675 257 }
sla@2675 258
sla@2675 259
sla@2675 260 void writeFiles(Vector<BuildConfig> allConfigs, String projDir) {
sla@2675 261 Hashtable<String, FileAttribute> allFiles = computeAttributedFiles(allConfigs);
sla@2675 262 TreeSet<FileInfo> sortedFiles = sortFiles(allFiles);
sla@2675 263
sla@2675 264 // first cpp-files
sla@2675 265 startTag("ItemGroup");
sla@2675 266 for (FileInfo fi : sortedFiles) {
sla@2675 267 if (!fi.isCpp()) {
sla@2675 268 continue;
sla@2675 269 }
sla@2675 270 writeFile("ClCompile", allConfigs, fi, projDir);
sla@2675 271 }
sla@2675 272 endTag("ItemGroup");
sla@2675 273
sla@2675 274 // then header-files
sla@2675 275 startTag("ItemGroup");
sla@2675 276 for (FileInfo fi : sortedFiles) {
sla@2675 277 if (!fi.isHeader()) {
sla@2675 278 continue;
sla@2675 279 }
sla@2675 280 writeFile("ClInclude", allConfigs, fi, projDir);
sla@2675 281 }
sla@2675 282 endTag("ItemGroup");
sla@2675 283
sla@2675 284 // then others
sla@2675 285 startTag("ItemGroup");
sla@2675 286 for (FileInfo fi : sortedFiles) {
sla@2675 287 if (fi.isHeader() || fi.isCpp()) {
sla@2675 288 continue;
sla@2675 289 }
sla@2675 290 writeFile("None", allConfigs, fi, projDir);
sla@2675 291 }
sla@2675 292 endTag("ItemGroup");
sla@2675 293 }
sla@2675 294
sla@2675 295 /**
sla@2675 296 * Make "path" into a relative path using "base" as the base.
sla@2675 297 *
sla@2675 298 * path and base are assumed to be normalized with / as the file separator.
sla@2675 299 * returned path uses "\\" as file separator
sla@2675 300 */
sla@2675 301 private String rel(String path, String base)
sla@2675 302 {
sla@2675 303 if(!base.endsWith("/")) {
sla@2675 304 base += "/";
sla@2675 305 }
sla@2675 306 String[] pathTok = path.split("/");
sla@2675 307 String[] baseTok = base.split("/");
sla@2675 308 int pi = 0;
sla@2675 309 int bi = 0;
sla@2675 310 StringBuilder newPath = new StringBuilder();
sla@2675 311
sla@2675 312 // first step past all path components that are the same
sla@2675 313 while (pi < pathTok.length &&
sla@2675 314 bi < baseTok.length &&
sla@2675 315 pathTok[pi].equals(baseTok[bi])) {
sla@2675 316 pi++;
sla@2675 317 bi++;
sla@2675 318 }
sla@2675 319
sla@2675 320 // for each path component left in base, add "../"
sla@2675 321 while (bi < baseTok.length) {
sla@2675 322 bi++;
sla@2675 323 newPath.append("..\\");
sla@2675 324 }
sla@2675 325
sla@2675 326 // now add everything left in path
sla@2675 327 while (pi < pathTok.length) {
sla@2675 328 newPath.append(pathTok[pi]);
sla@2675 329 pi++;
sla@2675 330 if (pi != pathTok.length) {
sla@2675 331 newPath.append("\\");
sla@2675 332 }
sla@2675 333 }
sla@2675 334 return newPath.toString();
sla@2675 335 }
sla@2675 336
sla@2675 337 private void writeFile(String tool, Vector<BuildConfig> allConfigs, FileInfo fi, String base) {
sla@2675 338 if (fi.attr.configs == null && fi.attr.pchRoot == false && fi.attr.noPch == false) {
sla@2675 339 tag(tool, "Include", rel(fi.full, base));
sla@2675 340 }
sla@2675 341 else {
sla@2675 342 startTag(tool, "Include", rel(fi.full, base));
sla@2675 343 for (BuildConfig cfg : allConfigs) {
sla@2675 344 if (fi.attr.configs != null && !fi.attr.configs.contains(cfg.get("Name"))) {
sla@2675 345 tagData(cfg, "ExcludedFromBuild", "true");
sla@2675 346 }
sla@2675 347 if (fi.attr.pchRoot) {
sla@2675 348 tagData(cfg, "PrecompiledHeader", "Create");
sla@2675 349 }
sla@2675 350 if (fi.attr.noPch) {
sla@2675 351 startTag(cfg, "PrecompiledHeader");
sla@2675 352 endTag("PrecompiledHeader");
sla@2675 353 }
sla@2675 354 }
sla@2675 355 endTag(tool);
sla@2675 356 }
sla@2675 357 }
sla@2675 358
sla@2675 359 String buildCond(BuildConfig cfg) {
sla@2675 360 return "'$(Configuration)|$(Platform)'=='"+cfg.get("Name")+"'";
sla@2675 361 }
sla@2675 362
sla@2675 363
sla@2675 364 void tagV(Vector<String> v) {
sla@2675 365 Iterator<String> i = v.iterator();
sla@2675 366 while(i.hasNext()) {
sla@2675 367 String name = i.next();
sla@2675 368 String data = i.next();
sla@2675 369 tagData(name, data);
sla@2675 370 }
sla@2675 371 }
sla@2675 372
sla@2675 373 void tagData(BuildConfig cfg, String name, String data) {
sla@2675 374 tagData(name, data, "Condition", buildCond(cfg));
sla@2675 375 }
sla@2675 376
sla@2675 377 void tag(BuildConfig cfg, String name, String... attrs) {
sla@2675 378 String[] ss = new String[attrs.length + 2];
sla@2675 379 ss[0] = "Condition";
sla@2675 380 ss[1] = buildCond(cfg);
sla@2675 381 System.arraycopy(attrs, 0, ss, 2, attrs.length);
sla@2675 382
sla@2675 383 tag(name, ss);
sla@2675 384 }
sla@2675 385
sla@2675 386 void startTag(BuildConfig cfg, String name, String... attrs) {
sla@2675 387 String[] ss = new String[attrs.length + 2];
sla@2675 388 ss[0] = "Condition";
sla@2675 389 ss[1] = buildCond(cfg);
sla@2675 390 System.arraycopy(attrs, 0, ss, 2, attrs.length);
sla@2675 391
sla@2675 392 startTag(name, ss);
sla@2675 393 }
sla@2675 394 }
sla@2675 395
sla@2675 396 class CompilerInterfaceVC10 extends CompilerInterface {
sla@2675 397
sla@2675 398 @Override
sla@2675 399 Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir) {
sla@2675 400 Vector rv = new Vector();
sla@2675 401
sla@2675 402 addAttr(rv, "AdditionalIncludeDirectories", Util.join(";", includes));
sla@2675 403 addAttr(rv, "PreprocessorDefinitions",
sla@2675 404 Util.join(";", defines).replace("\\\"", "\""));
sla@2675 405 addAttr(rv, "PrecompiledHeaderFile", "precompiled.hpp");
sla@2675 406 addAttr(rv, "PrecompiledHeaderOutputFile", outDir+Util.sep+"vm.pch");
sla@2675 407 addAttr(rv, "AssemblerListingLocation", outDir);
sla@2675 408 addAttr(rv, "ObjectFileName", outDir+Util.sep);
sla@2675 409 addAttr(rv, "ProgramDataBaseFileName", outDir+Util.sep+"jvm.pdb");
sla@2675 410 // Set /nologo option
sla@2675 411 addAttr(rv, "SuppressStartupBanner", "true");
sla@2675 412 // Surpass the default /Tc or /Tp.
sla@2675 413 addAttr(rv, "CompileAs", "Default");
sla@2675 414 // Set /W3 option.
sla@2675 415 addAttr(rv, "WarningLevel", "Level3");
sla@2675 416 // Set /WX option,
sla@2675 417 addAttr(rv, "TreatWarningAsError", "true");
sla@2675 418 // Set /GS option
sla@2675 419 addAttr(rv, "BufferSecurityCheck", "false");
sla@2675 420 // Set /Zi option.
sla@2675 421 addAttr(rv, "DebugInformationFormat", "ProgramDatabase");
sla@2675 422 // Set /Yu option.
sla@2675 423 addAttr(rv, "PrecompiledHeader", "Use");
sla@2675 424 // Set /EHsc- option
sla@2675 425 addAttr(rv, "ExceptionHandling", "");
sla@2675 426
sla@2675 427 addAttr(rv, "MultiProcessorCompilation", "true");
sla@2675 428
sla@2675 429 return rv;
sla@2675 430 }
sla@2675 431
sla@2675 432 @Override
sla@2675 433 Vector getDebugCompilerFlags(String opt) {
sla@2675 434 Vector rv = new Vector();
sla@2675 435
sla@2675 436 // Set /On option
sla@2675 437 addAttr(rv, "Optimization", opt);
sla@2675 438 // Set /FR option.
sla@2675 439 addAttr(rv, "BrowseInformation", "true");
sla@2675 440 addAttr(rv, "BrowseInformationFile", "$(IntDir)");
sla@2675 441 // Set /MD option.
sla@2675 442 addAttr(rv, "RuntimeLibrary", "MultiThreadedDLL");
sla@2675 443 // Set /Oy- option
sla@2675 444 addAttr(rv, "OmitFramePointers", "false");
sla@2675 445
sla@2675 446 return rv;
sla@2675 447 }
sla@2675 448
sla@2675 449 @Override
sla@2675 450 Vector getProductCompilerFlags() {
sla@2675 451 Vector rv = new Vector();
sla@2675 452
sla@2675 453 // Set /O2 option.
sla@2675 454 addAttr(rv, "Optimization", "MaxSpeed");
sla@2675 455 // Set /Oy- option
sla@2675 456 addAttr(rv, "OmitFramePointers", "false");
sla@2675 457 // Set /Ob option. 1 is expandOnlyInline
sla@2675 458 addAttr(rv, "InlineFunctionExpansion", "OnlyExplicitInline");
sla@2675 459 // Set /GF option.
sla@2675 460 addAttr(rv, "StringPooling", "true");
sla@2675 461 // Set /MD option. 2 is rtMultiThreadedDLL
sla@2675 462 addAttr(rv, "RuntimeLibrary", "MultiThreadedDLL");
sla@2675 463 // Set /Gy option
sla@2675 464 addAttr(rv, "FunctionLevelLinking", "true");
sla@2675 465
sla@2675 466 return rv;
sla@2675 467 }
sla@2675 468
sla@2675 469 @Override
sla@2675 470 Vector getBaseLinkerFlags(String outDir, String outDll, String platformName) {
sla@2675 471 Vector rv = new Vector();
sla@2675 472
sla@2675 473 addAttr(rv, "AdditionalOptions",
sla@2675 474 "/export:JNI_GetDefaultJavaVMInitArgs " +
sla@2675 475 "/export:JNI_CreateJavaVM " +
sla@2675 476 "/export:JVM_FindClassFromBootLoader "+
sla@2675 477 "/export:JNI_GetCreatedJavaVMs "+
sla@2675 478 "/export:jio_snprintf /export:jio_printf "+
sla@2675 479 "/export:jio_fprintf /export:jio_vfprintf "+
sla@2675 480 "/export:jio_vsnprintf "+
sla@2675 481 "/export:JVM_GetVersionInfo "+
sla@2675 482 "/export:JVM_GetThreadStateNames "+
sla@2675 483 "/export:JVM_GetThreadStateValues "+
sla@2675 484 "/export:JVM_InitAgentProperties");
brutisso@3069 485 addAttr(rv, "AdditionalDependencies", "kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;Wsock32.lib;winmm.lib;psapi.lib");
sla@2675 486 addAttr(rv, "OutputFile", outDll);
sla@2675 487 addAttr(rv, "SuppressStartupBanner", "true");
sla@2675 488 addAttr(rv, "ModuleDefinitionFile", outDir+Util.sep+"vm.def");
sla@2675 489 addAttr(rv, "ProgramDatabaseFile", outDir+Util.sep+"jvm.pdb");
sla@2675 490 addAttr(rv, "SubSystem", "Windows");
sla@2675 491 addAttr(rv, "BaseAddress", "0x8000000");
sla@2675 492 addAttr(rv, "ImportLibrary", outDir+Util.sep+"jvm.lib");
sla@2675 493
sla@2675 494 if(platformName.equals("Win32")) {
sla@2675 495 addAttr(rv, "TargetMachine", "MachineX86");
sla@2675 496 } else {
sla@2675 497 addAttr(rv, "TargetMachine", "MachineX64");
sla@2675 498 }
sla@2675 499
brutisso@2757 500 // We always want the /DEBUG option to get full symbol information in the pdb files
brutisso@2757 501 addAttr(rv, "GenerateDebugInformation", "true");
brutisso@2757 502
sla@2675 503 return rv;
sla@2675 504 }
sla@2675 505
sla@2675 506 @Override
sla@2675 507 Vector getDebugLinkerFlags() {
sla@2675 508 Vector rv = new Vector();
sla@2675 509
brutisso@2757 510 // Empty now that /DEBUG option is used by all configs
sla@2675 511
sla@2675 512 return rv;
sla@2675 513 }
sla@2675 514
sla@2675 515 @Override
sla@2675 516 Vector getProductLinkerFlags() {
sla@2675 517 Vector rv = new Vector();
sla@2675 518
sla@2675 519 // Set /OPT:REF option.
sla@2675 520 addAttr(rv, "OptimizeReferences", "true");
sla@2675 521 // Set /OPT:ICF option.
sla@2675 522 addAttr(rv, "EnableCOMDATFolding", "true");
sla@2675 523
sla@2675 524 return rv;
sla@2675 525 }
sla@2675 526
sla@2675 527 @Override
sla@2675 528 void getAdditionalNonKernelLinkerFlags(Vector rv) {
sla@2675 529 extAttr(rv, "AdditionalOptions", " /export:AsyncGetCallTrace");
sla@2675 530 }
sla@2675 531
sla@2675 532 @Override
sla@2675 533 String getOptFlag() {
sla@2675 534 return "MaxSpeed";
sla@2675 535 }
sla@2675 536
sla@2675 537 @Override
sla@2675 538 String getNoOptFlag() {
sla@2675 539 return "Disabled";
sla@2675 540 }
sla@2675 541
sla@2675 542 @Override
sla@2675 543 String makeCfgName(String flavourBuild, String platform) {
sla@2675 544 return flavourBuild + "|" + platform;
sla@2675 545 }
sla@2675 546
sla@2675 547 }

mercurial