summaryrefslogtreecommitdiff
path: root/rules/CC/foreign/cmake/EXPRESSIONS
blob: 8977d5ac478cd40bbef5387bfd48be796d77fb44 (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
{ "cmake-build":
  { "vars":
    [ "source_dir"
    , "cmake_options"
    , "cmake_defines"
    , "cmake_jobs"
    , "pre_cmds"
    , "post_cmds"
    , "CC"
    , "CXX"
    , "CFLAGS"
    , "CXXFLAGS"
    , "LDFLAGS"
    , "ADD_CFLAGS"
    , "ADD_CXXFLAGS"
    , "ADD_LDFLAGS"
    , "ENV"
    , "AR"
    , "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":
      [ [ "CMAKE_FLAGS"
        , { "type": "++"
          , "$1":
            [ { "type": "foreach"
              , "var": "define"
              , "range": {"type": "var", "name": "cmake_defines"}
              , "body":
                { "type": "join"
                , "$1": ["-D", {"type": "var", "name": "define"}]
                }
              }
            , {"type": "var", "name": "cmake_options"}
            , { "type": "if"
              , "cond": {"type": "var", "name": "BUILD_POSITION_INDEPENDENT"}
              , "then": ["-DCMAKE_POSITION_INDEPENDENT_CODE=ON"]
              }
            ]
          }
        ]
      , ["BUILD_POSITION_INDEPENDENT", null]
      , ["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": []}
              ]
            }
          }
        ]
      , [ "ENV"
        , { "type": "map_union"
          , "$1":
            { "type": "++"
            , "$1":
              [ {"type": "CALL_EXPRESSION", "name": "default-ENV"}
              , [ { "type": "var"
                  , "name": "ENV"
                  , "default": {"type": "empty_map"}
                  }
                ]
              , [ { "type": "env"
                  , "vars": ["CC", "CXX", "CXXFLAGS", "CFLAGS", "LDFLAGS"]
                  }
                ]
              ]
            }
          }
        ]
      , [ "AR"
        , { "type": "var"
          , "name": "AR"
          , "default": {"type": "CALL_EXPRESSION", "name": "default-AR"}
          }
        ]
      , [ "CMAKE_JOBS"
        , { "type": "if"
          , "cond": {"type": "var", "name": "cmake_jobs"}
          , "then":
            [ { "type": "join"
              , "$1":
                [ "CMAKE_BUILD_PARALLEL_LEVEL="
                , { "type": "join_cmd"
                  , "$1": {"type": "var", "name": "cmake_jobs"}
                  }
                ]
              }
            ]
          }
        ]
      , [ "script"
        , { "type": "singleton_map"
          , "key": "run_cmake.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 CMAKE_AR=$(which $1)"
                    , "shift"
                    , "cmake \"$@\" -Ssource -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install >configure.log || (cat configure.log && exit 1)"
                    ]
                  , [ { "type": "join"
                      , "separator": " "
                      , "$1":
                        { "type": "++"
                        , "$1":
                          [ {"type": "var", "name": "CMAKE_JOBS"}
                          , [ "cmake --build build --target install >build.log || (cat configure.log build.log && exit 1)"
                            ]
                          ]
                        }
                      }
                    ]
                  , ["find ./install -type l -delete"]
                  , { "type": "if"
                    , "cond": {"type": "var", "name": "post_cmds"}
                    , "then":
                      { "type": "++"
                      , "$1":
                        [ [ "("
                          , "set --"
                          , "readonly CMAKE_SOURCE_DIR=\"$(pwd)/source\""
                          , "readonly CMAKE_BINARY_DIR=\"$(pwd)/build\""
                          , "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_cmake.sh", {"type": "var", "name": "AR"}]
          , {"type": "var", "name": "CMAKE_FLAGS"}
          ]
        }
      , "out_dirs": ["install"]
      , "env": {"type": "var", "name": "ENV"}
      }
    }
  }
}