diff --git a/.teamcity/settings.kts b/.teamcity/settings.kts new file mode 100644 index 0000000..0a2c099 --- /dev/null +++ b/.teamcity/settings.kts @@ -0,0 +1,98 @@ +import jetbrains.buildServer.configs.kotlin.* +import jetbrains.buildServer.configs.kotlin.buildSteps.script +import jetbrains.buildServer.configs.kotlin.triggers.vcs +import jetbrains.buildServer.configs.kotlin.vcs.GitVcsRoot + +version = "2024.12" + +project { + description = "SN-L00 Eurorack Latency Tester" + + vcsRoot(SN_L00_Repo) + buildType(Build) +} + +object SN_L00_Repo : GitVcsRoot({ + name = "SN-L00" + url = "git@git.sub-net.at:submodular/SN-L00.git" + branch = "refs/heads/main" + branchSpec = "+:refs/heads/*" + authMethod = defaultPrivateKey { + userName = "git" + } +}) + +object Build : BuildType({ + name = "Build Firmware" + description = "Build RP2040 firmware using Pico SDK" + + artifactRules = """ + firmware/build/sn_l00.uf2 => firmware/ + firmware/build/sn_l00.elf => firmware/ + """.trimIndent() + + vcs { + root(SN_L00_Repo) + } + + steps { + script { + name = "Install Pico SDK" + scriptContent = """ + #!/bin/bash + set -e + + # Check if SDK exists, if not clone it + if [ ! -d "${'$'}HOME/pico-sdk" ]; then + echo "Cloning Pico SDK..." + git clone https://github.com/raspberrypi/pico-sdk.git ${'$'}HOME/pico-sdk + cd ${'$'}HOME/pico-sdk + git submodule update --init + else + echo "Updating Pico SDK..." + cd ${'$'}HOME/pico-sdk + git pull + git submodule update --init + fi + + echo "Pico SDK ready at ${'$'}HOME/pico-sdk" + """.trimIndent() + } + script { + name = "Build Firmware" + workingDir = "firmware" + scriptContent = """ + #!/bin/bash + set -e + + export PICO_SDK_PATH="${'$'}HOME/pico-sdk" + + # Clean and build + rm -rf build + mkdir build + cd build + + cmake .. -DCMAKE_BUILD_TYPE=Release + make -j${'$'}(nproc) + + # Verify output + ls -la sn_l00.uf2 sn_l00.elf + + echo "" + echo "Build successful!" + echo "UF2 size: ${'$'}(stat --printf='%s' sn_l00.uf2) bytes" + """.trimIndent() + } + } + + triggers { + vcs { + branchFilter = "+:*" + enableQueueOptimization = false + } + } + + requirements { + contains("teamcity.agent.name", "tc-agent") + } +}) diff --git a/firmware/build.sh b/firmware/build.sh new file mode 100755 index 0000000..528fb75 --- /dev/null +++ b/firmware/build.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# SN-L00 Firmware Build Script +# Used by CI and local development + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BUILD_DIR="${SCRIPT_DIR}/build" + +# Check for Pico SDK +if [ -z "$PICO_SDK_PATH" ]; then + # Try common locations + if [ -d "/usr/share/pico-sdk" ]; then + export PICO_SDK_PATH="/usr/share/pico-sdk" + elif [ -d "$HOME/pico-sdk" ]; then + export PICO_SDK_PATH="$HOME/pico-sdk" + elif [ -d "/opt/pico-sdk" ]; then + export PICO_SDK_PATH="/opt/pico-sdk" + else + echo "ERROR: PICO_SDK_PATH not set and SDK not found in common locations" + echo "Please set PICO_SDK_PATH or install pico-sdk" + exit 1 + fi +fi + +echo "Using Pico SDK: $PICO_SDK_PATH" + +# Clean build if requested +if [ "$1" = "clean" ]; then + echo "Cleaning build directory..." + rm -rf "$BUILD_DIR" +fi + +# Create build directory +mkdir -p "$BUILD_DIR" +cd "$BUILD_DIR" + +# Configure +echo "Configuring..." +cmake .. -DCMAKE_BUILD_TYPE=Release + +# Build +echo "Building..." +make -j$(nproc) + +# Report results +if [ -f "sn_l00.uf2" ]; then + echo "" + echo "Build successful!" + echo "Output: $BUILD_DIR/sn_l00.uf2" + ls -lh sn_l00.uf2 sn_l00.elf +else + echo "Build failed - no output file" + exit 1 +fi