From bde0c5e59f2c1b1603a87a264c85878859b79a15 Mon Sep 17 00:00:00 2001 From: Tobias Heuer Date: Fri, 20 Jan 2023 16:06:02 +0100 Subject: [PATCH 1/4] add bash script to build Mt-KaHyPar --- build.sh | 26 ++++++++++++++++++++++++++ scripts/checkout_submodules.sh | 23 +++++++++++++++++++++++ scripts/submodule_heads.sh | 5 +++++ 3 files changed, 54 insertions(+) create mode 100755 build.sh create mode 100755 scripts/checkout_submodules.sh create mode 100755 scripts/submodule_heads.sh diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..78041e27c --- /dev/null +++ b/build.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +function get_num_cores { + if [[ $(uname) == "Linux" ]]; then grep -c ^processor /proc/cpuinfo; fi + if [[ $(uname) == "Darwin" ]]; then sysctl -n hw.ncpu; fi +} + +ROOT=${PWD} +if [ -d .git ]; then + # Mt-KaHyPar is build from a git repository + git submodule update --init; +else + # Mt-KaHyPar is build from a release archive + # which does not include submodules + ./scripts/checkout_submodules.sh +fi + +CMAKE_BINARY="/home/tobias/cmake-3.20.3-linux-x86_64/bin/cmake" +CMAKE_COMMANDS=$1 +if [ ! -f build/Makefile ]; then + mkdir -p build +fi + +cd build && $CMAKE_BINARY .. -DCMAKE_BUILD_TYPE=Release $CMAKE_COMMANDS && cd ${ROOT} +$CMAKE_BINARY --build build --parallel "$(get_num_cores)" --target MtKaHyPar + diff --git a/scripts/checkout_submodules.sh b/scripts/checkout_submodules.sh new file mode 100755 index 000000000..5f2065183 --- /dev/null +++ b/scripts/checkout_submodules.sh @@ -0,0 +1,23 @@ +#!/bin/bash +source scripts/submodule_heads.sh +ROOT=${PWD} + +# Initialize GOOGLETEST +[ ! "$(ls -A external_tools/googletest)" ] && +git clone https://github.com/google/googletest.git external_tools/googletest && +cd external_tools/googletest && git checkout ${GOOGLETEST_HEAD} && cd ${ROOT} + +# Initialize KAHYPAR +[ ! "$(ls -A external_tools/kahypar)" ] && +git clone https://github.com/SebastianSchlag/kahypar.git external_tools/kahypar && +cd external_tools/kahypar && git checkout ${KAHYPAR_HEAD} && cd ${ROOT} + +# Initialize WHFC +[ ! "$(ls -A external_tools/WHFC)" ] && +git clone https://github.com/larsgottesbueren/WHFC.git external_tools/WHFC && +cd external_tools/WHFC && git checkout ${WHFC_HEAD} && cd ${ROOT} + +# Initialize PYBIND11 +[ ! "$(ls -A python/pybind11)" ] && +git clone https://github.com/pybind/pybind11.git python/pybind11 && +cd python/pybind11 && git checkout ${PYBIND11_HEAD} && cd ${ROOT} diff --git a/scripts/submodule_heads.sh b/scripts/submodule_heads.sh new file mode 100755 index 000000000..11f09ddcf --- /dev/null +++ b/scripts/submodule_heads.sh @@ -0,0 +1,5 @@ +#!/bin/bash +export GOOGLETEST_HEAD="53495a2a7d6ba7e0691a7f3602e9a5324bba6e45" +export KAHYPAR_HEAD="e38d82c712b9c892b50f924c155290d6823642cb" +export WHFC_HEAD="a6c1a11cbc35f18f54ce2124ec1cd60c8249c28a" +export PYBIND11_HEAD="ee2b5226295d67b690faddd446a329bb2840a1a8" From 93a36c5cac06a0a581fd1c71e81c0bb50f2450dd Mon Sep 17 00:00:00 2001 From: Tobias Heuer Date: Fri, 20 Jan 2023 16:06:54 +0100 Subject: [PATCH 2/4] add script that generates bash script for manually checking out submodules --- .../generate_submodule_checkout_scripts.sh | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 scripts/generate_submodule_checkout_scripts.sh diff --git a/scripts/generate_submodule_checkout_scripts.sh b/scripts/generate_submodule_checkout_scripts.sh new file mode 100755 index 000000000..7cff4a3ea --- /dev/null +++ b/scripts/generate_submodule_checkout_scripts.sh @@ -0,0 +1,31 @@ +#!/bin/bash +SUBMODULE_FILE=".gitmodules" + +IFS=$'\n' +submodule_dirs=( $(grep path $SUBMODULE_FILE | cut -d'=' -f2 | cut -d' ' -f2) ) +module_names=( $(grep path $SUBMODULE_FILE | cut -d'=' -f2 | cut -d' ' -f2 | cut -d"/" -f2 | awk '{print toupper($0)}') ) +git_repos=( $(grep url $SUBMODULE_FILE | cut -d'=' -f2 | cut -d' ' -f2) ) + +# Generate script exporting commit hashes of submodules as environment variable +echo "#!/bin/bash" > scripts/submodule_heads.sh +for i in "${!submodule_dirs[@]}"; do + echo "export ${module_names[$i]}_HEAD=\"$(cat .git/modules/${submodule_dirs[$i]}/HEAD)\"" >> scripts/submodule_heads.sh +done + +# Generate script that checkouts submodules +echo "#!/bin/bash" > scripts/checkout_submodules.sh +echo "source scripts/submodule_heads.sh" >> scripts/checkout_submodules.sh +echo "ROOT=\${PWD}" >> scripts/checkout_submodules.sh +for i in "${!submodule_dirs[@]}"; do + echo "" >> scripts/checkout_submodules.sh + echo "# Initialize ${module_names[$i]}" >> scripts/checkout_submodules.sh + echo "[ ! \"\$(ls -A ${submodule_dirs[$i]})\" ] &&" >> scripts/checkout_submodules.sh + echo "git clone ${git_repos[$i]} ${submodule_dirs[$i]} &&" >> scripts/checkout_submodules.sh + echo "cd ${submodule_dirs[$i]} && git checkout \${${module_names[$i]}_HEAD} && cd \${ROOT}" >> scripts/checkout_submodules.sh +done + +chmod u+x scripts/submodule_heads.sh +chmod u+x scripts/checkout_submodules.sh + + + From 39abbd680874ed40ce68d897561befef003c1393 Mon Sep 17 00:00:00 2001 From: Tobias Heuer Date: Fri, 20 Jan 2023 16:18:18 +0100 Subject: [PATCH 3/4] update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f39a9a092..57e7dd3fd 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,8 @@ The following command will install most of the required dependencies on a Ubuntu Building Mt-KaHyPar ----------- +To build Mt-KaHyPar, you can run the `build.sh` script (creates a `build` folder) or use the following commands: + 1. Clone the repository including submodules: ```git clone --depth=1 --recursive git@github.com:kahypar/mt-kahypar.git``` From 21d46b61a39247c4093f5b7d279d3300347f3e2e Mon Sep 17 00:00:00 2001 From: Tobias Heuer Date: Fri, 20 Jan 2023 16:20:57 +0100 Subject: [PATCH 4/4] minor --- build.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/build.sh b/build.sh index 78041e27c..9db75cfcc 100755 --- a/build.sh +++ b/build.sh @@ -15,12 +15,11 @@ else ./scripts/checkout_submodules.sh fi -CMAKE_BINARY="/home/tobias/cmake-3.20.3-linux-x86_64/bin/cmake" CMAKE_COMMANDS=$1 if [ ! -f build/Makefile ]; then mkdir -p build fi -cd build && $CMAKE_BINARY .. -DCMAKE_BUILD_TYPE=Release $CMAKE_COMMANDS && cd ${ROOT} -$CMAKE_BINARY --build build --parallel "$(get_num_cores)" --target MtKaHyPar +cd build && cmake .. -DCMAKE_BUILD_TYPE=Release $CMAKE_COMMANDS && cd ${ROOT} +cmake --build build --parallel "$(get_num_cores)" --target MtKaHyPar