summaryrefslogtreecommitdiff
path: root/rules/CC/foreign/cmake/EXPRESSIONS
diff options
context:
space:
mode:
Diffstat (limited to 'rules/CC/foreign/cmake/EXPRESSIONS')
-rw-r--r--rules/CC/foreign/cmake/EXPRESSIONS311
1 files changed, 311 insertions, 0 deletions
diff --git a/rules/CC/foreign/cmake/EXPRESSIONS b/rules/CC/foreign/cmake/EXPRESSIONS
new file mode 100644
index 0000000..ac7039c
--- /dev/null
+++ b/rules/CC/foreign/cmake/EXPRESSIONS
@@ -0,0 +1,311 @@
+{ "cmake-build":
+ { "vars":
+ [ "ARCH"
+ , "HOST_ARCH"
+ , "source_dir"
+ , "cmake_subdir"
+ , "localbase_dir"
+ , "cmake_options"
+ , "cmake_defines"
+ , "cmake_jobs"
+ , "cmake_targets"
+ , "pre_cmds"
+ , "post_cmds"
+ , "CC"
+ , "CXX"
+ , "CFLAGS"
+ , "CXXFLAGS"
+ , "LDFLAGS"
+ , "ADD_CFLAGS"
+ , "ADD_CXXFLAGS"
+ , "ADD_LDFLAGS"
+ , "ENV"
+ , "AR"
+ , "BUILD_POSITION_INDEPENDENT"
+ , "defaults-transition"
+ , "host-defaults-transition"
+ ]
+ , "imports":
+ { "artifacts": ["", "field_artifacts"]
+ , "nub_left": ["", "nub_left"]
+ , "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-PATH": ["CC", "default-PATH"]
+ , "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"]
+ , "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"]
+ , "expand_exec_tool": ["./", "..", "expand_exec_tool"]
+ }
+ , "expression":
+ { "type": "let*"
+ , "bindings":
+ [ [ "expand_exec"
+ , { "type": "let*"
+ , "bindings":
+ [ [ "defaults-transition"
+ , {"type": "var", "name": "host-defaults-transition"}
+ ]
+ ]
+ , "body": {"type": "CALL_EXPRESSION", "name": "expand_exec_tool"}
+ }
+ ]
+ , ["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"}
+ ]
+ , [ "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"]
+ }
+ , ["-DCMAKE_INSTALL_RPATH=$ORIGIN;$ORIGIN/../lib"]
+ ]
+ }
+ ]
+ , ["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": []}
+ ]
+ }
+ }
+ ]
+ , [ "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"}
+ ]
+ }
+ }
+ }
+ ]
+ , [ "PATH"
+ , { "type": "join"
+ , "separator": ":"
+ , "$1":
+ { "type": "let*"
+ , "bindings":
+ [["list", {"type": "CALL_EXPRESSION", "name": "default-PATH"}]]
+ , "body": {"type": "CALL_EXPRESSION", "name": "nub_left"}
+ }
+ }
+ ]
+ , [ "ENV"
+ , { "type": "map_union"
+ , "$1":
+ [ { "type": "env"
+ , "vars": ["CC", "CXX", "CXXFLAGS", "CFLAGS", "LDFLAGS", "AR"]
+ }
+ , {"type": "CALL_EXPRESSION", "name": "default-ENV"}
+ , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ ]
+ }
+ ]
+ , [ "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"}
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ , [ "CMAKE_SUBDIR"
+ , { "type": "join"
+ , "separator": "/"
+ , "$1": {"type": "var", "name": "cmake_subdir", "default": []}
+ }
+ ]
+ , [ "cmake_targets"
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "cmake_targets"}
+ , "then": {"type": "var", "name": "cmake_targets"}
+ , "else": ["install"]
+ }
+ ]
+ , [ "script"
+ , { "type": "singleton_map"
+ , "key": "run_cmake.sh"
+ , "value":
+ { "type": "BLOB"
+ , "data":
+ { "type": "join"
+ , "separator": "\n"
+ , "$1":
+ { "type": "++"
+ , "$1":
+ [ [ "set -eu"
+ , "mkdir scratch"
+ , "readonly ROOT=\"$(pwd)\""
+ , "export TMPDIR=\"$(pwd)/scratch\""
+ , "export TOOLCHAIN=\"$(pwd)/toolchain\""
+ , "export LOCALBASE=\"$(pwd)/localbase\""
+ , { "type": "join"
+ , "$1":
+ [ "export PATH=\"$(./expand_exec TOOLCHAIN -- echo "
+ , { "type": "join_cmd"
+ , "$1": [{"type": "var", "name": "PATH"}]
+ }
+ , ")\":$PATH"
+ ]
+ }
+ ]
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "pre_cmds"}
+ , "then":
+ { "type": "++"
+ , "$1":
+ [ ["(", "set --", "cd ./source"]
+ , {"type": "var", "name": "pre_cmds"}
+ , [")"]
+ ]
+ }
+ }
+ , [ "readonly CMAKE_SUBDIR=\"$1\""
+ , "readonly CMAKE_AR=$(which $2)"
+ , "shift 2"
+ , "${ROOT}/expand_exec TMPDIR LOCALBASE CC CXX CFLAGS CXXFLAGS LDFLAGS AR -- cmake -S\"source/${CMAKE_SUBDIR}\" -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install -DCMAKE_PREFIX_PATH=\"$LOCALBASE\" -DPKG_CONFIG_ARGN=--define-prefix --no-warn-unused-cli \"$@\" >configure.log 2>&1 || (cat configure.log && exit 1)"
+ ]
+ , { "type": "foreach"
+ , "range": {"type": "var", "name": "cmake_targets"}
+ , "var": "target"
+ , "body":
+ { "type": "join"
+ , "separator": " "
+ , "$1":
+ { "type": "++"
+ , "$1":
+ [ {"type": "var", "name": "CMAKE_JOBS"}
+ , [ "${ROOT}/expand_exec TMPDIR LOCALBASE CC CXX CFLAGS CXXFLAGS LDFLAGS AR -- cmake --build build --target"
+ , { "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 --"
+ , "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": "TOOLCHAIN"}
+ , {"type": "var", "name": "source_dir"}
+ , {"type": "var", "name": "expand_exec"}
+ , { "type": "var"
+ , "name": "localbase_dir"
+ , "default": {"type": "empty_map"}
+ }
+ , {"type": "var", "name": "script"}
+ ]
+ }
+ , "cmd":
+ { "type": "++"
+ , "$1":
+ [ [ "/bin/sh"
+ , "run_cmake.sh"
+ , {"type": "var", "name": "CMAKE_SUBDIR"}
+ , {"type": "var", "name": "AR"}
+ ]
+ , {"type": "var", "name": "CMAKE_FLAGS"}
+ ]
+ }
+ , "out_dirs": ["install"]
+ , "env": {"type": "var", "name": "ENV"}
+ , "timeout scaling":
+ {"type": "var", "name": "TIMEOUT_SCALE", "default": 10.0}
+ }
+ }
+ }
+}