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