Mercurial > hg > truffle
diff mx/commands.py @ 9106:0c8ec85fa013
Merge
author | Christos Kotselidis <christos.kotselidis@oracle.com> |
---|---|
date | Sat, 13 Apr 2013 00:33:37 +0200 |
parents | d766fd8eede0 |
children | e2dae636732a |
line wrap: on
line diff
--- a/mx/commands.py Fri Apr 12 23:29:45 2013 +0200 +++ b/mx/commands.py Sat Apr 13 00:33:37 2013 +0200 @@ -38,13 +38,19 @@ """ Used to distinguish an exported GraalVM (see 'mx export'). """ _vmSourcesAvailable = exists(join(_graal_home, 'make')) and exists(join(_graal_home, 'src')) -""" The VM that will be run by the 'vm' command: graal(default), client or server. +""" The VMs that can be built and run - default is first in list """ +_vmChoices = ['graal', 'server', 'client', 'server-nograal', 'client-nograal', 'boot'] + +""" The VM that will be run by the 'vm' command and built by default by the 'build' command. This can be set via the global '--vm' option. """ -_vm = 'graal' +_vm = _vmChoices[0] -""" The VM build that will be run by the 'vm' command: product(default), fastdebug or debug. - This can be set via the global '--fastdebug' and '--debug' options. """ -_vmbuild = 'product' +""" The VM builds that will be run by the 'vm' command - default is first in list """ +_vmbuildChoices = ['product', 'fastdebug', 'debug'] + +""" The VM build that will be run by the 'vm' command. + This can be set via the global '--product', '--fastdebug' and '--debug' options. """ +_vmbuild = _vmbuildChoices[0] _jacoco = 'off' @@ -66,12 +72,16 @@ """clean the GraalVM source tree""" opts = mx.clean(args, parser=ArgumentParser(prog='mx clean')) if opts.native: - env = os.environ.copy() - env.update(ARCH_DATA_MODEL='64', LANG='C', HOTSPOT_BUILD_JOBS='16') - mx.run([mx.gmake_cmd(), 'clean'], cwd=join(_graal_home, 'make'), env=env) - jdks = join(_graal_home, 'jdk' + str(mx.java().version)) - if exists(jdks): - shutil.rmtree(jdks) + def rmIfExists(name): + if os.path.isdir(name): + shutil.rmtree(name) + elif os.path.isfile(name): + os.unlink(name) + + rmIfExists(join(_graal_home, 'build')) + rmIfExists(join(_graal_home, 'build-nograal')) + rmIfExists(join(_graal_home, 'jdk' + str(mx.java().version))) + rmIfExists(mx.distribution('GRAAL').path) def export(args): """create a GraalVM zip file for distribution""" @@ -329,14 +339,15 @@ assert len(parts) == 2, parts assert parts[1] == 'KNOWN', parts[1] defaultVM = parts[0][1:] - jvmCfgLines += ['-' + defaultVM + '0 KNOWN\n'] + jvmCfgLines += ['# boot VM is a copy of the unmodified ' + defaultVM + ' VM\n'] + jvmCfgLines += ['-boot KNOWN\n'] else: jvmCfgLines += [line] assert defaultVM is not None, 'Could not find default VM in ' + jvmCfg if mx.get_os() != 'windows': chmodRecursive(jdk, 0755) - shutil.move(join(_vmLibDirInJdk(jdk), defaultVM), join(_vmLibDirInJdk(jdk), defaultVM + '0')) + shutil.move(join(_vmLibDirInJdk(jdk), defaultVM), join(_vmLibDirInJdk(jdk), 'boot')) with open(jvmCfg, 'w') as fp: @@ -540,9 +551,9 @@ if vm is None: vm = _vm - if vm == 'server' or vm == 'server0': + if vm.startswith('server') or vm == 'boot': buildSuffix = '' - elif vm == 'client': + elif vm.startswith('client'): buildSuffix = '1' else: assert vm == 'graal', vm @@ -557,10 +568,12 @@ mx.log('[skipping build from IDE as IDE_BUILD_TARGET environment variable is ""]') continue - if vm == 'server0': - assert build == 'product', 'can not "build" a non-product server0' + jdk = _jdk(build, create=True) - jdk = _jdk(build, create=True) + if vm == 'boot': + if build != 'product': + mx.log('only product build of boot VM exists') + continue vmDir = join(_vmLibDirInJdk(jdk), vm) if not exists(vmDir): @@ -575,9 +588,7 @@ # Check if a build really needs to be done timestampFile = join(vmDir, '.build-timestamp') - if vm == 'server0': - mustBuild = False - elif opts2.force or not exists(timestampFile): + if opts2.force or not exists(timestampFile): mustBuild = True else: mustBuild = False @@ -627,7 +638,10 @@ env.setdefault('HOTSPOT_BUILD_JOBS', str(cpus)) env['ALT_BOOTDIR'] = mx.java().jdk env['JAVA_HOME'] = jdk - if not env.has_key('OMIT_GRAAL'): + if vm.endswith('nograal'): + env['OMIT_GRAAL'] = 'true' + env.setdefault('ALT_OUTPUTDIR', join(_graal_home, 'build-nograal', mx.get_os())) + else: env['GRAAL'] = join(_graal_home, 'graal') # needed for TEST_IN_BUILD env.setdefault('INSTALL', 'y') if mx.get_os() == 'solaris' : @@ -777,12 +791,14 @@ name = 'JUnitWrapper' javaSource = join(mxdir, name + '.java') javaClass = join(mxdir, name + '.class') - (_, testfile) = tempfile.mkstemp(".testclasses", "graal") + testfile = os.environ.get('MX_TESTFILE', None) + if testfile is None: + (_, testfile) = tempfile.mkstemp(".testclasses", "graal") def harness(projectscp, vmArgs): if not exists(javaClass) or getmtime(javaClass) < getmtime(javaSource): subprocess.check_call([mx.java().javac, '-cp', projectscp, '-d', mxdir, javaSource]) - if _vm == 'server0': + if _vm == 'boot' or _vm.endswith('nograal'): prefixArgs = ['-esa', '-ea'] else: prefixArgs = ['-XX:-BootstrapGraal', '-esa', '-ea'] @@ -791,7 +807,8 @@ try: _run_tests(args, harness, annotations, testfile) finally: - os.remove(testfile) + if os.environ.get('MX_TESTFILE') is None: + os.remove(testfile) def unittest(args): """run the JUnit tests (all testcases) @@ -823,9 +840,14 @@ def buildvms(args): """build one or more VMs in various configurations""" + vmsDefault = ','.join(_vmChoices) + vmbuildsDefault = ','.join(_vmbuildChoices) + parser = ArgumentParser(prog='mx buildvms'); - parser.add_argument('--vms', help='a comma separated list of VMs to build (default: server,client,graal)', default='server,client,graal') - parser.add_argument('--builds', help='a comma separated list of build types (default: product,fastdebug,debug)', default='product,fastdebug,debug') + parser.add_argument('--vms', help='a comma separated list of VMs to build (default: ' + vmsDefault + ')', metavar='<args>', default=vmsDefault) + parser.add_argument('--builds', help='a comma separated list of build types (default: ' + vmbuildsDefault + ')', metavar='<args>', default=vmbuildsDefault) + parser.add_argument('-n', '--no-check', action='store_true', help='omit running "java -version" after each build') + parser.add_argument('-c', '--console', action='store_true', help='send build output to console instead of log file') args = parser.parse_args(args) vms = args.vms.split(',') @@ -834,14 +856,26 @@ allStart = time.time() for v in vms: for vmbuild in builds: - logFile = join(v + '-' + vmbuild + '.log') - log = open(join(_graal_home, logFile), 'wb') - start = time.time() - mx.log('BEGIN: ' + v + '-' + vmbuild + '\t(see: ' + logFile + ')') - # Run as subprocess so that output can be directed to a file - subprocess.check_call([sys.executable, '-u', join('mxtool', 'mx.py'), '--vm', v, 'build', vmbuild], cwd=_graal_home, stdout=log, stderr=subprocess.STDOUT) - duration = datetime.timedelta(seconds=time.time() - start) - mx.log('END: ' + v + '-' + vmbuild + '\t[' + str(duration) + ']') + if v == 'boot' and vmbuild != 'product': + continue + if not args.console: + logFile = join(v + '-' + vmbuild + '.log') + log = open(join(_graal_home, logFile), 'wb') + start = time.time() + mx.log('BEGIN: ' + v + '-' + vmbuild + '\t(see: ' + logFile + ')') + # Run as subprocess so that output can be directed to a file + subprocess.check_call([sys.executable, '-u', join('mxtool', 'mx.py'), '--vm', v, 'build', vmbuild], cwd=_graal_home, stdout=log, stderr=subprocess.STDOUT) + duration = datetime.timedelta(seconds=time.time() - start) + mx.log('END: ' + v + '-' + vmbuild + '\t[' + str(duration) + ']') + else: + global _vm + _vm = v + build([vmbuild]) + if not args.no_check: + vmargs = ['-version'] + if v == 'graal': + vmargs.insert(0, '-XX:-BootstrapGraal') + vm(vmargs, vm=v, vmbuild=vmbuild) allDuration = datetime.timedelta(seconds=time.time() - allStart) mx.log('TOTAL TIME: ' + '[' + str(allDuration) + ']') @@ -1289,18 +1323,16 @@ mx.add_argument('--jacoco', help='instruments com.oracle.* classes using JaCoCo', default='off', choices=['off', 'on', 'append']) if (_vmSourcesAvailable): - mx.add_argument('--vm', action='store', dest='vm', default='graal', choices=['graal', 'server', 'client', 'server0'], help='the VM to build/run (default: graal)') - mx.add_argument('--product', action='store_const', dest='vmbuild', const='product', help='select the product build of the VM') - mx.add_argument('--debug', action='store_const', dest='vmbuild', const='debug', help='select the debug build of the VM') - mx.add_argument('--fastdebug', action='store_const', dest='vmbuild', const='fastdebug', help='select the fast debug build of the VM') + mx.add_argument('--vm', action='store', dest='vm', default='graal', choices=_vmChoices, help='the VM to build/run (default: ' + _vmChoices[0] + ')') + for c in _vmbuildChoices: + mx.add_argument('--' + c, action='store_const', dest='vmbuild', const=c, help='select the ' + c + ' build of the VM') mx.add_argument('--ecl', action='store_true', dest='make_eclipse_launch', help='create launch configuration for running VM execution(s) in Eclipse') mx.add_argument('--native-dbg', action='store', dest='native_dbg', help='Start the vm inside a debugger', metavar='<debugger>') mx.add_argument('--gdb', action='store_const', const='/usr/bin/gdb --args', dest='native_dbg', help='alias for --native-dbg /usr/bin/gdb -- args') - commands.update({ 'export': [export, '[-options] [zipfile]'], - 'build': [build, '[-options] [product|debug|fastdebug]...'] + 'build': [build, '[-options] [' + '|'.join(_vmbuildChoices) + ']...'] }) mx.commands.update(commands)