From f28e7f55b6107939027898543856c122c2e8e645 Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 11:23:45 +0000 Subject: [PATCH 01/10] add clean.sh --- clean.sh | 33 ++++++++++++++++++++++ etc/ci/get_submodules_hash.sh | 2 +- etc/{ci => scripts}/get_submodule_paths.sh | 2 +- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100755 clean.sh rename etc/{ci => scripts}/get_submodule_paths.sh (81%) diff --git a/clean.sh b/clean.sh new file mode 100755 index 0000000000..6bf154763e --- /dev/null +++ b/clean.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# vim: cc=80 +cd $(dirname "$0") + +# update, initialise, and sync all submodules to ensure that changes are +# reflected here. `git submodule sync` means change where the submodule points +# to match .gitmodules, should it have changed (in particular, from a dev fork +# to upstream). + +echo "=== Updating and resetting submodules ===" 1>&2 + +git submodule sync --recursive +git submodule update --init --recursive + +echo "=== Cleaning submodule build files ===" 1>&2 + +bash ./etc/scripts/get_submodule_paths.sh | + { + while read -r submodule_path; do + cd "$submodule_path" + git clean -dfx . + cd - &> /dev/null + done +} + +cd $(dirname "$0") + +echo "=== Cargo clean ===" 1>&2 +echo "" 1>&2 + +# clean our stuff +cargo clean + diff --git a/etc/ci/get_submodules_hash.sh b/etc/ci/get_submodules_hash.sh index fa5aed8526..6c53d8a0be 100755 --- a/etc/ci/get_submodules_hash.sh +++ b/etc/ci/get_submodules_hash.sh @@ -14,7 +14,7 @@ cd $(git rev-parse --show-toplevel) git submodule update --init --recursive 1>&2 2>/dev/null { - for module in $(sh "$CI_SCRIPTS_DIR/get_submodule_paths.sh") + for module in $(sh "$CI_SCRIPTS_DIR/../scripts/get_submodule_paths.sh") do git rev-parse "HEAD:$module" >> $SHAS done; diff --git a/etc/ci/get_submodule_paths.sh b/etc/scripts/get_submodule_paths.sh similarity index 81% rename from etc/ci/get_submodule_paths.sh rename to etc/scripts/get_submodule_paths.sh index b796b17481..a452ad591a 100755 --- a/etc/ci/get_submodule_paths.sh +++ b/etc/scripts/get_submodule_paths.sh @@ -6,7 +6,7 @@ # these paths are relative to the git repository. # go to top level of git repo -cd $(git rev-parse --show-toplevel) +cd $(git rev-parse --show-superproject-working-tree --show-toplevel | head -n 1) # https://stackoverflow.com/questions/12641469/list-submodules-in-a-git-repository git config --file .gitmodules --get-regexp path | awk '{print $2}' From 873d0d4a13beefcbd432bd895815a58c802f3e89 Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 14:20:47 +0000 Subject: [PATCH 02/10] fix typos in build.rs files --- solvers/chuffed/build.rs | 3 ++- solvers/minion/build.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/solvers/chuffed/build.rs b/solvers/chuffed/build.rs index a20e120d83..03c76f59a8 100644 --- a/solvers/chuffed/build.rs +++ b/solvers/chuffed/build.rs @@ -8,8 +8,9 @@ use std::path::PathBuf; use std::process::Command; fn main() { - println!("cargo:rustc-rerun-if-changed=vendor"); + println!("cargo:rerun-if-changed=vendor"); println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=build.sh"); // must be ./ to be recognised as relative path // from project root diff --git a/solvers/minion/build.rs b/solvers/minion/build.rs index b43de719dc..ec950e58e1 100755 --- a/solvers/minion/build.rs +++ b/solvers/minion/build.rs @@ -11,8 +11,9 @@ use std::path::PathBuf; use std::process::Command; fn main() { - println!("cargo:rustc-rerun-if-changed=vendor"); + println!("cargo:rerun-if-changed=vendor"); println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=build.sh"); // must be ./ to be recognised as relative path // from project root From e4b0bcd0eaa7d2c6293a12d55dd35a48178c4f56 Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 14:31:22 +0000 Subject: [PATCH 03/10] chuffed: use $OUT_DIR for build artifacts --- solvers/chuffed/build.rs | 9 ++++++++- solvers/chuffed/build.sh | 14 ++++++++++---- solvers/chuffed/clean.sh | 6 ------ 3 files changed, 18 insertions(+), 11 deletions(-) delete mode 100755 solvers/chuffed/clean.sh diff --git a/solvers/chuffed/build.rs b/solvers/chuffed/build.rs index 03c76f59a8..9520250f39 100644 --- a/solvers/chuffed/build.rs +++ b/solvers/chuffed/build.rs @@ -8,16 +8,23 @@ use std::path::PathBuf; use std::process::Command; fn main() { + let out_dir = env::var("OUT_DIR").unwrap(); + println!("cargo:rerun-if-changed=vendor"); + println!("cargo:rerun-if-changed=wrapper.h"); + println!("cargo:rerun-if-changed=wrapper.cpp"); + println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=build.sh"); // must be ./ to be recognised as relative path // from project root println!("cargo:rustc-link-search=all=./solvers/chuffed/vendor/build/"); + println!("cargo:rustc-link-search=all=./solvers/chuffed/"); + println!("cargo:rustc-link-search=all={}/", out_dir); + println!("cargo:rustc-link-lib=static=chuffed"); println!("cargo:rustc-link-lib=static=chuffed_fzn"); - println!("cargo:rustc-link-search=all=./solvers/chuffed/"); println!("cargo:rustc-link-lib=static=wrapper"); // also need to (dynamically) link to c++ stdlib diff --git a/solvers/chuffed/build.sh b/solvers/chuffed/build.sh index 6615852803..b41f5486a0 100644 --- a/solvers/chuffed/build.sh +++ b/solvers/chuffed/build.sh @@ -1,17 +1,23 @@ #!/bin/bash -SCRIPT_DIR=$(dirname "$0") +SCRIPT_DIR=$(realpath $(dirname "$0")) git submodule init git submodule update -cd "$SCRIPT_DIR" || exit +cd "$SCRIPT_DIR" || exit 1 + +if ! [[ -v OUT_DIR ]]; then + echo "OUT_DIR env variable does not exist - did you run this script through cargo build?" + exit 1 +fi echo "------ BUILDING ------" -cd vendor || exit +cd vendor || exit 1 cmake -B build -S . cmake --build build cd .. # Build wrapper.cpp as static library -c++ -c wrapper.cpp -Ivendor --std=c++11 +cd "$OUT_DIR" || exit 1 +c++ -c "$SCRIPT_DIR/wrapper.cpp" -I"$SCRIPT_DIR/vendor" --std=c++11 ar rvs libwrapper.a wrapper.o diff --git a/solvers/chuffed/clean.sh b/solvers/chuffed/clean.sh deleted file mode 100755 index 2873cb0737..0000000000 --- a/solvers/chuffed/clean.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -cargo clean -rm -rf vendor/build -rm libwrapper.a -rm wrapper.o From 276a261e4ccffd9f255065d1157f1e410ab1025c Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 14:57:19 +0000 Subject: [PATCH 04/10] sync submodules in build scripts --- solvers/chuffed/build.sh | 7 +++++-- solvers/minion/build.sh | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/solvers/chuffed/build.sh b/solvers/chuffed/build.sh index b41f5486a0..cd55cb71ca 100644 --- a/solvers/chuffed/build.sh +++ b/solvers/chuffed/build.sh @@ -2,8 +2,11 @@ SCRIPT_DIR=$(realpath $(dirname "$0")) -git submodule init -git submodule update + +git submodule init -- vendor +git submodule sync -- vendor +git submodule update --init --recursive -- vendor + cd "$SCRIPT_DIR" || exit 1 if ! [[ -v OUT_DIR ]]; then diff --git a/solvers/minion/build.sh b/solvers/minion/build.sh index 2bac9d9ef8..7fc4389311 100755 --- a/solvers/minion/build.sh +++ b/solvers/minion/build.sh @@ -2,8 +2,10 @@ SCRIPT_DIR=$(dirname "$0") -git submodule init -git submodule update +git submodule init -- vendor +git submodule sync -- vendor +git submodule update --init --recursive -- vendor + cd "$SCRIPT_DIR" echo "------ CONFIGURE STEP ------" From 9db3a5907461ef42859ecce31da7aaf4dc1cdc7c Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 15:03:15 +0000 Subject: [PATCH 05/10] minion_rs: always run ./configure.py when rebuilding --- solvers/minion/build.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/solvers/minion/build.sh b/solvers/minion/build.sh index 7fc4389311..9f345ef87b 100755 --- a/solvers/minion/build.sh +++ b/solvers/minion/build.sh @@ -10,14 +10,9 @@ cd "$SCRIPT_DIR" echo "------ CONFIGURE STEP ------" -if [ -d vendor/build ]; then - echo "vendor/build already exists; skipping" - echo "if you need to reconfigure minion (such as after an update), delete this directory!" -else - mkdir -p vendor/build - cd vendor/build - python3 ../configure.py --lib --quick -fi +mkdir -p vendor/build +cd vendor/build +python3 ../configure.py --lib --quick echo "------ BUILD STEP ------" cd "$SCRIPT_DIR" From 2275ba37527c9ce10d668b5426c8f2920919c49a Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 15:42:02 +0000 Subject: [PATCH 06/10] build C++ inside OUT_DIR so it can be cargo cleaned --- solvers/chuffed/build.rs | 8 +++----- solvers/chuffed/build.sh | 14 +++++++------- solvers/minion/build.rs | 9 +++++---- solvers/minion/build.sh | 17 ++++++++++------- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/solvers/chuffed/build.rs b/solvers/chuffed/build.rs index 9520250f39..d0006c0a6e 100644 --- a/solvers/chuffed/build.rs +++ b/solvers/chuffed/build.rs @@ -17,11 +17,8 @@ fn main() { println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=build.sh"); - // must be ./ to be recognised as relative path - // from project root - println!("cargo:rustc-link-search=all=./solvers/chuffed/vendor/build/"); - println!("cargo:rustc-link-search=all=./solvers/chuffed/"); println!("cargo:rustc-link-search=all={}/", out_dir); + println!("cargo:rustc-link-search=all={}/build", out_dir); println!("cargo:rustc-link-lib=static=chuffed"); println!("cargo:rustc-link-lib=static=chuffed_fzn"); @@ -60,6 +57,7 @@ fn build() { } fn bind() { + let out_dir = env::var("OUT_DIR").unwrap(); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for // the resulting bindings. @@ -86,7 +84,7 @@ fn bind() { .allowlist_function("p_setcallback") .allowlist_function("p_print") .allowlist_function("branch_IntVar") - .clang_arg("-Ivendor/build") // generated from configure.py + .clang_arg(format!("-I{}/build", out_dir)) .clang_arg("-Ivendor") .clang_arg(r"--std=gnu++11") .clang_arg(r"-xc++") diff --git a/solvers/chuffed/build.sh b/solvers/chuffed/build.sh index cd55cb71ca..197e5b65fb 100644 --- a/solvers/chuffed/build.sh +++ b/solvers/chuffed/build.sh @@ -1,13 +1,12 @@ #!/bin/bash -SCRIPT_DIR=$(realpath $(dirname "$0")) - +SCRIPT_DIR="$(realpath "$(dirname "$0")")" +cd "$SCRIPT_DIR" git submodule init -- vendor git submodule sync -- vendor git submodule update --init --recursive -- vendor -cd "$SCRIPT_DIR" || exit 1 if ! [[ -v OUT_DIR ]]; then echo "OUT_DIR env variable does not exist - did you run this script through cargo build?" @@ -15,10 +14,11 @@ if ! [[ -v OUT_DIR ]]; then fi echo "------ BUILDING ------" -cd vendor || exit 1 -cmake -B build -S . -cmake --build build -cd .. + +mkdir -p "$OUT_DIR/build" +cd "$OUT_DIR/build" +cmake -B . -S "$SCRIPT_DIR/vendor" +cmake --build . # Build wrapper.cpp as static library cd "$OUT_DIR" || exit 1 diff --git a/solvers/minion/build.rs b/solvers/minion/build.rs index ec950e58e1..700704c829 100755 --- a/solvers/minion/build.rs +++ b/solvers/minion/build.rs @@ -11,13 +11,13 @@ use std::path::PathBuf; use std::process::Command; fn main() { + let out_dir = env::var("OUT_DIR").unwrap(); + println!("cargo:rerun-if-changed=vendor"); println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=build.sh"); - // must be ./ to be recognised as relative path - // from project root - println!("cargo:rustc-link-search=all=./solvers/minion/vendor/build/"); + println!("cargo:rustc-link-search=all={}/build", out_dir); println!("cargo:rustc-link-lib=static=minion"); // also need to (dynamically) link to c++ stdlib @@ -55,6 +55,7 @@ fn build() { } fn bind() { + let out_dir = env::var("OUT_DIR").unwrap(); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for // the resulting bindings. @@ -95,7 +96,7 @@ fn bind() { .allowlist_function("vec_int_new") .allowlist_function("vec_int_push_back") .allowlist_function("vec_int_free") - .clang_arg("-Ivendor/build/src/") // generated from configure.py + .clang_arg(format!("-I{}/build/src/", out_dir)) // generated from configure.py .clang_arg("-Ivendor/minion/") .clang_arg("-DLIBMINION") .clang_arg(r"--std=gnu++11") diff --git a/solvers/minion/build.sh b/solvers/minion/build.sh index 9f345ef87b..028ae21028 100755 --- a/solvers/minion/build.sh +++ b/solvers/minion/build.sh @@ -1,20 +1,23 @@ #!/bin/bash -SCRIPT_DIR=$(dirname "$0") +SCRIPT_DIR="$(realpath "$(dirname "$0")")" +cd "$SCRIPT_DIR" git submodule init -- vendor git submodule sync -- vendor git submodule update --init --recursive -- vendor -cd "$SCRIPT_DIR" +if ! [[ -v OUT_DIR ]]; then + echo "OUT_DIR env variable does not exist - did you run this script through cargo build?" + exit 1 +fi echo "------ CONFIGURE STEP ------" -mkdir -p vendor/build -cd vendor/build -python3 ../configure.py --lib --quick +mkdir -p "$OUT_DIR/build" +cd "$OUT_DIR/build" +python3 "$SCRIPT_DIR/vendor/configure.py" --lib --quick echo "------ BUILD STEP ------" -cd "$SCRIPT_DIR" -cd vendor/build +cd "$OUT_DIR/build" make From 03b98fd1d26135e95fffce1896ea2719e5239442 Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 15:58:01 +0000 Subject: [PATCH 07/10] replace realpath with readlink in build.rs files for portability --- solvers/chuffed/build.sh | 4 ++-- solvers/minion/build.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/solvers/chuffed/build.sh b/solvers/chuffed/build.sh index 197e5b65fb..8f3faddacb 100644 --- a/solvers/chuffed/build.sh +++ b/solvers/chuffed/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -SCRIPT_DIR="$(realpath "$(dirname "$0")")" +SCRIPT_DIR="$(readlink -f "$(dirname "$0")")" cd "$SCRIPT_DIR" git submodule init -- vendor @@ -8,7 +8,7 @@ git submodule sync -- vendor git submodule update --init --recursive -- vendor -if ! [[ -v OUT_DIR ]]; then +if [[ -z "$OUT_DIR" ]]; then echo "OUT_DIR env variable does not exist - did you run this script through cargo build?" exit 1 fi diff --git a/solvers/minion/build.sh b/solvers/minion/build.sh index 028ae21028..dab86d3105 100755 --- a/solvers/minion/build.sh +++ b/solvers/minion/build.sh @@ -1,13 +1,13 @@ #!/bin/bash -SCRIPT_DIR="$(realpath "$(dirname "$0")")" +SCRIPT_DIR="$(readlink -f "$(dirname "$0")")" cd "$SCRIPT_DIR" git submodule init -- vendor git submodule sync -- vendor git submodule update --init --recursive -- vendor -if ! [[ -v OUT_DIR ]]; then +if [[ -z "$OUT_DIR" ]]; then echo "OUT_DIR env variable does not exist - did you run this script through cargo build?" exit 1 fi From 6cb48add1f20945e768a0b06c8b8245dccb00b9b Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Thu, 23 Nov 2023 16:06:25 +0000 Subject: [PATCH 08/10] rename minion submodule --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index a4d5857e52..f1230f2f98 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ -[submodule "minion-bindings/vendor"] +[submodule "solvers/minion/vendor"] path = solvers/minion/vendor url = https://github.com/minion/minion ignore = dirty From dd7d10ca7899ecab37942aab30c8cbeea64a09fa Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Fri, 24 Nov 2023 10:53:00 +0000 Subject: [PATCH 09/10] refactor scripts --- .github/workflows/code-coverage-deploy.yml | 6 ++--- .github/workflows/code-coverage.yml | 2 +- .github/workflows/docs.yml | 2 +- {etc => tools}/ci/genindex.py | 0 {etc => tools}/ci/get_submodules_hash.sh | 0 {etc/scripts => tools}/gen_coverage.sh | 0 {etc/scripts => tools}/gen_coverage_all.sh | 2 +- {etc/scripts => tools}/gen_docs.sh | 0 .../plumbing}/get_submodule_paths.sh | 0 clean.sh => tools/update-submodules.sh | 23 ++++++++----------- 10 files changed, 15 insertions(+), 20 deletions(-) rename {etc => tools}/ci/genindex.py (100%) rename {etc => tools}/ci/get_submodules_hash.sh (100%) rename {etc/scripts => tools}/gen_coverage.sh (100%) rename {etc/scripts => tools}/gen_coverage_all.sh (94%) rename {etc/scripts => tools}/gen_docs.sh (100%) rename {etc/scripts => tools/plumbing}/get_submodule_paths.sh (100%) rename clean.sh => tools/update-submodules.sh (71%) diff --git a/.github/workflows/code-coverage-deploy.yml b/.github/workflows/code-coverage-deploy.yml index d70aacf8ff..3a0712bb9b 100644 --- a/.github/workflows/code-coverage-deploy.yml +++ b/.github/workflows/code-coverage-deploy.yml @@ -118,9 +118,9 @@ jobs: - name: "Generate indexes" run: | - ./etc/ci/genindex.py pages/coverage/${{ steps.sha.outputs.result }} - ./etc/ci/genindex.py pages/coverage/main - ./etc/ci/genindex.py pages/coverage/ + ./tools/ci/genindex.py pages/coverage/${{ steps.sha.outputs.result }} + ./tools/ci/genindex.py pages/coverage/main + ./tools/ci/genindex.py pages/coverage/ - uses: JamesIves/github-pages-deploy-action@v4 with: diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index b1ad8ff3e1..49f259d3b2 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -63,7 +63,7 @@ jobs: - name: Generate coverage reports working-directory: . run: | - ./etc/scripts/gen_coverage_all.sh + ./tools/gen_coverage_all.sh - name: Move all html to correct folders for deployment run: | diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 1bd4324977..80b3e7625c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -49,7 +49,7 @@ jobs: - name: Generate documentation working-directory: . run: | - ./etc/scripts/gen_docs.sh + ./tools/gen_docs.sh - name: Move all html to correct folders for deployment run: | diff --git a/etc/ci/genindex.py b/tools/ci/genindex.py similarity index 100% rename from etc/ci/genindex.py rename to tools/ci/genindex.py diff --git a/etc/ci/get_submodules_hash.sh b/tools/ci/get_submodules_hash.sh similarity index 100% rename from etc/ci/get_submodules_hash.sh rename to tools/ci/get_submodules_hash.sh diff --git a/etc/scripts/gen_coverage.sh b/tools/gen_coverage.sh similarity index 100% rename from etc/scripts/gen_coverage.sh rename to tools/gen_coverage.sh diff --git a/etc/scripts/gen_coverage_all.sh b/tools/gen_coverage_all.sh similarity index 94% rename from etc/scripts/gen_coverage_all.sh rename to tools/gen_coverage_all.sh index 3e86503c43..bd87428de6 100755 --- a/etc/scripts/gen_coverage_all.sh +++ b/tools/gen_coverage_all.sh @@ -1,7 +1,7 @@ # !/bin/bash # generate coverage for all crates in the workspace -PATH_TO_GEN_COV="/etc/scripts/gen_coverage.sh" +PATH_TO_GEN_COV="tools/gen_coverage.sh" echo_err () { echo "$@" 1>&2 } diff --git a/etc/scripts/gen_docs.sh b/tools/gen_docs.sh similarity index 100% rename from etc/scripts/gen_docs.sh rename to tools/gen_docs.sh diff --git a/etc/scripts/get_submodule_paths.sh b/tools/plumbing/get_submodule_paths.sh similarity index 100% rename from etc/scripts/get_submodule_paths.sh rename to tools/plumbing/get_submodule_paths.sh diff --git a/clean.sh b/tools/update-submodules.sh similarity index 71% rename from clean.sh rename to tools/update-submodules.sh index 6bf154763e..68e9f2235e 100755 --- a/clean.sh +++ b/tools/update-submodules.sh @@ -1,20 +1,17 @@ #!/bin/bash # vim: cc=80 -cd $(dirname "$0") + +# root of project +cd $(dirname "$0")/.. # update, initialise, and sync all submodules to ensure that changes are # reflected here. `git submodule sync` means change where the submodule points # to match .gitmodules, should it have changed (in particular, from a dev fork # to upstream). -echo "=== Updating and resetting submodules ===" 1>&2 - -git submodule sync --recursive -git submodule update --init --recursive - -echo "=== Cleaning submodule build files ===" 1>&2 +echo "=== Cleaning submodules ===" 1>&2 -bash ./etc/scripts/get_submodule_paths.sh | +bash ./tools/plumbing/get_submodule_paths.sh | { while read -r submodule_path; do cd "$submodule_path" @@ -23,11 +20,9 @@ bash ./etc/scripts/get_submodule_paths.sh | done } -cd $(dirname "$0") - -echo "=== Cargo clean ===" 1>&2 -echo "" 1>&2 +echo "=== Updating and resetting submodules ===" 1>&2 -# clean our stuff -cargo clean +git submodule init --recursive +git submodule sync --recursive +git submodule update --init --recursive From 6c18e467b7ab9cf5d8a31854d75f5993b3e0417e Mon Sep 17 00:00:00 2001 From: Niklas Dewally Date: Fri, 24 Nov 2023 10:58:25 +0000 Subject: [PATCH 10/10] Add contributors guide to the readme --- readme.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 61f6d944f6..85c8c4b2eb 100644 --- a/readme.md +++ b/readme.md @@ -1 +1,20 @@ -Stay tuned! +# Conjure-Oxide + +This repository contains the in progress Conjure Oxide constraints modelling +tool, and it's dependencies. + +This repository hosts the following projects: + +* [Conjure Oxide](https://github.com/conjure-cp/conjure-oxide/tree/main/conjure_oxide) +* [`minion_rs` - Rust bindings to Minion](https://github.com/conjure-cp/conjure-oxide/tree/main/solvers/minion) +* [`chuffed_rs` - Rust bindings to Chuffed](https://github.com/conjure-cp/conjure-oxide/tree/main/solvers/chuffed) + +This project is being produced by staff and students of University of St +Andrews, and is licenced under the [MPL 2.0](./LICENCE). + +## Contributing + +See the [Contributors Guide](https://github.com/conjure-cp/conjure-oxide/wiki/Contributing). + +