001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm;
014
015 /**
016 * Flags that specify the configuration of our virtual machine.
017 *
018 * Note: Changing any <code>final</code> flags requires that the whole vm
019 * be recompiled and rebuilt after their values are changed.
020 */
021 public abstract class Configuration {
022
023 //TODO: Split target specific configuration into separate file
024 public static final org.jikesrvm.ia32.MachineSpecificIA.IA32 archHelper = org.jikesrvm.ia32.MachineSpecificIA.IA32.singleton;
025
026 public static final boolean BuildForPowerPC = false;
027 public static final boolean BuildForIA32 = !BuildForPowerPC;
028 public static final boolean BuildForSSE2 = BuildForIA32 && true;
029 public static final boolean BuildForSSE2Full = BuildForSSE2 && true;
030 public static final boolean BuildForHwFsqrt = true && (false || VM.BuildForSSE2);
031
032 public static final boolean BuildFor32Addr = true;
033 public static final boolean BuildFor64Addr = !BuildFor32Addr;
034
035 public static final boolean BuildForAix = false;
036 public static final boolean BuildForLinux = true;
037 public static final boolean BuildForSolaris = false;
038 public static final boolean BuildForOsx = !BuildForAix && !BuildForLinux && !BuildForSolaris;
039
040 public static final boolean BuildForGnuClasspath = true;
041 public static final boolean BuildForHarmony = false;
042
043 public static final boolean LittleEndian = BuildForIA32;
044
045 /* ABI selection. Exactly one of these variables will be true in each build. */
046 public static final boolean BuildForMachOABI = BuildForOsx;
047 public static final boolean BuildForPowerOpenABI = BuildForAix || (BuildForLinux && BuildForPowerPC && BuildFor64Addr);
048 public static final boolean BuildForSVR4ABI = !(BuildForPowerOpenABI || BuildForMachOABI);
049
050 /** Are we using Classpath's portable native sync feature? */
051 public static final boolean PortableNativeSync = true;
052
053 /**
054 * Can a dereference of a null pointer result in an access
055 * to 'low' memory addresses that must be explicitly guarded because the
056 * target OS doesn't allow us to read protect low memory?
057 */
058 public static final boolean ExplicitlyGuardLowMemory = BuildForAix;
059
060 /** Assertion checking.
061 <dl>
062 <dt>false</dt> <dd> no assertion checking at runtime</dd>
063 <dt>true </dt> <dd> execute assertion checks at runtime</dd>
064 <dl>
065
066 Note: code your assertion checks as
067 <pre>
068 if (VM.VerifyAssertions)
069 VM._assert(xxx);
070 </pre>
071 */
072 public static final boolean VerifyAssertions = true;
073 public static final boolean ExtremeAssertions = false;
074
075 /**
076 * If set, verify that Uninterruptible methods actually cannot be
077 * interrupted.
078 */
079 public static final boolean VerifyUnint = VerifyAssertions;
080
081 // If set, ignore the supression pragma and print all warning messages.
082 public static final boolean ParanoidVerifyUnint = false;
083
084 // Is this an adaptive build?
085 public static final boolean BuildForAdaptiveSystem = true;
086
087 // Is this an opt compiler build?
088 public static final boolean BuildForOptCompiler = true;
089
090 // build with Base boot image compiler
091 public static final boolean BuildWithBaseBootImageCompiler = false;
092
093 // Interface method dispatch strategy.
094 // We either use IMT's (Alpern, Cocchi, Fink, Grove, and Lieber OOPSLA 2001)
095 // or searched ITables. See also the research archive for the variants on these
096 // two schemes that were evaluated in the OOPSLA 2001 paper.
097 public static final boolean BuildForIMTInterfaceInvocation = true;
098 public static final boolean BuildForITableInterfaceInvocation = !BuildForIMTInterfaceInvocation;
099
100 /** Epilogue yieldpoints increase sampling accuracy for adaptive
101 recompilation. In particular, they are key for large, leaf, loop-free
102 methods. */
103 public static final boolean UseEpilogueYieldPoints = BuildForAdaptiveSystem;
104
105 /* NUmber of allocations between gc's during stress testing. Set to 0 to disable. */
106 public static final int StressGCAllocationInterval = 0;
107 public static final boolean ForceFrequentGC = 0 != StressGCAllocationInterval;
108
109 public static final boolean BuildWithGCTrace = false;
110 public static final boolean BuildWithGCSpy = false;
111
112 public static final String RVM_VERSION_STRING = "Jikes RVM 3.1.0+svn (r15867M)";
113 public static final String RVM_CONFIGURATION = "development";
114
115 /**
116 * Alignment checking (for IA32 only; for debugging purposes only).
117 * To enable, build with -Dconfig.alignment-checking=true.
118 * Important: You'll also need to build without SSE (-Dtarget.arch.sse2=none) and
119 * run Jikes with only one processor (-X:processors=1).
120 */
121 public static final boolean AlignmentChecking = false;
122 }