summaryrefslogtreecommitdiff
path: root/rules/CC/foreign/make/EXPRESSIONS
blob: df2f98f6afed11e5bf9443c0c5decec06ce41fef (plain)
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
{ "make-build":
  { "vars":
    [ "source_dir"
    , "subdir"
    , "configure"
    , "configure_options"
    , "make_targets"
    , "make_prefix"
    , "make_options"
    , "make_jobs"
    , "pre_cmds"
    , "post_cmds"
    , "var_cc"
    , "var_cxx"
    , "var_ccflags"
    , "var_cxxflags"
    , "var_ldflags"
    , "var_ar"
    , "var_prefix"
    , "var_destdir"
    , "CC"
    , "CXX"
    , "CFLAGS"
    , "CXXFLAGS"
    , "LDFLAGS"
    , "ADD_CFLAGS"
    , "ADD_CXXFLAGS"
    , "ADD_LDFLAGS"
    , "ENV"
    , "AR"
    , "PREFIX"
    , "BUILD_POSITION_INDEPENDENT"
    ]
  , "imports":
    { "artifacts": ["", "field_artifacts"]
    , "flags-cc": ["CC", "flags-cc"]
    , "flags-cxx": ["CC", "flags-cxx"]
    , "compiler-cc": ["CC", "compiler-cc"]
    , "compiler-cxx": ["CC", "compiler-cxx"]
    , "default-LDFLAGS": ["CC", "default-LDFLAGS"]
    , "default-AR": ["CC", "default-AR"]
    , "default-ENV": ["CC", "default-ENV"]
    , "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"]
    , "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"]
    }
  , "expression":
    { "type": "let*"
    , "bindings":
      [ ["TOOLCHAIN_DIR", "toolchain"]
      , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}]
      , [ "TOOLCHAIN"
        , { "type": "to_subdir"
          , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"}
          , "$1": {"type": "var", "name": "TOOLCHAIN"}
          }
        ]
      , [ "NON_SYSTEM_TOOLS"
        , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"}
        ]
      , ["CC", {"type": "CALL_EXPRESSION", "name": "compiler-cc"}]
      , ["CXX", {"type": "CALL_EXPRESSION", "name": "compiler-cxx"}]
      , [ "CFLAGS"
        , { "type": "join"
          , "separator": " "
          , "$1": {"type": "CALL_EXPRESSION", "name": "flags-cc"}
          }
        ]
      , [ "CXXFLAGS"
        , { "type": "join"
          , "separator": " "
          , "$1": {"type": "CALL_EXPRESSION", "name": "flags-cxx"}
          }
        ]
      , [ "LDFLAGS"
        , { "type": "join"
          , "separator": " "
          , "$1":
            { "type": "++"
            , "$1":
              [ ["-Wl,-rpath,$ORIGIN", "-Wl,-rpath,$ORIGIN/../lib"]
              , { "type": "var"
                , "name": "LDFLAGS"
                , "default":
                  {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"}
                }
              , {"type": "var", "name": "ldflags", "default": []}
              ]
            }
          }
        ]
      , [ "AR"
        , { "type": "var"
          , "name": "AR"
          , "default":
            { "type": "join"
            , "$1":
              { "type": "++"
              , "$1":
                [ { "type": "if"
                  , "cond":
                    { "type": "lookup"
                    , "key": "AR"
                    , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"}
                    }
                  , "then":
                    ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"]
                  }
                , {"type": "CALL_EXPRESSION", "name": "default-AR"}
                ]
              }
            }
          }
        ]
      , [ "PREFIX"
        , { "type": "if"
          , "cond": {"type": "var", "name": "make_prefix"}
          , "then":
            { "type": "join"
            , "separator": "/"
            , "$1":
              { "type": "++"
              , "$1": [[""], {"type": "var", "name": "make_prefix"}]
              }
            }
          , "else": {"type": "var", "name": "PREFIX", "default": "/"}
          }
        ]
      , [ "ENV"
        , { "type": "map_union"
          , "$1":
            [ {"type": "CALL_EXPRESSION", "name": "default-ENV"}
            , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
            , { "type": "singleton_map"
              , "key":
                { "type": "if"
                , "cond": {"type": "var", "name": "var_cc"}
                , "then":
                  {"type": "join", "$1": {"type": "var", "name": "var_cc"}}
                , "else": "CC"
                }
              , "value": {"type": "var", "name": "CC"}
              }
            , { "type": "singleton_map"
              , "key":
                { "type": "if"
                , "cond": {"type": "var", "name": "var_cxx"}
                , "then":
                  {"type": "join", "$1": {"type": "var", "name": "var_cxx"}}
                , "else": "CXX"
                }
              , "value": {"type": "var", "name": "CXX"}
              }
            , { "type": "singleton_map"
              , "key":
                { "type": "if"
                , "cond": {"type": "var", "name": "var_ccflags"}
                , "then":
                  { "type": "join"
                  , "$1": {"type": "var", "name": "var_ccflags"}
                  }
                , "else": "CFLAGS"
                }
              , "value": {"type": "var", "name": "CFLAGS"}
              }
            , { "type": "singleton_map"
              , "key":
                { "type": "if"
                , "cond": {"type": "var", "name": "var_cxxflags"}
                , "then":
                  { "type": "join"
                  , "$1": {"type": "var", "name": "var_cxxflags"}
                  }
                , "else": "CXXFLAGS"
                }
              , "value": {"type": "var", "name": "CXXFLAGS"}
              }
            , { "type": "singleton_map"
              , "key":
                { "type": "if"
                , "cond": {"type": "var", "name": "var_ldflags"}
                , "then":
                  { "type": "join"
                  , "$1": {"type": "var", "name": "var_ldflags"}
                  }
                , "else": "LDFLAGS"
                }
              , "value": {"type": "var", "name": "LDFLAGS"}
              }
            , { "type": "singleton_map"
              , "key":
                { "type": "if"
                , "cond": {"type": "var", "name": "var_ar"}
                , "then":
                  {"type": "join", "$1": {"type": "var", "name": "var_ar"}}
                , "else": "AR"
                }
              , "value": {"type": "var", "name": "AR"}
              }
            , { "type": "singleton_map"
              , "key":
                { "type": "if"
                , "cond": {"type": "var", "name": "var_prefix"}
                , "then":
                  {"type": "join", "$1": {"type": "var", "name": "var_prefix"}}
                , "else": "PREFIX"
                }
              , "value": {"type": "var", "name": "PREFIX"}
              }
            ]
          }
        ]
      , [ "SUBDIR"
        , { "type": "join"
          , "separator": "/"
          , "$1": {"type": "var", "name": "subdir", "default": []}
          }
        ]
      , [ "configure_args"
        , { "type": "if"
          , "cond": {"type": "var", "name": "configure"}
          , "then":
            { "type": "++"
            , "$1":
              [ {"type": "var", "name": "configure_options", "default": []}
              , [ { "type": "join"
                  , "$1": ["--prefix=", {"type": "var", "name": "PREFIX"}]
                  }
                ]
              ]
            }
          }
        ]
      , [ "make_targets"
        , { "type": "if"
          , "cond": {"type": "var", "name": "make_targets"}
          , "then": {"type": "var", "name": "make_targets"}
          , "else": ["install"]
          }
        ]
      , [ "script"
        , { "type": "singleton_map"
          , "key": "run_make.sh"
          , "value":
            { "type": "BLOB"
            , "data":
              { "type": "join"
              , "separator": "\n"
              , "$1":
                { "type": "++"
                , "$1":
                  [ [ "set -eu"
                    , "mkdir scratch"
                    , "readonly TMPDIR=\"$(pwd)/scratch\""
                    ]
                  , { "type": "if"
                    , "cond": {"type": "var", "name": "pre_cmds"}
                    , "then":
                      { "type": "++"
                      , "$1":
                        [ ["(", "set --", "cd ./source"]
                        , {"type": "var", "name": "pre_cmds"}
                        , [")"]
                        ]
                      }
                    }
                  , [ "readonly SUBDIR=\"$1\""
                    , "readonly VAR_DESTDIR=$2"
                    , "shift 2"
                    ]
                  , { "type": "if"
                    , "cond": {"type": "var", "name": "configure_args"}
                    , "then":
                      [ "( readonly ROOT=\"$(pwd)\""
                      , "  cd \"source/${SUBDIR}\""
                      , { "type": "join"
                        , "$1":
                          [ "./configure "
                          , { "type": "join_cmd"
                            , "$1": {"type": "var", "name": "configure_args"}
                            }
                          , " >\"${ROOT}/configure.log\" 2>&1 || (cat \"${ROOT}/configure.log\" && exit 1)"
                          ]
                        }
                      , ")"
                      ]
                    }
                  , { "type": "foreach"
                    , "range": {"type": "var", "name": "make_targets"}
                    , "var": "target"
                    , "body":
                      { "type": "join"
                      , "$1":
                        [ "make \"$@\" -C \"source/${SUBDIR}\" ${VAR_DESTDIR}=$(pwd)/install "
                        , { "type": "join_cmd"
                          , "$1": [{"type": "var", "name": "target"}]
                          }
                        , " >>build.log 2>&1 || (cat build.log && exit 1)"
                        ]
                      }
                    }
                  , ["find ./install -type l -delete"]
                  , { "type": "if"
                    , "cond": {"type": "var", "name": "post_cmds"}
                    , "then":
                      { "type": "++"
                      , "$1":
                        [ ["(", "set --", "cd ./install"]
                        , {"type": "var", "name": "post_cmds"}
                        , [")"]
                        ]
                      }
                    }
                  ]
                }
              }
            }
          }
        ]
      ]
    , "body":
      { "type": "ACTION"
      , "inputs":
        { "type": "map_union"
        , "$1":
          [ {"type": "var", "name": "TOOLCHAIN"}
          , {"type": "var", "name": "source_dir"}
          , {"type": "var", "name": "script"}
          ]
        }
      , "cmd":
        { "type": "++"
        , "$1":
          [ ["/bin/sh", "run_make.sh"]
          , [{"type": "var", "name": "SUBDIR"}]
          , { "type": "if"
            , "cond": {"type": "var", "name": "var_destdir"}
            , "then":
              [{"type": "join", "$1": {"type": "var", "name": "var_destdir"}}]
            , "else": ["DESTDIR"]
            }
          , {"type": "var", "name": "make_options"}
          , [ { "type": "join"
              , "$1":
                { "type": "++"
                , "$1":
                  [["-j"], {"type": "var", "name": "make_jobs", "default": []}]
                }
              }
            ]
          ]
        }
      , "out_dirs": ["install"]
      , "env": {"type": "var", "name": "ENV"}
      }
    }
  }
}