summaryrefslogtreecommitdiff
path: root/rules/CC/foreign/make/EXPRESSIONS
blob: e853b29576fe4db2a3bd80e6e1a9abaf5f2dcc2b (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
{ "make-build":
  { "vars":
    [ "source_dir"
    , "make_target"
    , "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"]
    }
  , "expression":
    { "type": "let*"
    , "bindings":
      [ ["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":
              [ { "type": "var"
                , "name": "LDFLAGS"
                , "default":
                  {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"}
                }
              , {"type": "var", "name": "ldflags", "default": []}
              ]
            }
          }
        ]
      , [ "AR"
        , { "type": "var"
          , "name": "AR"
          , "default": {"type": "CALL_EXPRESSION", "name": "default-AR"}
          }
        ]
      , [ "ENV"
        , { "type": "map_union"
          , "$1":
            { "type": "++"
            , "$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": "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": "/"}
                    }
                  }
                ]
              ]
            }
          }
        ]
      , [ "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 VAR_DESTDIR=$1"
                    , "shift"
                    , "make \"$@\" -C source ${VAR_DESTDIR}=$(pwd)/install >build.log || (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": "source_dir"}
          , {"type": "var", "name": "script"}
          ]
        }
      , "cmd":
        { "type": "++"
        , "$1":
          [ ["/bin/sh", "run_make.sh"]
          , { "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": "if"
            , "cond": {"type": "var", "name": "make_target"}
            , "then":
              [{"type": "join", "$1": {"type": "var", "name": "make_target"}}]
            , "else": ["install"]
            }
          , [ { "type": "join"
              , "$1":
                { "type": "++"
                , "$1":
                  [["-j"], {"type": "var", "name": "make_jobs", "default": []}]
                }
              }
            ]
          ]
        }
      , "out_dirs": ["install"]
      , "env": {"type": "var", "name": "ENV"}
      }
    }
  }
}