annotate mx/mx_graal_makefile.py @ 21717:a3315bce5192

Change makefile generator to produce human readable code (JBS:GRAAL-52)
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Wed, 03 Jun 2015 20:24:04 +0200
parents 93d486d51ab4
children b5bbf03bc17a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
1 #
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
2 # ----------------------------------------------------------------------------------------------------
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
3 #
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
4 # Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
5 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
6 #
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
7 # This code is free software; you can redistribute it and/or modify it
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
8 # under the terms of the GNU General Public License version 2 only, as
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
9 # published by the Free Software Foundation.
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
10 #
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
11 # This code is distributed in the hope that it will be useful, but WITHOUT
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
14 # version 2 for more details (a copy is included in the LICENSE file that
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
15 # accompanied this code).
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
16 #
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
17 # You should have received a copy of the GNU General Public License version
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
18 # 2 along with this work; if not, write to the Free Software Foundation,
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
20 #
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
22 # or visit www.oracle.com if you need additional information or have any
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
23 # questions.
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
24 #
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
25 # ----------------------------------------------------------------------------------------------------
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
26 #
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
27 import mx, os
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
28 from argparse import ArgumentParser, REMAINDER
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
29
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
30
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
31 class Makefile:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
32 def __init__(self):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
33 self.rules = []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
34 self.definitions = []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
35
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
36 def add_rule(self, s):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
37 self.rules.append(s)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
38
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
39 def add_definition(self, s):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
40 self.definitions.append(s)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
41
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
42 def generate(self):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
43 return "\n\n".join(self.definitions + self.rules)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
44
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
45
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
46 def build_makefile(args):
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
47 """Creates a Makefile which is able to build distributions without mx"""
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
48 parser = ArgumentParser(prog='mx makefile')
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
49 parser.add_argument('-o', action='store', dest='output', help='Write contents to this file.')
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
50 parser.add_argument('selectedDists', help="Selected distribution names which are going to be built with make.", nargs=REMAINDER)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
51 args = parser.parse_args(args)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
52
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
53 if args.selectedDists == None or len(args.selectedDists) == 0:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
54 parser.print_help()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
55 return
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
56 mf = Makefile()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
57 if do_build_makefile(mf, args.selectedDists):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
58 contents = mf.generate()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
59 if args.output == None:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
60 print contents
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
61 else:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
62 with open(args.output, "w") as f:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
63 f.write(contents)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
64
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
65
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
66 def filter_projects(deps, t):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
67 def typeFilter(project): # filters
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
68 if isinstance(project, str):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
69 project = mx.dependency(project, True)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
70 return isinstance(project, t)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
71 return [d for d in deps if typeFilter(d)]
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
72
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
73
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
74 def make_dist_rule(dist, mf, bootClassPath=None):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
75 def path_dist_relative(p):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
76 return os.path.relpath(p, dist.suite.dir)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
77 jarPath = path_dist_relative(dist.path)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
78 sourcesVariableName = dist.name + "_SRC"
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
79 depJarVariableName = dist.name + "_DEP_JARS";
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
80 sources = []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
81 resources = []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
82 sortedDeps = dist.sorted_deps(True, transitive=False, includeAnnotationProcessors=True)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
83 projects = filter_projects(sortedDeps, mx.Project)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
84 targetPathPrefix = "$(TARGET)" + os.path.sep
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
85 libraryDeps = [path_dist_relative(l.get_path(False)) for l in filter_projects(sortedDeps, mx.Library)]
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
86
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
87 annotationProcessorDeps = set()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
88 distDeps = dist.get_dist_deps(includeSelf=False, transitive=True)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
89 distDepProjects = set()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
90 for d in distDeps:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
91 distDepProjects.update(d.sorted_deps(includeLibs=False, transitive=True))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
92 classPath = [targetPathPrefix + path_dist_relative(d.path) for d in distDeps] + libraryDeps
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
93
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
94 for p in projects:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
95 if p.definedAnnotationProcessors != None and p.definedAnnotationProcessorsDist != dist:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
96 annotationProcessorDeps.add(p)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
97 for p in projects:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
98 projectDir = path_dist_relative(p.dir)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
99 if p not in distDepProjects and p not in annotationProcessorDeps:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
100 generatedSource = [path_dist_relative(p.source_gen_dir())] if len(annotationProcessorDeps) > 0 else []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
101
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
102 for d in p.srcDirs + generatedSource:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
103 src = projectDir + os.path.sep + d
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
104 sources.append("$(shell find {} -type file -name *.java 2> /dev/null)".format(src))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
105 metaInf = src + os.path.sep + "META-INF";
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
106 if os.path.exists(metaInf):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
107 resources.append(metaInf)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
108
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
109
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
110 sourceLines = sourcesVariableName + " = " + ("\n" + sourcesVariableName + " += ").join(sources)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
111 annotationProcessorPaths = []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
112 annotationProcessorDistNames = []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
113 annotationProcessorDistVariableNames = []
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
114 for p in annotationProcessorDeps:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
115 annotationProcessorPaths.append(path_dist_relative(p.definedAnnotationProcessorsDist.path))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
116 name = p.definedAnnotationProcessorsDist.name
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
117 annotationProcessorDistNames.append(name)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
118 annotationProcessorDistVariableNames.append("$(" + name + "_JAR)")
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
119
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
120 props = {
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
121 "name": dist.name,
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
122 "jarPath": targetPathPrefix + jarPath,
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
123 "depends": "",
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
124 "depJarsVariableAccess": "$(" + depJarVariableName + ")" if len(classPath) > 0 else "",
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
125 "depJarsVariable": depJarVariableName,
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
126 "sourceLines": sourceLines,
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
127 "sourcesVariableName": sourcesVariableName,
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
128 "annotationProcessors": " ".join(annotationProcessorDistVariableNames),
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
129 "cpAnnotationProcessors": "-processorpath " + ":".join(annotationProcessorDistVariableNames) if len(annotationProcessorDistVariableNames) > 0 else "",
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
130 "bootCp": ("-bootclasspath " + bootClassPath) if bootClassPath != None else "",
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
131 "cpDeps": ("-cp " + ":".join(classPath)) if len(classPath) > 0 else "",
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
132 "jarDeps": " ".join(classPath),
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
133 "copyResources": "cp -r {} $(TMP)".format(" ".join(resources)) if len(resources) > 0 else "",
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
134 "targetPathPrefix": targetPathPrefix
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
135 }
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
136
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
137 mf.add_definition(sourceLines)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
138 mf.add_definition("{name}_JAR = {jarPath}".format(**props))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
139 if len(classPath) > 0: mf.add_definition("{depJarsVariable} = {jarDeps}".format(**props))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
140 mf.add_rule("""$({name}_JAR): $({sourcesVariableName}) {annotationProcessors} {depJarsVariableAccess} $(TARGET)/build
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
141 \t$(eval TMP := $(shell mktemp -d))
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
142 \t$(JAVAC) -d $(TMP) {cpAnnotationProcessors} {bootCp} {cpDeps} $({sourcesVariableName})
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
143 \t{copyResources}
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
144 \t$(call process_options,$(TMP))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
145 \tmkdir -p $$(dirname $({name}_JAR))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
146 \t$(JAR) cf $({name}_JAR) -C $(TMP) .
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
147 \trm -r $(TMP)""".format(**props))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
148 return
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
149
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
150
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
151 def do_build_makefile(mf, selectedDists):
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
152 java = mx.java()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
153 bootClassPath = java.bootclasspath()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
154 bootClassPath = bootClassPath.replace(java.jdk, "$(JDK)")
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
155 jdkBootClassPathVariableName = "JDK_BOOTCLASSPATH"
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
156
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
157 mf.add_definition("""VERBOSE=
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
158 TARGET=.
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
159 JDK=
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
160
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
161 WGET=wget
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
162 JAVAC=$(JDK)/bin/javac -g -target """ + str(java.javaCompliance) + """
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
163 JAR=$(JDK)/bin/jar
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
164
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
165
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
166 ifeq ($(JDK),)
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
167 $(error Variable JDK must be set to a JDK installation.)
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
168 endif
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
169 ifneq ($(VERBOSE),)
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
170 SHELL=sh -x
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
171 endif
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
172
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
173 define process_options =
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
174 $(eval providers=$(1)/META-INF/providers/)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
175 $(eval services=$(1)/META-INF/services/)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
176 test -d $(services) || mkdir -p $(services)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
177 test ! -d $(providers) || (cd $(providers) && for i in $$(ls $(providers)); do c=$$(cat $$i); echo $$i >> $(services)$$c; rm $$i; done)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
178 endef
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
179
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
180 all: default
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
181
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
182 $(TARGET)/build:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
183 \tmkdir -p $(TARGET)/build
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
184
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
185 $(LIB):
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
186 \tmkdir -p $(LIB)
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
187 """)
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
188 s = mx.suite("graal")
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
189 dists = set()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
190 ap = set()
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
191 projects = set()
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
192
21717
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
193 for d in s.dists:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
194 if d.name in selectedDists:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
195 dists.update(d.get_dist_deps(True, True))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
196 projects.update(d.sorted_deps(includeLibs=False, transitive=True))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
197 for p in projects:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
198 deps = p.all_deps([], False, includeSelf=True, includeJreLibs=False, includeAnnotationProcessors=True)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
199 for d in deps:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
200 if d.definedAnnotationProcessorsDist != None:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
201 apd = d.definedAnnotationProcessorsDist
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
202 ap.add(apd)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
203
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
204 if len(dists) > 0:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
205 mf.add_definition(jdkBootClassPathVariableName + " = " + bootClassPath)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
206 bootClassPathVarAccess = "$(" + jdkBootClassPathVariableName + ")"
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
207 for d in ap: make_dist_rule(d, mf, bootClassPathVarAccess)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
208 for d in dists: make_dist_rule(d, mf, bootClassPathVarAccess)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
209 mf.add_rule("default: $({}_JAR)\n.PHONY: default".format("_JAR) $(".join([d.name for d in dists])))
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
210 return True
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
211 else:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
212 for d in dists:
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
213 selectedDists.remove(d.name)
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
214 print "Distribution(s) '" + "', '".join(selectedDists) + "' does not exist."
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
215
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
216
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
217
a3315bce5192 Change makefile generator to produce human readable code (JBS:GRAAL-52)
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 21504
diff changeset
218
21488
6420ac0cbe3c Add Makefile generator for building graal without mx
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
diff changeset
219