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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
{ "library":
{ "doc": ["A prebuilt C++ library"]
, "target_fields": ["lib", "hdrs", "deps", "pkg-config"]
, "string_fields":
["name", "version", "stage", "defines", "cflags", "ldflags"]
, "implicit":
{ "defaults": [["./", "..", "defaults"]]
, "config_reader": [["CC", "prebuilt/read_pkgconfig.py"]]
}
, "config_vars": ["ENV"]
, "field_doc":
{ "name":
[ "The name of the library (without leading \"lib\" or trailing file name"
, "extension), also used as name for pkg-config files."
]
, "version":
[ "The library version, used for pkg-config files. Individual version"
, "components are joined with \".\"."
]
, "lib":
[ "The actual prebuilt library. If multiple libraries are specified"
, "(e.g., one depends on the other), the order matters. Library types"
, "cannot be mixed. All of them have to be either static or shared."
]
, "hdrs": ["Any public header files of the library."]
, "deps": ["Any other libraries this library depends upon."]
, "stage":
[ "The logical location of all header and source files, as well as the"
, "resulting library file. Individual directory components are joined"
, "with \"/\"."
]
, "defines":
[ "List of defines set for this target and its consumers."
, "Each list entry will be prepended by \"-D\"."
]
, "cflags":
["List of compile flags set for this target and its consumers."]
, "ldflags":
["Additional linker flags (typically for linking system libraries)."]
, "pkg-config":
[ "Pkg-config file for optional infer of public cflags and ldflags. If"
, "multiple files are specified (e.g., one depends on the other), the"
, "first one is used as entry. Note that if this field is non-empty the"
, "tool \"pkg-config\" must be available in \"PATH\", which is taken"
, "from [\"CC\", \"defaults\"] or the \"ENV\" variable."
]
}
, "artifacts_doc":
[ "The actual library (libname.a or libname.so). Only static libraries are"
, "staged in the specified directory."
]
, "runfiles_doc": ["The public headers staged to the specified directory."]
, "provides_doc":
{ "compile-deps":
[ "Map of artifacts specifying any additional files that, besides the"
, "runfiles have to be present in compile actions of targets depending on"
, "this library."
]
, "link-deps":
[ "Map of artifacts specifying any additional files that, besides the artifacts,"
, "have to be present in a link actions of targets depending on this library"
]
, "run-libs":
[ "Map of artifacts specifying all files, including the artifacts of this"
, "library if shared, that have to be present in link actions of targets"
, "depending on this library."
]
, "link-args":
[ "List of strings that have to be added to the command line for linking"
, "actions in targets depending on this library."
]
, "run-libs-args":
[ "List of strings that have to be added to the command line for linking"
, "runtime libraries in targets depending on this library."
]
, "compile-args":
[ "List of strings that have to be added to the command line for compile"
, "actions in targets depending on this library."
]
}
, "imports":
{ "artifacts": ["./", "../..", "field_artifacts"]
, "artifacts_list": ["./", "../..", "field_artifacts_list"]
, "stage_field": ["", "stage_singleton_field"]
, "prebuilt result": "prebuilt result"
}
, "expression":
{ "type": "let*"
, "bindings":
[ [ "name"
, { "type": "assert_non_empty"
, "msg": "name is required for prebuilt library"
, "$1": {"type": "join", "$1": {"type": "FIELD", "name": "name"}}
}
]
, ["version", {"type": "FIELD", "name": "version"}]
, [ "stage"
, { "type": "join"
, "separator": "/"
, "$1": {"type": "FIELD", "name": "stage"}
}
]
, [ "cflags"
, { "type": "++"
, "$1":
[ {"type": "FIELD", "name": "cflags"}
, { "type": "foreach"
, "var": "def"
, "range": {"type": "FIELD", "name": "defines"}
, "body":
{"type": "join", "$1": ["-D", {"type": "var", "name": "def"}]}
}
]
}
]
, ["ldflags", {"type": "FIELD", "name": "ldflags"}]
, [ "libs"
, { "type": "let*"
, "bindings": [["fieldname", "lib"]]
, "body": {"type": "CALL_EXPRESSION", "name": "artifacts_list"}
}
]
, [ "hdrs"
, { "type": "let*"
, "bindings": [["fieldname", "hdrs"]]
, "body": {"type": "CALL_EXPRESSION", "name": "artifacts_list"}
}
]
, [ "config_reader"
, { "type": "let*"
, "bindings":
[["fieldname", "config_reader"], ["location", "config_reader"]]
, "body": {"type": "CALL_EXPRESSION", "name": "stage_field"}
}
]
, [ "pkg-configs"
, { "type": "let*"
, "bindings": [["fieldname", "pkg-config"]]
, "body": {"type": "CALL_EXPRESSION", "name": "artifacts_list"}
}
]
, ["deps-fieldnames", ["deps"]]
]
, "body": {"type": "CALL_EXPRESSION", "name": "prebuilt result"}
}
}
}
|