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 */
013package org.jikesrvm;
014
015import org.jikesrvm.runtime.CommandLineArgs;
016
017/**
018 * Flags that specify the configuration of our virtual machine.
019 *
020 * Note: Changing any <code>final</code> flags requires that the whole vm
021 *       be recompiled and rebuilt after their values are changed.
022 */
023public abstract class Configuration {
024
025  public static final boolean BuildForPowerPC = false;
026  public static final boolean BuildForIA32 = !BuildForPowerPC;
027  public static final boolean BuildForSSE2 = BuildForIA32 && true;
028  public static final boolean BuildForSSE2Full = BuildForSSE2 && true;
029  public static final boolean BuildForHwFsqrt = true && (false || VM.BuildForSSE2);
030
031  public static final boolean BuildFor32Addr = true;
032  public static final boolean BuildFor64Addr = !BuildFor32Addr;
033
034  public static final boolean BuildForLinux = true;
035  public static final boolean BuildForSolaris = false; 
036  public static final boolean BuildForOsx = false;
037
038  public static final boolean BuildForGnuClasspath = true;
039  public static final boolean BuildForHarmony = false;
040
041  public static final boolean LittleEndian = true;
042
043  /* ABI selection for PowerPC.  Exactly one of these variables will be true in each build. */
044  public static final boolean BuildForPower64ELF_ABI = BuildForLinux && BuildForPowerPC && BuildFor64Addr;
045  public static final boolean BuildForSVR4ABI = !BuildForPower64ELF_ABI;
046
047  /** Are we using Classpath's portable native sync feature? */
048  public static final boolean PortableNativeSync = true;
049
050 /** Assertion checking.
051      <dl>
052      <dt>false</dt>  <dd> no assertion checking at runtime</dd>
053      <dt>true  </dt> <dd> execute assertion checks at runtime</dd>
054      </dl>
055
056      Note: code your assertion checks as
057      <pre>
058        if (VM.VerifyAssertions)
059          VM._assert(xxx);
060      </pre>
061  */
062  public static final boolean VerifyAssertions = true;
063  public static final boolean ExtremeAssertions = false;
064
065  /**
066   * If set, verify that Uninterruptible methods actually cannot be
067   * interrupted.
068   */
069  public static final boolean VerifyUnint = VerifyAssertions;
070
071  /** If set, ignore the supression pragma and print all warning messages. */
072  public static final boolean ParanoidVerifyUnint = false;
073
074  /** Is this an adaptive build? */
075  public static final boolean BuildForAdaptiveSystem = true;
076
077  /** Is this an opt compiler build? */
078  public static final boolean BuildForOptCompiler = true;
079
080  /** build with Base boot image compiler? */
081  public static final boolean BuildWithBaseBootImageCompiler = false;
082
083  /** allow bootimage writer to build oversized images? */
084  public static final boolean AllowOversizedImages = false;
085
086  // Interface method dispatch strategy.
087  // We either use IMT's (Alpern, Cocchi, Fink, Grove, and Lieber OOPSLA 2001)
088  // or searched ITables. See also the research archive for the variants on these
089  // two schemes that were evaluated in the OOPSLA 2001 paper.
090  public static final boolean BuildForIMTInterfaceInvocation = true;
091  public static final boolean BuildForITableInterfaceInvocation = !BuildForIMTInterfaceInvocation;
092
093  /** Epilogue yieldpoints increase sampling accuracy for adaptive
094      recompilation.  In particular, they are key for large, leaf, loop-free
095      methods.  */
096  public static final boolean UseEpilogueYieldPoints = BuildForAdaptiveSystem;
097
098  /** NUmber of allocations between gc's during stress testing. Set to 0 to disable. */
099  public static final int StressGCAllocationInterval = 0;
100  public static final boolean ForceFrequentGC = 0 != StressGCAllocationInterval;
101
102  public static final boolean BuildWithGCTrace = false;
103  public static final boolean BuildWithGCSpy = false;
104  
105  public static final String RVM_VERSION_STRING = "Jikes RVM 3.1.3+git (rc88b3e32993ff6e735fea23c8b83f87dc23b9150)";
106  public static final String RVM_CONFIGURATION = "development";
107
108  /**
109   * Alignment checking (for IA32 only; for debugging purposes only).
110   * To enable, build with -Dconfig.alignment-checking=true.
111   * Important: You'll also need to build without SSE (-Dtarget.arch.sse2=none) and
112   * run Jikes with only one processor.
113   */
114  public static final boolean AlignmentChecking = false;
115}