compile_cs revision 56ed4167b942ec265f9cee70ac4d71d10b3835ce
1090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson# -*- mode: python; -*-
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert# Copyright 2008 Google Inc. All Rights Reserved.
3090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
4090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson# Use with
5090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson# subinclude('//java/com/google/clearsilver/jsilver/precompiler:compile_cs')
6090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
7090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson"""compile_cs build target
8090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
9090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilsoncompile_cs(name, srcs)
10090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
11090f9b4c879985bc747c214f82c62471e60c7742Jesse WilsonThis rule produces generated Java source code that represents JSilver Template
12090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilsonclasses for rendering the given source CS files
13090f9b4c879985bc747c214f82c62471e60c7742Jesse WilsonIt'll output one .java file for each .cs file.
14090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
15090f9b4c879985bc747c214f82c62471e60c7742Jesse WilsonArguments
16090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
17090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson    * name: A unique name for this rule. (Name; required)
18090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson    * srcs: The list of cs files to pass to the code generator. (List of files,
19090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson            required)
20090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson"""
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertdef compile_cs(name, srcs, mode='none'):
23090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  if not srcs:
24090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson    raise BadRule(None, '%s: srcs is empty' % name)
25090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  if mode == 'none':
26090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson    suffix = '.java'
27090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  else:
28090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson    suffix = '_' + mode + '.java'
29090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  gen_java_files = [ file.replace('.cs', suffix) for file in srcs]
30090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  input_file = 'gen_cs_' + name + '.in'
31090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  output_file = 'gen_cs_' + name + '.out'
32090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  map_file = name + '.map' 
33090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  genrule(name = 'gen_cs_' + name,
34090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson          srcs = srcs,
35090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson          outs = [ map_file ] + gen_java_files,
36090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson          deps = [
37090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson                   '//java/com/google/clearsilver/jsilver/precompiler:BatchCompiler',
38090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson                 ],
39090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson          cmd = (
40090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson              'echo "$(SRCS)" > $(@D)/' + input_file + ' && '
41090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson              'echo "$(OUTS)" > $(@D)/' + output_file + ' && '
42090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson              '//java/com/google/clearsilver/jsilver/precompiler:BatchCompiler '
43090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson              '--src_list_file=$(@D)/' + input_file + ' '
44090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson              '--out_list_file=$(@D)/' + output_file + ' '
45090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson              '--escape_mode=' + mode
46090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson            )
47090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson        )
48090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  java_library(name = name,
49090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson               srcs = gen_java_files,
50090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson               resources = [ map_file ],
51090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson               deps = [ '//java/com/google/clearsilver/jsilver/compiler' ]
52090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson              )
53090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert"""join_compiled_cs build target
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
57090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilsonjoin_compiled_cs(name, deps)
58090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
59090f9b4c879985bc747c214f82c62471e60c7742Jesse WilsonThis rule merges multiple compile_cs output libraries and maps into one Java
60090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilsonlibrary and one map file that will be included as a system resource and can be
61090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilsonread into the binary that wants to load the compiled template classes.
62090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
63090f9b4c879985bc747c214f82c62471e60c7742Jesse WilsonArguments
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
65090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson    * name: A unique name for this rule. (Name; required)
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    * deps: The list of compile_cs BUILD targets to merge (List of labels,
67090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson            required)
68090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson"""
69090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
70090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilsondef join_compiled_cs(name, deps):
71090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  if not deps:
72090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson    raise BadRule(None, '%s: deps is empty' % name)
73090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  map_files = [ file + '.map' for file in deps]
74090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  joined_map_file = name + '.map'
75090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  genrule(name = 'gen_' + joined_map_file,
76090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson          srcs = map_files,
77090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson          outs = [ joined_map_file ],
78090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson          cmd = ('cat $(SRCS) > $@')
79090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson         )
80090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  java_library(name = name,
81090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson               resources = [ joined_map_file ],
82090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson               deps = deps)
83090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson