set -e
set -u
set -f
_program_path_find()
{
if [ "${_program_fattening_program_path+set}" = 'set' ]; then
printf '%s\n' "$_program_fattening_program_path"
elif [ "${0%/*}" = "$0" ]; then
if [ -r "$0" ]; then
pwd -P
else
printf '\n'
fi
else
_program_path_find_parentPath()
{
parentPath="${scriptPath%/*}"
if [ -z "$parentPath" ]; then
parentPath='/'
fi
cd "$parentPath" 1>/dev/null
}
if [ "${CDPATH+set}" = 'set' ]; then
unset CDPATH
fi
if command -v realpath 1>/dev/null 2>/dev/null; then
(
scriptPath="$(realpath "$0")"
_program_path_find_parentPath
pwd -P
)
elif command -v readlink 1>/dev/null 2>/dev/null; then
(
scriptPath="$0"
while [ -L "$scriptPath" ]
do
_program_path_find_parentPath
scriptPath="$(readlink "$scriptPath")"
done
_program_path_find_parentPath
pwd -P
)
else
(
scriptPath="$0"
_program_path_find_parentPath
pwd -P
)
fi
fi
}
build_under_cargo_fail()
{
local message="$1"
printf 'build-under-cargo:FAIL:%s\n' "$message" 1>&2
exit 1
}
_build_under_cargo_reRunIfChanged_print()
{
local folderOrFilePath="$1"
printf 'cargo:rerun-if-changed=%s\n' "$folderOrFilePath"
}
_build_under_cargo_reRunIfChanged()
{
local folderOrFilePath="$1"
case "$folderOrFilePath" in
*/temporary/*)
return 0
;;
esac
if [ -f "$folderOrFilePath" ]; then
_build_under_cargo_reRunIfChanged_print "$folderOrFilePath"
elif [ -d "$folderOrFilePath" ]; then
_build_under_cargo_reRunIfChanged_print "$folderOrFilePath"
local child
set +f
for child in "$folderOrFilePath"/*
do
set -f
_build_under_cargo_reRunIfChanged "$child"
done
set f
fi
}
build_under_cargo_reRunIfAnyChanged()
{
cd "$homeFolder" 1>/dev/null 2>/dev/null
local folderOrFilePath
for folderOrFilePath in "$@"
do
if [ -e "$folderOrFilePath" ]; then
_build_under_cargo_reRunIfChanged "$folderOrFilePath"
else
_build_under_cargo_reRunIfChanged_print "$folderOrFilePath"
fi
done
cd - 1>/dev/null 2>/dev/null
}
build_under_cargo_determineLibfabricRootFolderPath()
{
libfabricRootFolderPath="$homeFolder"/compile-libfabric.conf.d/temporary
if [ ! -d "$libfabricRootFolderPath" ]; then
needsCompilation='true'
fi
}
build_under_cargo_compileIfRequired()
{
if $needsCompilation; then
"$homeFolder"/tools/compile-libfabric
fi
}
build_under_cargo_generatingRustBindingsToLibfabricIfRquired()
{
local rebuildBindings='false'
if [ ! -d "$rustBindingsFolderPath" ]; then
rebuildBindings='true'
fi
if $rebuildBindings; then
rm -rf "$rustBindingsFolderPath"
"$homeFolder"/tools/bindgen-wrapper/bindgen-wrapper
fi
}
build_under_cargo_copyHeadersToKnownLocationForEmbeddedCCodeInRust()
{
rm -rf "$copyHeadersToKnownLocationForEmbeddedCCodeInRustIncludeFolderPath"
mkdir -m 0700 -p "$copyHeadersToKnownLocationForEmbeddedCCodeInRustIncludeFolderPath"
rsync --quiet --archive "$homeFolder"/tools/bindgen-wrapper/temporary/includes/ "$copyHeadersToKnownLocationForEmbeddedCCodeInRustIncludeFolderPath"/
}
build_under_cargo_outputCargoKeyValuePairs()
{
printf 'cargo:rustc-link-lib=static-nobundle=libfabfic\n'
printf 'cargo:rustc-link-search=native=%s\n' "$libfabricLibFolderPath"
printf 'cargo:root=%s\n' "$libfabricRootFolderPath"
printf 'cargo:include=%s\n' "$libfabricIncludeFolderPath"
printf 'cargo:libdir=%s\n' "$libfabricLibFolderPath"
}
build_under_cargo_steps()
{
local libfabricRootFolderPath
local needsCompilation='false'
build_under_cargo_determineLibfabricRootFolderPath
local libfabricLibFolderPath="$libfabricRootFolderPath"/usr/lib
local libfabricIncludeFolderPath="$libfabricRootFolderPath"/usr/include
local srcFolderPath="$homeFolder"/src
local rustBindingsFolderPath="$srcFolderPath"/bindgen
local copyHeadersToKnownLocationForEmbeddedCCodeInRustIncludeFolderPath="$srcFolderPath"/include
build_under_cargo_compileIfRequired
build_under_cargo_copyHeadersToKnownLocationForEmbeddedCCodeInRust
build_under_cargo_generatingRustBindingsToLibfabricIfRquired
build_under_cargo_outputCargoKeyValuePairs
}
build_under_cargo_main()
{
case "$#" in
0)
:
;;
1)
case "$1" in
-h|--help)
printf './build\n'
printf './build -h|--help\n'
exit 0
;;
*)
build_under_cargo_fail "Does not take any arguments"
;;
esac
;;
*)
build_under_cargo_fail "Does not take any arguments"
;;
esac
local programPath="$(_program_path_find)"
cd "$programPath"/.. 1>/dev/null 2>/dev/null
local homeFolder="$(pwd)"
cd - 1>/dev/null 2>/dev/null
if [ -z "{CARGO_MANIFEST_DIR+defined}" ]; then
:
else
export CARGO_MANIFEST_DIR="$homeFolder"
printf 'build-under-cargo:%s\n' "Whilst this script is designed to be run under cargo, it can run independently. We're setting CARGO_MANIFEST_DIR to '$CARGO_MANIFEST_DIR'" 1>&2
fi
build_under_cargo_steps
}
build_under_cargo_main "$@"