1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
{ "library":
{ "doc":
[ "A proto library as abtract data structure."
, ""
, "Such a libray does not produce any artifacts itself, but it can be"
, "used as a dependency for various language-specific rules."
]
, "target_fields": ["srcs", "deps"]
, "string_fields": ["stage", "name", "service"]
, "field_doc":
{ "srcs": ["The proto files for this library"]
, "deps": ["Any other proto library this library depends on"]
, "stage":
[ "The directory to stage the source files to."
, "Directory components are joined by \"/\"."
]
, "name": ["The name of the (abstract) library."]
, "service":
[ "If non empty, generate a service library (with acces sto \"rpc\""
, "definitions) instead of a regular one."
]
}
, "artifacts_doc": ["None"]
, "runfiles_doc": ["None"]
, "provides_doc":
{ "proto":
[ "A list containing a single target-graph node with the defintion of"
, "this proto library. The node types generated are \"library\" and"
, "\"service library\"."
]
}
, "imports": {"artifacts_list": ["./", "..", "field_artifacts_list"]}
, "expression":
{ "type": "let*"
, "bindings":
[ [ "stage"
, { "type": "join"
, "separator": "/"
, "$1": {"type": "FIELD", "name": "stage"}
}
]
, [ "name"
, { "type": "assert_non_empty"
, "msg": "Have to provide a name, unique in the stage"
, "$1": {"type": "join", "$1": {"type": "FIELD", "name": "name"}}
}
]
, [ "srcs"
, [ { "type": "VALUE_NODE"
, "$1":
{ "type": "RESULT"
, "artifacts":
{ "type": "to_subdir"
, "subdir": {"type": "var", "name": "stage"}
, "$1":
{ "type": "disjoint_map_union"
, "msg": "Sources have to be conflict free"
, "$1":
{ "type": "let*"
, "bindings": [["fieldname", "srcs"]]
, "body":
{"type": "CALL_EXPRESSION", "name": "artifacts_list"}
}
}
}
}
}
]
]
, [ "deps"
, { "type": "++"
, "$1":
{ "type": "foreach"
, "var": "x"
, "range": {"type": "FIELD", "name": "deps"}
, "body":
{ "type": "DEP_PROVIDES"
, "dep": {"type": "var", "name": "x"}
, "provider": "proto"
}
}
}
]
, [ "node"
, { "type": "ABSTRACT_NODE"
, "node_type":
{ "type": "if"
, "cond": {"type": "FIELD", "name": "service"}
, "then": "service library"
, "else": "library"
}
, "target_fields":
{ "type": "map_union"
, "$1":
[ { "type": "singleton_map"
, "key": "srcs"
, "value": {"type": "var", "name": "srcs"}
}
, { "type": "singleton_map"
, "key": "deps"
, "value": {"type": "var", "name": "deps"}
}
]
}
, "string_fields":
{ "type": "map_union"
, "$1":
[ { "type": "singleton_map"
, "key": "name"
, "value": [{"type": "var", "name": "name"}]
}
, { "type": "singleton_map"
, "key": "stage"
, "value": [{"type": "var", "name": "stage"}]
}
]
}
}
]
]
, "body":
{ "type": "RESULT"
, "provides":
{ "type": "singleton_map"
, "key": "proto"
, "value": [{"type": "var", "name": "node"}]
}
}
}
}
}
|