hotspot/.mx.jvmci/mx_jvmci.py
author thartmann
Thu, 04 Aug 2016 08:58:22 +0200
changeset 40364 5bf8fa4fddfd
parent 40046 01e973266ee4
child 43939 39f5b59549de
permissions -rw-r--r--
8162881: Effect of -XX:CICompilerCount depends on ordering of other flags Summary: Value of CICompilerCount should be range checked after ergo. Don't create C2 compiler threads with TieredStopAtLevel=1. Reviewed-by: kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     1
#
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     2
# ----------------------------------------------------------------------------------------------------
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     3
#
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     4
# Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     5
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     6
#
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     7
# This code is free software; you can redistribute it and/or modify it
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     8
# under the terms of the GNU General Public License version 2 only, as
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
     9
# published by the Free Software Foundation.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    10
#
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    11
# This code is distributed in the hope that it will be useful, but WITHOUT
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    13
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    14
# version 2 for more details (a copy is included in the LICENSE file that
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    15
# accompanied this code).
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    16
#
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    17
# You should have received a copy of the GNU General Public License version
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    18
# 2 along with this work; if not, write to the Free Software Foundation,
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    19
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    20
#
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    21
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    22
# or visit www.oracle.com if you need additional information or have any
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    23
# questions.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    24
#
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    25
# ----------------------------------------------------------------------------------------------------
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    26
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    27
import os, shutil, zipfile, re, time, sys, datetime, platform
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    28
from os.path import join, exists, dirname, isdir
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    29
from argparse import ArgumentParser, REMAINDER
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    30
import StringIO
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    31
import xml.dom.minidom
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    32
import subprocess
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    33
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    34
import mx
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    35
import mx_gate
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    36
import mx_unittest
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    37
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    38
from mx_gate import Task
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    39
from mx_unittest import unittest
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    40
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    41
_suite = mx.suite('jvmci')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    42
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
    43
JVMCI_VERSION = 9
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
    44
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    45
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    46
Top level directory of the JDK source workspace.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    47
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    48
_jdkSourceRoot = dirname(_suite.dir)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    49
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    50
_JVMCI_JDK_TAG = 'jvmci'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    51
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    52
_minVersion = mx.VersionSpec('1.9')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    53
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    54
# max version (first _unsupported_ version)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    55
_untilVersion = None
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    56
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    57
_jvmciModes = {
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    58
    'hosted' : ['-XX:+UnlockExperimentalVMOptions', '-XX:+EnableJVMCI'],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    59
    'jit' : ['-XX:+UnlockExperimentalVMOptions', '-XX:+EnableJVMCI', '-XX:+UseJVMCICompiler'],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    60
    'disabled' : []
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    61
}
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    62
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    63
# TODO: can optimized be built without overriding release build?
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    64
_jdkDebugLevels = ['release', 'fastdebug', 'slowdebug']
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    65
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    66
# TODO: add client once/if it can be built on 64-bit platforms
40046
01e973266ee4 8159888: [JVMCI] the client VM build is broken when INCLUDE_JVMCI is defined
dnsimon
parents: 39443
diff changeset
    67
_jdkJvmVariants = ['server', 'client']
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    68
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    69
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    70
Translation table from mx_jvmci:8 --vmbuild values to mx_jvmci:9 --jdk-debug-level values.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    71
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    72
_legacyVmbuilds = {
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    73
    'product' : 'release',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    74
    'debug' : 'slowdebug'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    75
}
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    76
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    77
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    78
Translates a mx_jvmci:8 --vmbuild value to a mx_jvmci:9 --jdk-debug-level value.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    79
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    80
def _translateLegacyDebugLevel(debugLevel):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    81
    return _legacyVmbuilds.get(debugLevel, debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    82
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    83
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    84
Translation table from mx_jvmci:8 --vm values to mx_jvmci:9 (--jdk-jvm-variant, --jvmci-mode) tuples.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    85
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    86
_legacyVms = {
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    87
    'jvmci' : ('server', 'jit')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    88
}
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    89
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    90
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    91
A VM configuration composed of a JDK debug level, JVM variant and a JVMCI mode.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    92
This is also a context manager that can be used with the 'with' statement to set/change
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    93
a VM configuration within a dynamic scope. For example:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    94
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    95
    with ConfiguredJDK(debugLevel='fastdebug'):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    96
        dacapo(['pmd'])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    97
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    98
class VM:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
    99
    def __init__(self, jvmVariant=None, debugLevel=None, jvmciMode=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   100
        self.update(jvmVariant, debugLevel, jvmciMode)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   101
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   102
    def update(self, jvmVariant=None, debugLevel=None, jvmciMode=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   103
        if jvmVariant in _legacyVms:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   104
            # Backwards compatibility for mx_jvmci:8 API
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   105
            jvmVariant, newJvmciMode = _legacyVms[jvmVariant]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   106
            if jvmciMode is not None and jvmciMode != newJvmciMode:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   107
                mx.abort('JVM variant "' + jvmVariant + '" implies JVMCI mode "' + newJvmciMode +
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   108
                         '" which conflicts with explicitly specified JVMCI mode of "' + jvmciMode + '"')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   109
            jvmciMode = newJvmciMode
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   110
        debugLevel = _translateLegacyDebugLevel(debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   111
        assert jvmVariant is None or jvmVariant in _jdkJvmVariants, jvmVariant
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   112
        assert debugLevel is None or debugLevel in _jdkDebugLevels, debugLevel
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   113
        assert jvmciMode is None or jvmciMode in _jvmciModes, jvmciMode
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   114
        self.jvmVariant = jvmVariant or _vm.jvmVariant
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   115
        self.debugLevel = debugLevel or _vm.debugLevel
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   116
        self.jvmciMode = jvmciMode or _vm.jvmciMode
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   117
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   118
    def __enter__(self):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   119
        global _vm
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   120
        self.previousVm = _vm
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   121
        _vm = self
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   122
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   123
    def __exit__(self, exc_type, exc_value, traceback):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   124
        global _vm
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   125
        _vm = self.previousVm
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   126
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   127
_vm = VM(jvmVariant=_jdkJvmVariants[0], debugLevel=_jdkDebugLevels[0], jvmciMode='hosted')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   128
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   129
def get_vm():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   130
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   131
    Gets the configured VM.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   132
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   133
    return _vm
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   134
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   135
def relativeVmLibDirInJdk():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   136
    mxos = mx.get_os()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   137
    if mxos == 'darwin':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   138
        return join('lib')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   139
    if mxos == 'windows' or mxos == 'cygwin':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   140
        return join('bin')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   141
    return join('lib', mx.get_arch())
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   142
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   143
def isJVMCIEnabled(vm):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   144
    assert vm in _jdkJvmVariants
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   145
    return True
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   146
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   147
def _makehelp():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   148
    return subprocess.check_output([mx.gmake_cmd(), 'help'], cwd=_jdkSourceRoot)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   149
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   150
def _runmake(args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   151
    """run the JDK make process
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   152
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   153
To build hotspot and import it into the JDK: "mx make hotspot import-hotspot"
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   154
{0}"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   155
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   156
    jdkBuildDir = _get_jdk_build_dir()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   157
    if not exists(jdkBuildDir):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   158
        # JDK9 must be bootstrapped with a JDK8
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   159
        compliance = mx.JavaCompliance('8')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   160
        jdk8 = mx.get_jdk(compliance.exactMatch, versionDescription=compliance.value)
38663
03fe0752bb2f 8155023: jdk.vm.ci needs to securely export services
dnsimon
parents: 35598
diff changeset
   161
        cmd = ['sh', 'configure', '--with-debug-level=' + _vm.debugLevel, '--with-native-debug-symbols=external', '--disable-precompiled-headers',
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   162
               '--with-jvm-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk8.home]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   163
        mx.run(cmd, cwd=_jdkSourceRoot)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   164
    cmd = [mx.gmake_cmd(), 'CONF=' + _vm.debugLevel]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   165
    if mx.get_opts().verbose:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   166
        cmd.append('LOG=debug')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   167
    cmd.extend(args)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   168
    if mx.get_opts().use_jdk_image and 'images' not in args:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   169
        cmd.append('images')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   170
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   171
    if not mx.get_opts().verbose:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   172
        mx.log('--------------- make execution ----------------------')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   173
        mx.log('Working directory: ' + _jdkSourceRoot)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   174
        mx.log('Command line: ' + ' '.join(cmd))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   175
        mx.log('-----------------------------------------------------')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   176
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   177
    mx.run(cmd, cwd=_jdkSourceRoot)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   178
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   179
    if 'images' in cmd:
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   180
        jdkImageDir = join(jdkBuildDir, 'images', 'jdk')
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   181
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   182
        # The OpenJDK build creates an empty cacerts file so copy one from
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   183
        # the default JDK (which is assumed to be an OracleJDK)
38695
08b834856583 8156835: [JVMCI] clean up and minimize JVMCI
dnsimon
parents: 38663
diff changeset
   184
        srcCerts = join(mx.get_jdk(tag='default').home, 'lib', 'security', 'cacerts')
08b834856583 8156835: [JVMCI] clean up and minimize JVMCI
dnsimon
parents: 38663
diff changeset
   185
        if not exists(srcCerts):
08b834856583 8156835: [JVMCI] clean up and minimize JVMCI
dnsimon
parents: 38663
diff changeset
   186
            # Might be building with JDK8 which has cacerts under jre/
08b834856583 8156835: [JVMCI] clean up and minimize JVMCI
dnsimon
parents: 38663
diff changeset
   187
            srcCerts = join(mx.get_jdk(tag='default').home, 'jre', 'lib', 'security', 'cacerts')
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   188
        dstCerts = join(jdkImageDir, 'lib', 'security', 'cacerts')
39443
ca6dfb34e46c 8159613: [Findbugs] various warnings reported for JVMCI sources
dnsimon
parents: 38695
diff changeset
   189
        if srcCerts != dstCerts:
ca6dfb34e46c 8159613: [Findbugs] various warnings reported for JVMCI sources
dnsimon
parents: 38695
diff changeset
   190
            shutil.copyfile(srcCerts, dstCerts)
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   191
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   192
        _create_jdk_bundle(jdkBuildDir, _vm.debugLevel, jdkImageDir)
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   193
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   194
def _get_jdk_bundle_arches():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   195
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   196
    Gets a list of names that will be the part of a JDK bundle's file name denoting the architecture.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   197
    The first element in the list is the canonical name. Symlinks should be created for the
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   198
    remaining names.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   199
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   200
    cpu = mx.get_arch()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   201
    if cpu == 'amd64':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   202
        return ['x64', 'x86_64', 'amd64']
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   203
    elif cpu == 'sparcv9':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   204
        return ['sparcv9']
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   205
    mx.abort('Unsupported JDK bundle arch: ' + cpu)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   206
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   207
def _create_jdk_bundle(jdkBuildDir, debugLevel, jdkImageDir):
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   208
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   209
    Creates a tar.gz JDK archive, an accompanying tar.gz.sha1 file with its
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   210
    SHA1 signature plus symlinks to the archive for non-canonical architecture names.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   211
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   212
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   213
    arches = _get_jdk_bundle_arches()
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   214
    jdkTgzPath = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}-{}.tar.gz'.format(debugLevel, _get_openjdk_os(), arches[0]))
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   215
    with mx.Archiver(jdkTgzPath, kind='tgz') as arc:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   216
        mx.log('Creating ' + jdkTgzPath)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   217
        for root, _, filenames in os.walk(jdkImageDir):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   218
            for name in filenames:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   219
                f = join(root, name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   220
                arcname = 'jdk1.9.0/' + os.path.relpath(f, jdkImageDir)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   221
                arc.zf.add(name=f, arcname=arcname, recursive=False)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   222
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   223
    with open(jdkTgzPath + '.sha1', 'w') as fp:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   224
        mx.log('Creating ' + jdkTgzPath + '.sha1')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   225
        fp.write(mx.sha1OfFile(jdkTgzPath))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   226
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   227
    def _create_link(source, link_name):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   228
        if exists(link_name):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   229
            os.remove(link_name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   230
        mx.log('Creating ' + link_name + ' -> ' + source)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   231
        os.symlink(source, link_name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   232
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   233
    for arch in arches[1:]:
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   234
        link_name = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}-{}.tar.gz'.format(debugLevel, _get_openjdk_os(), arch))
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   235
        jdkTgzName = os.path.basename(jdkTgzPath)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   236
        _create_link(jdkTgzName, link_name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   237
        _create_link(jdkTgzName + '.sha1', link_name + '.sha1')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   238
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   239
def _runmultimake(args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   240
    """run the JDK make process for one or more configurations"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   241
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   242
    jvmVariantsDefault = ','.join(_jdkJvmVariants)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   243
    debugLevelsDefault = ','.join(_jdkDebugLevels)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   244
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   245
    parser = ArgumentParser(prog='mx multimake')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   246
    parser.add_argument('--jdk-jvm-variants', '--vms', help='a comma separated list of VMs to build (default: ' + jvmVariantsDefault + ')', metavar='<args>', default=jvmVariantsDefault)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   247
    parser.add_argument('--jdk-debug-levels', '--builds', help='a comma separated list of JDK debug levels (default: ' + debugLevelsDefault + ')', metavar='<args>', default=debugLevelsDefault)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   248
    parser.add_argument('-n', '--no-check', action='store_true', help='omit running "java -version" after each build')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   249
    select = parser.add_mutually_exclusive_group()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   250
    select.add_argument('-c', '--console', action='store_true', help='send build output to console instead of log files')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   251
    select.add_argument('-d', '--output-dir', help='directory for log files instead of current working directory', default=os.getcwd(), metavar='<dir>')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   252
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   253
    args = parser.parse_args(args)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   254
    jvmVariants = args.jdk_jvm_variants.split(',')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   255
    debugLevels = [_translateLegacyDebugLevel(dl) for dl in args.jdk_debug_levels.split(',')]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   256
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   257
    allStart = time.time()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   258
    for jvmVariant in jvmVariants:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   259
        for debugLevel in debugLevels:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   260
            if not args.console:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   261
                logFile = join(mx.ensure_dir_exists(args.output_dir), jvmVariant + '-' + debugLevel + '.log')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   262
                log = open(logFile, 'wb')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   263
                start = time.time()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   264
                mx.log('BEGIN: ' + jvmVariant + '-' + debugLevel + '\t(see: ' + logFile + ')')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   265
                verbose = ['-v'] if mx.get_opts().verbose else []
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   266
                # Run as subprocess so that output can be directed to a file
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   267
                cmd = [sys.executable, '-u', mx.__file__] + verbose + ['--jdk-jvm-variant=' + jvmVariant, '--jdk-debug-level=' + debugLevel, 'make']
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   268
                mx.logv("executing command: " + str(cmd))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   269
                subprocess.check_call(cmd, cwd=_suite.dir, stdout=log, stderr=subprocess.STDOUT)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   270
                duration = datetime.timedelta(seconds=time.time() - start)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   271
                mx.log('END:   ' + jvmVariant + '-' + debugLevel + '\t[' + str(duration) + ']')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   272
            else:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   273
                with VM(jvmVariant=jvmVariant, debugLevel=debugLevel):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   274
                    _runmake([])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   275
            if not args.no_check:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   276
                with VM(jvmciMode='jit'):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   277
                    run_vm(['-XX:-BootstrapJVMCI', '-version'])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   278
    allDuration = datetime.timedelta(seconds=time.time() - allStart)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   279
    mx.log('TOTAL TIME:   ' + '[' + str(allDuration) + ']')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   280
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   281
class HotSpotProject(mx.NativeProject):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   282
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   283
    Defines a NativeProject representing the HotSpot binaries built via make.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   284
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   285
    def __init__(self, suite, name, deps, workingSets, **args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   286
        assert name == 'hotspot'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   287
        mx.NativeProject.__init__(self, suite, name, "", [], deps, workingSets, None, None, join(suite.mxDir, name))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   288
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   289
    def eclipse_config_up_to_date(self, configZip):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   290
        # Assume that any change to this module might imply changes to the generated IDE files
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   291
        if configZip.isOlderThan(__file__):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   292
            return False
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   293
        for _, source in self._get_eclipse_settings_sources().iteritems():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   294
            if configZip.isOlderThan(source):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   295
                return False
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   296
        return True
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   297
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   298
    def _get_eclipse_settings_sources(self):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   299
        """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   300
        Gets a dictionary from the name of an Eclipse settings file to
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   301
        the file providing its generated content.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   302
        """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   303
        if not hasattr(self, '_eclipse_settings'):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   304
            esdict = {}
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   305
            templateSettingsDir = join(self.dir, 'templates', 'eclipse', 'settings')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   306
            if exists(templateSettingsDir):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   307
                for name in os.listdir(templateSettingsDir):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   308
                    source = join(templateSettingsDir, name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   309
                    esdict[name] = source
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   310
            self._eclipse_settings = esdict
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   311
        return self._eclipse_settings
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   312
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   313
    def _eclipseinit(self, files=None, libFiles=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   314
        """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   315
        Generates an Eclipse project for each HotSpot build configuration.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   316
        """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   317
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   318
        roots = [
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   319
            'ASSEMBLY_EXCEPTION',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   320
            'LICENSE',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   321
            'README',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   322
            'THIRD_PARTY_README',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   323
            'agent',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   324
            'make',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   325
            'src',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   326
            'test'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   327
        ]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   328
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   329
        for jvmVariant in _jdkJvmVariants:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   330
            for debugLevel in _jdkDebugLevels:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   331
                name = jvmVariant + '-' + debugLevel
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   332
                eclProjectDir = join(self.dir, 'eclipse', name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   333
                mx.ensure_dir_exists(eclProjectDir)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   334
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   335
                out = mx.XMLDoc()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   336
                out.open('projectDescription')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   337
                out.element('name', data='hotspot:' + name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   338
                out.element('comment', data='')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   339
                out.element('projects', data='')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   340
                out.open('buildSpec')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   341
                out.open('buildCommand')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   342
                out.element('name', data='org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   343
                out.element('triggers', data='full,incremental')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   344
                out.element('arguments', data='')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   345
                out.close('buildCommand')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   346
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   347
                out.close('buildSpec')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   348
                out.open('natures')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   349
                out.element('nature', data='org.eclipse.cdt.core.cnature')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   350
                out.element('nature', data='org.eclipse.cdt.core.ccnature')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   351
                out.element('nature', data='org.eclipse.cdt.managedbuilder.core.managedBuildNature')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   352
                out.element('nature', data='org.eclipse.cdt.managedbuilder.core.ScannerConfigNature')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   353
                out.close('natures')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   354
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   355
                if roots:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   356
                    out.open('linkedResources')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   357
                    for r in roots:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   358
                        f = join(_suite.dir, r)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   359
                        out.open('link')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   360
                        out.element('name', data=r)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   361
                        out.element('type', data='2' if isdir(f) else '1')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   362
                        out.element('locationURI', data=mx.get_eclipse_project_rel_locationURI(f, eclProjectDir))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   363
                        out.close('link')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   364
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   365
                    out.open('link')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   366
                    out.element('name', data='generated')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   367
                    out.element('type', data='2')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   368
                    generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'generated')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   369
                    out.element('locationURI', data=mx.get_eclipse_project_rel_locationURI(generated, eclProjectDir))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   370
                    out.close('link')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   371
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   372
                    out.close('linkedResources')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   373
                out.close('projectDescription')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   374
                projectFile = join(eclProjectDir, '.project')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   375
                mx.update_file(projectFile, out.xml(indent='\t', newl='\n'))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   376
                if files:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   377
                    files.append(projectFile)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   378
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   379
                cprojectTemplate = join(self.dir, 'templates', 'eclipse', 'cproject')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   380
                cprojectFile = join(eclProjectDir, '.cproject')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   381
                with open(cprojectTemplate) as f:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   382
                    content = f.read()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   383
                mx.update_file(cprojectFile, content)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   384
                if files:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   385
                    files.append(cprojectFile)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   386
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   387
                settingsDir = join(eclProjectDir, ".settings")
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   388
                mx.ensure_dir_exists(settingsDir)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   389
                for name, source in self._get_eclipse_settings_sources().iteritems():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   390
                    out = StringIO.StringIO()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   391
                    print >> out, '# GENERATED -- DO NOT EDIT'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   392
                    print >> out, '# Source:', source
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   393
                    with open(source) as f:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   394
                        print >> out, f.read()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   395
                    content = out.getvalue()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   396
                    mx.update_file(join(settingsDir, name), content)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   397
                    if files:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   398
                        files.append(join(settingsDir, name))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   399
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   400
    def getBuildTask(self, args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   401
        return JDKBuildTask(self, args, _vm.debugLevel, _vm.jvmVariant)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   402
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   403
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   404
class JDKBuildTask(mx.NativeBuildTask):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   405
    def __init__(self, project, args, debugLevel, jvmVariant):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   406
        mx.NativeBuildTask.__init__(self, args, project)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   407
        self.jvmVariant = jvmVariant
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   408
        self.debugLevel = debugLevel
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   409
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   410
    def __str__(self):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   411
        return 'Building JDK[{}, {}]'.format(self.debugLevel, self.jvmVariant)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   412
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   413
    def build(self):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   414
        if mx.get_opts().use_jdk_image:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   415
            _runmake(['images'])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   416
        else:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   417
            _runmake([])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   418
        self._newestOutput = None
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   419
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   420
    def clean(self, forBuild=False):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   421
        if forBuild:  # Let make handle incremental builds
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   422
            return
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   423
        if exists(_get_jdk_build_dir(self.debugLevel)):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   424
            _runmake(['clean'])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   425
        self._newestOutput = None
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   426
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   427
# Backwards compatibility for mx_jvmci:8 API
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   428
def buildvms(args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   429
    _runmultimake(args)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   430
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   431
def run_vm(args, vm=None, nonZeroIsFatal=True, out=None, err=None, cwd=None, timeout=None, debugLevel=None, vmbuild=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   432
    """run a Java program by executing the java executable in a JVMCI JDK"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   433
    jdkTag = mx.get_jdk_option().tag
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   434
    if jdkTag and jdkTag != _JVMCI_JDK_TAG:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   435
        mx.abort('The "--jdk" option must have the tag "' + _JVMCI_JDK_TAG + '" when running a command requiring a JVMCI VM')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   436
    jdk = get_jvmci_jdk(debugLevel=debugLevel or _translateLegacyDebugLevel(vmbuild))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   437
    return jdk.run_java(args, nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd, timeout=timeout)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   438
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   439
def _unittest_vm_launcher(vmArgs, mainClass, mainClassArgs):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   440
    run_vm(vmArgs + [mainClass] + mainClassArgs)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   441
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   442
mx_unittest.set_vm_launcher('JVMCI VM launcher', _unittest_vm_launcher)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   443
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   444
def _jvmci_gate_runner(args, tasks):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   445
    # Build release server VM now so we can run the unit tests
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   446
    with Task('BuildHotSpotJVMCIHosted: release', tasks) as t:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   447
        if t: _runmultimake(['--jdk-jvm-variants', 'server', '--jdk-debug-levels', 'release'])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   448
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   449
    # Run unit tests in hosted mode
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   450
    with VM(jvmVariant='server', debugLevel='release', jvmciMode='hosted'):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   451
        with Task('JVMCI UnitTests: hosted-release', tasks) as t:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   452
            if t: unittest(['--suite', 'jvmci', '--enable-timing', '--verbose', '--fail-fast'])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   453
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   454
    # Build the other VM flavors
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   455
    with Task('BuildHotSpotJVMCIOthers: fastdebug', tasks) as t:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   456
        if t: _runmultimake(['--jdk-jvm-variants', 'server', '--jdk-debug-levels', 'fastdebug'])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   457
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   458
    with Task('CleanAndBuildIdealGraphVisualizer', tasks, disableJacoco=True) as t:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   459
        if t and platform.processor() != 'sparc':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   460
            buildxml = mx._cygpathU2W(join(_suite.dir, 'src', 'share', 'tools', 'IdealGraphVisualizer', 'build.xml'))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   461
            mx.run(['ant', '-f', buildxml, '-q', 'clean', 'build'], env=_igvBuildEnv())
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   462
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   463
mx_gate.add_gate_runner(_suite, _jvmci_gate_runner)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   464
mx_gate.add_gate_argument('-g', '--only-build-jvmci', action='store_false', dest='buildNonJVMCI', help='only build the JVMCI VM')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   465
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   466
def _igvJdk():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   467
    v8u20 = mx.VersionSpec("1.8.0_20")
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   468
    v8u40 = mx.VersionSpec("1.8.0_40")
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   469
    v8 = mx.VersionSpec("1.8")
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   470
    def _igvJdkVersionCheck(version):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   471
        return version >= v8 and (version < v8u20 or version >= v8u40)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   472
    return mx.get_jdk(_igvJdkVersionCheck, versionDescription='>= 1.8 and < 1.8.0u20 or >= 1.8.0u40', purpose="building & running IGV").home
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   473
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   474
def _igvBuildEnv():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   475
        # When the http_proxy environment variable is set, convert it to the proxy settings that ant needs
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   476
    env = dict(os.environ)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   477
    proxy = os.environ.get('http_proxy')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   478
    if not (proxy is None) and len(proxy) > 0:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   479
        if '://' in proxy:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   480
            # Remove the http:// prefix (or any other protocol prefix)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   481
            proxy = proxy.split('://', 1)[1]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   482
        # Separate proxy server name and port number
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   483
        proxyName, proxyPort = proxy.split(':', 1)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   484
        proxyEnv = '-DproxyHost="' + proxyName + '" -DproxyPort=' + proxyPort
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   485
        env['ANT_OPTS'] = proxyEnv
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   486
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   487
    env['JAVA_HOME'] = _igvJdk()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   488
    return env
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   489
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   490
def igv(args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   491
    """run the Ideal Graph Visualizer"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   492
    logFile = '.ideal_graph_visualizer.log'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   493
    with open(join(_suite.dir, logFile), 'w') as fp:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   494
        mx.logv('[Ideal Graph Visualizer log is in ' + fp.name + ']')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   495
        nbplatform = join(_suite.dir, 'src', 'share', 'tools', 'IdealGraphVisualizer', 'nbplatform')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   496
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   497
        # Remove NetBeans platform if it is earlier than the current supported version
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   498
        if exists(nbplatform):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   499
            updateTrackingFile = join(nbplatform, 'platform', 'update_tracking', 'org-netbeans-core.xml')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   500
            if not exists(updateTrackingFile):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   501
                mx.log('Could not find \'' + updateTrackingFile + '\', removing NetBeans platform')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   502
                shutil.rmtree(nbplatform)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   503
            else:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   504
                dom = xml.dom.minidom.parse(updateTrackingFile)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   505
                currentVersion = mx.VersionSpec(dom.getElementsByTagName('module_version')[0].getAttribute('specification_version'))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   506
                supportedVersion = mx.VersionSpec('3.43.1')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   507
                if currentVersion < supportedVersion:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   508
                    mx.log('Replacing NetBeans platform version ' + str(currentVersion) + ' with version ' + str(supportedVersion))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   509
                    shutil.rmtree(nbplatform)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   510
                elif supportedVersion < currentVersion:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   511
                    mx.log('Supported NetBeans version in igv command should be updated to ' + str(currentVersion))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   512
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   513
        if not exists(nbplatform):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   514
            mx.logv('[This execution may take a while as the NetBeans platform needs to be downloaded]')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   515
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   516
        env = _igvBuildEnv()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   517
        # make the jar for Batik 1.7 available.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   518
        env['IGV_BATIK_JAR'] = mx.library('BATIK').get_path(True)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   519
        if mx.run(['ant', '-f', mx._cygpathU2W(join(_suite.dir, 'src', 'share', 'tools', 'IdealGraphVisualizer', 'build.xml')), '-l', mx._cygpathU2W(fp.name), 'run'], env=env, nonZeroIsFatal=False):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   520
            mx.abort("IGV ant build & launch failed. Check '" + logFile + "'. You can also try to delete 'src/share/tools/IdealGraphVisualizer/nbplatform'.")
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   521
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   522
def c1visualizer(args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   523
    """run the Cl Compiler Visualizer"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   524
    libpath = join(_suite.dir, 'lib')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   525
    if mx.get_os() == 'windows':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   526
        executable = join(libpath, 'c1visualizer', 'bin', 'c1visualizer.exe')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   527
    else:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   528
        executable = join(libpath, 'c1visualizer', 'bin', 'c1visualizer')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   529
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   530
    # Check whether the current C1Visualizer installation is the up-to-date
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   531
    if exists(executable) and not exists(mx.library('C1VISUALIZER_DIST').get_path(resolve=False)):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   532
        mx.log('Updating C1Visualizer')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   533
        shutil.rmtree(join(libpath, 'c1visualizer'))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   534
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   535
    archive = mx.library('C1VISUALIZER_DIST').get_path(resolve=True)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   536
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   537
    if not exists(executable):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   538
        zf = zipfile.ZipFile(archive, 'r')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   539
        zf.extractall(libpath)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   540
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   541
    if not exists(executable):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   542
        mx.abort('C1Visualizer binary does not exist: ' + executable)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   543
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   544
    if mx.get_os() != 'windows':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   545
        # Make sure that execution is allowed. The zip file does not always specfiy that correctly
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   546
        os.chmod(executable, 0777)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   547
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   548
    mx.run([executable])
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   549
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   550
def hsdis(args, copyToDir=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   551
    """download the hsdis library
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   552
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   553
    This is needed to support HotSpot's assembly dumping features.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   554
    By default it downloads the Intel syntax version, use the 'att' argument to install AT&T syntax."""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   555
    flavor = 'intel'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   556
    if 'att' in args:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   557
        flavor = 'att'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   558
    if mx.get_arch() == "sparcv9":
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   559
        flavor = "sparcv9"
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   560
    lib = mx.add_lib_suffix('hsdis-' + mx.get_arch())
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   561
    path = join(_suite.dir, 'lib', lib)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   562
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   563
    sha1s = {
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   564
        'att/hsdis-amd64.dll' : 'bcbd535a9568b5075ab41e96205e26a2bac64f72',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   565
        'att/hsdis-amd64.so' : '58919ba085d4ef7a513f25bae75e7e54ee73c049',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   566
        'intel/hsdis-amd64.dll' : '6a388372cdd5fe905c1a26ced614334e405d1f30',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   567
        'intel/hsdis-amd64.so' : '844ed9ffed64fe9599638f29a8450c50140e3192',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   568
        'intel/hsdis-amd64.dylib' : 'fdb13ef0d7d23d93dacaae9c98837bea0d4fc5a2',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   569
        'sparcv9/hsdis-sparcv9.so': '970640a9af0bd63641f9063c11275b371a59ee60',
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   570
    }
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   571
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   572
    flavoredLib = flavor + "/" + lib
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   573
    if flavoredLib not in sha1s:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   574
        mx.logv("hsdis not supported on this plattform or architecture")
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   575
        return
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   576
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   577
    if not exists(path):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   578
        sha1 = sha1s[flavoredLib]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   579
        sha1path = path + '.sha1'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   580
        mx.download_file_with_sha1('hsdis', path, ['https://lafo.ssw.uni-linz.ac.at/pub/hsdis/' + flavoredLib], sha1, sha1path, True, True, sources=False)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   581
    if copyToDir is not None and exists(copyToDir):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   582
        shutil.copy(path, copyToDir)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   583
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   584
def hcfdis(args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   585
    """disassemble HexCodeFiles embedded in text files
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   586
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   587
    Run a tool over the input files to convert all embedded HexCodeFiles
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   588
    to a disassembled format."""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   589
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   590
    parser = ArgumentParser(prog='mx hcfdis')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   591
    parser.add_argument('-m', '--map', help='address to symbol map applied to disassembler output')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   592
    parser.add_argument('files', nargs=REMAINDER, metavar='files...')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   593
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   594
    args = parser.parse_args(args)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   595
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   596
    path = mx.library('HCFDIS').get_path(resolve=True)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   597
    mx.run_java(['-cp', path, 'com.oracle.max.hcfdis.HexCodeFileDis'] + args.files)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   598
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   599
    if args.map is not None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   600
        addressRE = re.compile(r'0[xX]([A-Fa-f0-9]+)')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   601
        with open(args.map) as fp:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   602
            lines = fp.read().splitlines()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   603
        symbols = dict()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   604
        for l in lines:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   605
            addressAndSymbol = l.split(' ', 1)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   606
            if len(addressAndSymbol) == 2:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   607
                address, symbol = addressAndSymbol
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   608
                if address.startswith('0x'):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   609
                    address = long(address, 16)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   610
                    symbols[address] = symbol
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   611
        for f in args.files:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   612
            with open(f) as fp:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   613
                lines = fp.read().splitlines()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   614
            updated = False
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   615
            for i in range(0, len(lines)):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   616
                l = lines[i]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   617
                for m in addressRE.finditer(l):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   618
                    sval = m.group(0)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   619
                    val = long(sval, 16)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   620
                    sym = symbols.get(val)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   621
                    if sym:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   622
                        l = l.replace(sval, sym)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   623
                        updated = True
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   624
                        lines[i] = l
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   625
            if updated:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   626
                mx.log('updating ' + f)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   627
                with open('new_' + f, "w") as fp:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   628
                    for l in lines:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   629
                        print >> fp, l
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   630
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   631
def jol(args):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   632
    """Java Object Layout"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   633
    joljar = mx.library('JOL_INTERNALS').get_path(resolve=True)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   634
    candidates = mx.findclass(args, logToConsole=False, matcher=lambda s, classname: s == classname or classname.endswith('.' + s) or classname.endswith('$' + s))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   635
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   636
    if len(candidates) > 0:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   637
        candidates = mx.select_items(sorted(candidates))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   638
    else:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   639
        # mx.findclass can be mistaken, don't give up yet
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   640
        candidates = args
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   641
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   642
    run_vm(['-javaagent:' + joljar, '-cp', os.pathsep.join([mx.classpath(), joljar]), "org.openjdk.jol.MainObjectInternals"] + candidates)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   643
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   644
def _get_openjdk_os():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   645
    # See: common/autoconf/platform.m4
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   646
    os = mx.get_os()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   647
    if 'darwin' in os:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   648
        os = 'macosx'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   649
    elif 'linux' in os:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   650
        os = 'linux'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   651
    elif 'solaris' in os:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   652
        os = 'solaris'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   653
    elif 'cygwin' in os or 'mingw' in os:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   654
        os = 'windows'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   655
    return os
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   656
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   657
def _get_openjdk_cpu():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   658
    cpu = mx.get_arch()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   659
    if cpu == 'amd64':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   660
        cpu = 'x86_64'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   661
    elif cpu == 'sparcv9':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   662
        cpu = 'sparcv9'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   663
    return cpu
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   664
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   665
def _get_openjdk_os_cpu():
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   666
    return _get_openjdk_os() + '-' + _get_openjdk_cpu()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   667
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   668
def _get_jdk_build_dir(debugLevel=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   669
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   670
    Gets the directory into which the JDK is built. This directory contains
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   671
    the exploded JDK under jdk/ and the JDK image under images/jdk/.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   672
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   673
    if debugLevel is None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   674
        debugLevel = _vm.debugLevel
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   675
    name = '{}-{}-{}-{}'.format(_get_openjdk_os_cpu(), 'normal', _vm.jvmVariant, debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   676
    return join(dirname(_suite.dir), 'build', name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   677
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   678
_jvmci_bootclasspath_prepends = []
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   679
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   680
def _get_hotspot_build_dir(jvmVariant=None, debugLevel=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   681
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   682
    Gets the directory in which a particular HotSpot configuration is built
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   683
    (e.g., <JDK_REPO_ROOT>/build/macosx-x86_64-normal-server-release/hotspot/bsd_amd64_compiler2)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   684
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   685
    if jvmVariant is None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   686
        jvmVariant = _vm.jvmVariant
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   687
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   688
    os = mx.get_os()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   689
    if os == 'darwin':
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   690
        os = 'bsd'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   691
    arch = mx.get_arch()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   692
    buildname = {'client': 'compiler1', 'server': 'compiler2'}.get(jvmVariant, jvmVariant)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   693
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   694
    name = '{}_{}_{}'.format(os, arch, buildname)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   695
    return join(_get_jdk_build_dir(debugLevel=debugLevel), 'hotspot', name)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   696
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   697
class JVMCI9JDKConfig(mx.JDKConfig):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   698
    def __init__(self, debugLevel):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   699
        self.debugLevel = debugLevel
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   700
        jdkBuildDir = _get_jdk_build_dir(debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   701
        jdkDir = join(jdkBuildDir, 'images', 'jdk') if mx.get_opts().use_jdk_image else join(jdkBuildDir, 'jdk')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   702
        mx.JDKConfig.__init__(self, jdkDir, tag=_JVMCI_JDK_TAG)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   703
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   704
    def parseVmArgs(self, args, addDefaultArgs=True):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   705
        args = mx.expand_project_in_args(args, insitu=False)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   706
        jacocoArgs = mx_gate.get_jacoco_agent_args()
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   707
        if jacocoArgs:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   708
            args = jacocoArgs + args
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   709
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   710
        args = ['-Xbootclasspath/p:' + dep.classpath_repr() for dep in _jvmci_bootclasspath_prepends] + args
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   711
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   712
        # Remove JVMCI jars from class path. They are only necessary when
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   713
        # compiling with a javac from JDK8 or earlier.
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   714
        cpIndex, cp = mx.find_classpath_arg(args)
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   715
        if cp:
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   716
            excluded = frozenset([dist.path for dist in _suite.dists])
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   717
            cp = os.pathsep.join([e for e in cp.split(os.pathsep) if e not in excluded])
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   718
            args[cpIndex] = cp
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   719
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   720
        if '-version' in args:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   721
            ignoredArgs = args[args.index('-version') + 1:]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   722
            if  len(ignoredArgs) > 0:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   723
                mx.log("Warning: The following options will be ignored by the vm because they come after the '-version' argument: " + ' '.join(ignoredArgs))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   724
        return self.processArgs(args, addDefaultArgs=addDefaultArgs)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   725
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   726
    # Overrides JDKConfig
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   727
    def run_java(self, args, vm=None, nonZeroIsFatal=True, out=None, err=None, cwd=None, timeout=None, env=None, addDefaultArgs=True):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   728
        if vm is None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   729
            vm = 'server'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   730
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   731
        args = self.parseVmArgs(args, addDefaultArgs=addDefaultArgs)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   732
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   733
        jvmciModeArgs = _jvmciModes[_vm.jvmciMode]
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   734
        cmd = [self.java] + ['-' + vm] + jvmciModeArgs + args
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   735
        return mx.run(cmd, nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   736
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   737
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   738
The dict of JVMCI JDKs indexed by debug-level names.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   739
"""
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   740
_jvmci_jdks = {}
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   741
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   742
def get_jvmci_jdk(debugLevel=None):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   743
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   744
    Gets the JVMCI JDK corresponding to 'debugLevel'.
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   745
    """
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   746
    if not debugLevel:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   747
        debugLevel = _vm.debugLevel
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   748
    jdk = _jvmci_jdks.get(debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   749
    if jdk is None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   750
        try:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   751
            jdk = JVMCI9JDKConfig(debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   752
        except mx.JDKConfigException as e:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   753
            jdkBuildDir = _get_jdk_build_dir(debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   754
            msg = 'Error with the JDK built into {}:\n{}\nTry (re)building it with: mx --jdk-debug-level={} make'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   755
            if mx.get_opts().use_jdk_image:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   756
                msg += ' images'
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   757
            mx.abort(msg.format(jdkBuildDir, e.message, debugLevel))
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   758
        _jvmci_jdks[debugLevel] = jdk
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   759
    return jdk
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   760
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   761
class JVMCI9JDKFactory(mx.JDKFactory):
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   762
    def getJDKConfig(self):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   763
        jdk = get_jvmci_jdk(_vm.debugLevel)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   764
        return jdk
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   765
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   766
    def description(self):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   767
        return "JVMCI JDK"
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   768
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   769
mx.update_commands(_suite, {
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   770
    'make': [_runmake, '[args...]', _makehelp],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   771
    'multimake': [_runmultimake, '[options]'],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   772
    'c1visualizer' : [c1visualizer, ''],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   773
    'hsdis': [hsdis, '[att]'],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   774
    'hcfdis': [hcfdis, ''],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   775
    'igv' : [igv, ''],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   776
    'jol' : [jol, ''],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   777
    'vm': [run_vm, '[-options] class [args...]'],
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   778
})
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   779
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   780
mx.add_argument('-M', '--jvmci-mode', action='store', choices=sorted(_jvmciModes.viewkeys()), help='the JVM variant type to build/run (default: ' + _vm.jvmciMode + ')')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   781
mx.add_argument('--jdk-jvm-variant', '--vm', action='store', choices=_jdkJvmVariants + sorted(_legacyVms.viewkeys()), help='the JVM variant type to build/run (default: ' + _vm.jvmVariant + ')')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   782
mx.add_argument('--jdk-debug-level', '--vmbuild', action='store', choices=_jdkDebugLevels + sorted(_legacyVmbuilds.viewkeys()), help='the JDK debug level to build/run (default: ' + _vm.debugLevel + ')')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   783
mx.add_argument('-I', '--use-jdk-image', action='store_true', help='build/run JDK image instead of exploded JDK')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   784
35598
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   785
mx.addJDKFactory(_JVMCI_JDK_TAG, mx.JavaCompliance('9'), JVMCI9JDKFactory())
8d7bc466f490 8147470: update JVMCI mx extensions
dnsimon
parents: 35564
diff changeset
   786
34505
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   787
def mx_post_parse_cmd_line(opts):
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   788
    mx.set_java_command_default_jdk_tag(_JVMCI_JDK_TAG)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   789
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   790
    jdkTag = mx.get_jdk_option().tag
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   791
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   792
    jvmVariant = None
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   793
    debugLevel = None
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   794
    jvmciMode = None
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   795
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   796
    if opts.jdk_jvm_variant is not None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   797
        jvmVariant = opts.jdk_jvm_variant
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   798
        if jdkTag and jdkTag != _JVMCI_JDK_TAG:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   799
            mx.warn('Ignoring "--jdk-jvm-variant" option as "--jdk" tag is not "' + _JVMCI_JDK_TAG + '"')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   800
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   801
    if opts.jdk_debug_level is not None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   802
        debugLevel = _translateLegacyDebugLevel(opts.jdk_debug_level)
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   803
        if jdkTag and jdkTag != _JVMCI_JDK_TAG:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   804
            mx.warn('Ignoring "--jdk-debug-level" option as "--jdk" tag is not "' + _JVMCI_JDK_TAG + '"')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   805
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   806
    if opts.jvmci_mode is not None:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   807
        jvmciMode = opts.jvmci_mode
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   808
        if jdkTag and jdkTag != _JVMCI_JDK_TAG:
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   809
            mx.warn('Ignoring "--jvmci-mode" option as "--jdk" tag is not "' + _JVMCI_JDK_TAG + '"')
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   810
90f4fd15d739 8139921: add mx configuration files to support HotSpot IDE configuration generation
twisti
parents:
diff changeset
   811
    _vm.update(jvmVariant, debugLevel, jvmciMode)