nova.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/bin/bash
  2. if [[ "$OSTYPE" != "darwin"* ]]; then
  3. echo "Unsupported OS"
  4. exit 1
  5. fi
  6. PROJECT_PATH="$(pwd)"
  7. VSCODE_PATH="${PROJECT_PATH}/.vscode"
  8. CONFIG="compile_commands.json"
  9. VSCODE_CONFIG_PATH="${VSCODE_PATH}/${CONFIG}"
  10. PROJECT_CONFIG_PATH="${PROJECT_PATH}/${CONFIG}"
  11. TMP_PATH="${PROJECT_PATH}/tmp.json"
  12. TOOLCHAIN_PATH="${HOME}/.ufbt/toolchain/arm64-darwin"
  13. CLANGD_PATH="${TOOLCHAIN_PATH}/bin/clangd"
  14. FLAGS_TO_ADD=" --target=arm-none-eabi -Wno-unused-include-directive --sysroot=${TOOLCHAIN_PATH}/arm-none-eabi"
  15. FLAGS_TO_REMOVE="-mword-relocations"
  16. FLAGS_TO_REMOVE_ARRAY=$(echo "$FLAGS_TO_REMOVE" | jq -R 'split(" ")')
  17. echo "Installing ufbt..."
  18. python3 -m pip install --upgrade ufbt
  19. echo "Updating ufbt..."
  20. ufbt update
  21. echo "Generate compile_commands.json"
  22. ufbt cdb
  23. echo "Move compile_commands.json to project root"
  24. mv "${VSCODE_CONFIG_PATH}" "${PROJECT_CONFIG_PATH}"
  25. echo "Add extra flags to compile_commands.json"
  26. jq --arg flags "${FLAGS_TO_ADD}" 'map(.command += $flags)' "${PROJECT_CONFIG_PATH}" > "${TMP_PATH}" && mv "${TMP_PATH}" "${PROJECT_CONFIG_PATH}"
  27. echo "Remove conflicting flags from compile_commands.json"
  28. jq --argjson flags "${FLAGS_TO_REMOVE_ARRAY}" '
  29. map(
  30. .command = (
  31. (.command | split(" "))
  32. | map(select(. as $word | $flags | index($word) | not))
  33. | join(" ")
  34. )
  35. )
  36. ' "${PROJECT_CONFIG_PATH}" > "${TMP_PATH}" && mv "${TMP_PATH}" "${PROJECT_CONFIG_PATH}"
  37. echo "Remove .vscode dir"
  38. rm -rf "${VSCODE_PATH}"
  39. echo "Remove .clangd file"
  40. rm -rf "${PROJECT_PATH}/.clangd"
  41. printf "Done\n\n"
  42. echo "Update Language Server path in C-Dragon extension settings to:"
  43. echo "${CLANGD_PATH}"