[hypnos] 重构 home 下 dotfiles 独立目录结构
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
cmake-llvm () {
|
||||
local cmake_args=("-G" "Ninja")
|
||||
|
||||
# find cmake root dir
|
||||
# if defined PROJECT or P, use it as project root
|
||||
# if within git (git rev-parse --is-inside-work-tree), use git rev-parse --show-toplevel
|
||||
# if setted LLVM_ROOT, use it
|
||||
# default "../llvm", if not exist, error
|
||||
local llvm_root=".."
|
||||
if [ -n "${PROJECT}" ]; then
|
||||
llvm_root="${PROJECT}"
|
||||
elif [ -n "${P}" ]; then
|
||||
llvm_root="${P}"
|
||||
elif git rev-parse --is-inside-work-tree &> /dev/null; then
|
||||
llvm_root=$(git rev-parse --show-toplevel)
|
||||
elif [ -n "${LLVM_ROOT}" ]; then
|
||||
llvm_root="${LLVM_ROOT}"
|
||||
fi
|
||||
if [ ! -d "${llvm_root}/llvm" ]; then
|
||||
echo "Error: not inside a llvm directory"
|
||||
return 1
|
||||
fi
|
||||
cmake_args+=("${llvm_root}/llvm")
|
||||
|
||||
# Set build_type from arg[1]
|
||||
local build_type="${1}"
|
||||
if [ -z "${build_type}" ]; then
|
||||
echo "Error: build_type is empty"
|
||||
return 1
|
||||
fi
|
||||
cmake_args+=("-DCMAKE_BUILD_TYPE=${build_type}")
|
||||
|
||||
# check LLVM_PROJECTS env
|
||||
if [ -z "${LLVM_PROJECTS}" ]; then
|
||||
echo "Error: LLVM_PROJECTS env is not set"
|
||||
return 1
|
||||
fi
|
||||
cmake_args+=("-DLLVM_ENABLE_PROJECTS=${LLVM_PROJECTS}")
|
||||
|
||||
# check LLVM_TARGETS
|
||||
if [ -z "${LLVM_TARGETS}" ]; then
|
||||
echo "Error: LLVM_TARGETS env is not set"
|
||||
return 1
|
||||
fi
|
||||
cmake_args+=("-DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS}")
|
||||
|
||||
# if setted LLVM_COMPILER, use it, else default clang
|
||||
if [ -z "${LLVM_COMPILER}" ]; then
|
||||
# if setted CMAKE_C_COMPILER or CMAKE_CXX_COMPILER, use it, else default clang
|
||||
cmake_args+=(
|
||||
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER:-clang}"
|
||||
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++}"
|
||||
)
|
||||
elif [ "${LLVM_COMPILER}" == "gcc" ]; then
|
||||
cmake_args+=("-DCMAKE_C_COMPILER=gcc" "-DCMAKE_CXX_COMPILER=g++")
|
||||
elif [ "${LLVM_COMPILER}" == "clang" ]; then
|
||||
cmake_args+=("-DCMAKE_C_COMPILER=clang" "-DCMAKE_CXX_COMPILER=clang++")
|
||||
else
|
||||
echo "Error: LLVM_COMPILER is invalid"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# if not setted LLVM_NO_*, use default optimized options
|
||||
if [ -z "${LLVM_NO_SHARED}" ]; then
|
||||
cmake_args+=("-DBUILD_SHARED_LIBS=On")
|
||||
fi
|
||||
if [ -z "${LLVM_APPEND_VC_REV}"]; then
|
||||
cmake_args+=("-DLLVM_APPEND_VC_REV=Off")
|
||||
fi
|
||||
if [ -z "${LLVM_NO_LLD}" ]; then
|
||||
cmake_args+=("-DLLVM_ENABLE_LLD=On")
|
||||
fi
|
||||
if [ -z "${LLVM_NO_OPT_TABLEGEN}" ]; then
|
||||
cmake_args+=("-DLLVM_OPTIMIZED_TABLEGEN=On")
|
||||
fi
|
||||
if [ -z "${LLVM_NO_SPLIT_DWARF}" ]; then
|
||||
cmake_args+=("-DLLVM_USE_SPLIT_DWARF=On")
|
||||
fi
|
||||
|
||||
cmake_args+=("-DCMAKE_EXPORT_COMPILE_COMMANDS=On")
|
||||
|
||||
# append args[2:] to cmake_args
|
||||
cmake_args+=("${@:2}")
|
||||
|
||||
# print cmake args, one for each line
|
||||
# and ask for confirmation
|
||||
for arg in "${cmake_args[@]}"; do
|
||||
echo "${arg}"
|
||||
done
|
||||
read "?Press enter to continue?"
|
||||
|
||||
# run cmake with cmake_args
|
||||
cmake "${cmake_args[@]}"
|
||||
}
|
||||
|
||||
git-local-exclude () {
|
||||
local file="${1}"
|
||||
|
||||
# if file is empty, exit
|
||||
if [ -z "${file}" ]; then
|
||||
echo "Error: file is empty"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# if .git/info/exclude not exist, exit
|
||||
if [ ! -f .git/info/exclude ]; then
|
||||
echo "warning: .git/info/exclude not exist, maybe in other worktree?"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "${file}" >> .git/info/exclude
|
||||
}
|
||||
|
||||
generate-local-dir () {
|
||||
if git rev-parse --is-inside-work-tree &> /dev/null; then
|
||||
project_root=$(git rev-parse --show-toplevel)
|
||||
else
|
||||
echo "Error: not inside a git repository"
|
||||
return 1
|
||||
fi
|
||||
|
||||
pushd "${project_root}"
|
||||
git-local-exclude .local
|
||||
mkdir -p .local
|
||||
mkdir -p .local/bin
|
||||
touch .local/notes.md
|
||||
|
||||
cat > .local/env.sh << EOF
|
||||
export P="${project_root}"
|
||||
export D="\$P/build-debug/bin"
|
||||
export R="\$P/build-release/bin"
|
||||
export L="\$P/.local"
|
||||
|
||||
export PATH="\$L/bin:\$PATH"
|
||||
EOF
|
||||
|
||||
git-local-exclude .vscode
|
||||
mkdir -p .vscode
|
||||
if [ -f .vscode/settings.json ]; then
|
||||
echo "Warning: .vscode/settings.json already exist"
|
||||
else
|
||||
echo '{}' > .vscode/settings.json
|
||||
fi
|
||||
|
||||
popd
|
||||
}
|
||||
Reference in New Issue
Block a user