From f7c6714abdd7adfd8a0b5aac51b39d5c30c35760 Mon Sep 17 00:00:00 2001 From: sshcrack <34072808+sshcrack@users.noreply.github.com> Date: Tue, 12 Aug 2025 15:29:52 +0000 Subject: [PATCH 1/3] Move the arm64-rpi triplet to this repository --- .devcontainer/Dockerfile | 10 ------ .github/workflows/ci.yml | 14 -------- .github/workflows/copilot-setup-steps.yml | 13 -------- .github/workflows/create-release.yml | 14 -------- CMakePresets.json | 1 + cmake/PI.cmake | 39 ++++++++++++++++------- cmake/triplets/arm64-rpi.cmake | 7 ++++ 7 files changed, 35 insertions(+), 63 deletions(-) create mode 100644 cmake/triplets/arm64-rpi.cmake diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index a3ab51ad..199fe8bb 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -9,13 +9,3 @@ RUN apt-get update && \ chmod +x /tmp/cmake-install.sh && \ /tmp/cmake-install.sh --skip-license --prefix=/usr/local && \ rm /tmp/cmake-install.sh - -# Download and extract cross-compile toolchain -ENV CROSS_COMPILE_ROOT=/opt/cross-compile -RUN mkdir -p ${CROSS_COMPILE_ROOT} && \ - curl -L -o ${CROSS_COMPILE_ROOT}/cross-compile.tar.xz "https://github.com/sshcrack/led-matrix/releases/download/v0.0.1-beta/cross-compile.tar.xz" && \ - tar -xvf ${CROSS_COMPILE_ROOT}/cross-compile.tar.xz -C ${CROSS_COMPILE_ROOT} && \ - rm ${CROSS_COMPILE_ROOT}/cross-compile.tar.xz - -# Set environment variable for cross-compile toolchain -ENV PATH="${CROSS_COMPILE_ROOT}:$PATH" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ab06a83..0bf72603 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -131,20 +131,6 @@ jobs: tar -xvf cross-compile.tar.xz rm cross-compile.tar.xz - - name: Create vcpkg triplet for arm64-rpi - if: matrix.requires-toolchain - run: | - mkdir -p $VCPKG_ROOT/triplets/community - cat > $VCPKG_ROOT/triplets/community/arm64-rpi.cmake << 'EOF' - set(VCPKG_TARGET_ARCHITECTURE arm64) - set(VCPKG_CRT_LINKAGE dynamic) - set(VCPKG_LIBRARY_LINKAGE static) - - set(VCPKG_CMAKE_SYSTEM_NAME Linux) - - set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${{ runner.temp }}/cross-compile/PI.cmake) - EOF - # React Native web build only for led-matrix build - name: Install pnpm if: matrix.name == 'led-matrix' diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index ac2fd3fd..8888a779 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -94,19 +94,6 @@ jobs: tar -xvf cross-compile.tar.xz rm cross-compile.tar.xz - - name: Create vcpkg triplet for arm64-rpi - run: | - mkdir -p $VCPKG_ROOT/triplets/community - cat > $VCPKG_ROOT/triplets/community/arm64-rpi.cmake << 'EOF' - set(VCPKG_TARGET_ARCHITECTURE arm64) - set(VCPKG_CRT_LINKAGE dynamic) - set(VCPKG_LIBRARY_LINKAGE static) - - set(VCPKG_CMAKE_SYSTEM_NAME Linux) - - set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${{ runner.temp }}/cross-compile/PI.cmake) - EOF - # React Native web build only for led-matrix build - name: Install pnpm uses: pnpm/action-setup@v4 diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 996d408a..f8390914 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -201,20 +201,6 @@ jobs: tar -xvf cross-compile.tar.xz rm cross-compile.tar.xz - - name: Create vcpkg triplet for arm64-rpi - if: matrix.requires-toolchain - run: | - mkdir -p $VCPKG_ROOT/triplets/community - cat > $VCPKG_ROOT/triplets/community/arm64-rpi.cmake << 'EOF' - set(VCPKG_TARGET_ARCHITECTURE arm64) - set(VCPKG_CRT_LINKAGE dynamic) - set(VCPKG_LIBRARY_LINKAGE static) - - set(VCPKG_CMAKE_SYSTEM_NAME Linux) - - set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${{ runner.temp }}/cross-compile/PI.cmake) - EOF - - name: Build ${{ matrix.name }} uses: lukka/run-cmake@v10 with: diff --git a/CMakePresets.json b/CMakePresets.json index 52ee121b..ea851212 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -8,6 +8,7 @@ "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "${sourceDir}/cmake/PI.cmake", + "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/cmake/triplets", "VCPKG_TARGET_TRIPLET": "arm64-rpi", "CMAKE_BUILD_TYPE": "RelWithDebInfo" } diff --git a/cmake/PI.cmake b/cmake/PI.cmake index 93fccb35..78b26d75 100644 --- a/cmake/PI.cmake +++ b/cmake/PI.cmake @@ -1,17 +1,32 @@ # Raspberry Pi Cross-Compilation Toolchain File -# Check for CROSS_COMPILE_ROOT - first environment variable, then CMake variable -set(CROSS_COMPILE_ROOT_PATH "") +# Set the cross-compile directory name (this is a bit hacky but works I know) +set(LED_MATRIX_BUILD_DIR "${CMAKE_CURRENT_LIST_DIR}/../build") +set(CROSS_COMPILE_DIR "${LED_MATRIX_BUILD_DIR}/cross-compile") -if(DEFINED ENV{CROSS_COMPILE_ROOT}) - set(CROSS_COMPILE_ROOT_PATH "$ENV{CROSS_COMPILE_ROOT}") - message(STATUS "Using CROSS_COMPILE_ROOT from environment variable: ${CROSS_COMPILE_ROOT_PATH}") -elseif(DEFINED CROSS_COMPILE_ROOT) - set(CROSS_COMPILE_ROOT_PATH "${CROSS_COMPILE_ROOT}") - message(STATUS "Using CROSS_COMPILE_ROOT from CMake variable: ${CROSS_COMPILE_ROOT_PATH}") -else() - message(FATAL_ERROR "CROSS_COMPILE_ROOT is not defined. Please set it either as an environment variable or CMake variable to your cross-compiler root directory. A guide can be found here: https://github.com/abhiTronix/raspberry-pi-cross-compilers/discussions/123") +if(DEFINED $ENV{CROSS_COMPILE_ROOT}) + set(CROSS_COMPILE_DIR $ENV{CROSS_COMPILE_ROOT}) endif() -# Include the PI toolchain file directly from the resolved path -include("${CROSS_COMPILE_ROOT_PATH}/PI.cmake") +# Check if the cross-compile directory exists +if(NOT EXISTS "${CROSS_COMPILE_DIR}") + if(DEFINED $ENV{CROSS_COMPILE_ROOT}) + message(FATAL_ERROR "CROSS_COMPILE_DIR was defined in env but does not exist.") + endif() + + message(STATUS "Cross-compile directory not found. Downloading and extracting...") + file(DOWNLOAD + "https://github.com/sshcrack/led-matrix/releases/download/v0.0.1-beta/cross-compile.tar.xz" + "${LED_MATRIX_BUILD_DIR}/cross-compile.tar.xz" + SHOW_PROGRESS + ) + + file(MAKE_DIRECTORY "${CROSS_COMPILE_DIR}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar -xf "${LED_MATRIX_BUILD_DIR}/cross-compile.tar.xz" + WORKING_DIRECTORY "${CROSS_COMPILE_DIR}" + ) +endif() + +# Include the PI toolchain file from the extracted directory +include("${CROSS_COMPILE_DIR}/PI.cmake") diff --git a/cmake/triplets/arm64-rpi.cmake b/cmake/triplets/arm64-rpi.cmake new file mode 100644 index 00000000..cb2bc013 --- /dev/null +++ b/cmake/triplets/arm64-rpi.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) + +set(VCPKG_CMAKE_SYSTEM_NAME Linux) + +set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_LIST_DIR}/../PI.cmake") From a310bf72831741f67134d4e3e92cd959e0490eb9 Mon Sep 17 00:00:00 2001 From: sshcrack <34072808+sshcrack@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:20:24 +0000 Subject: [PATCH 2/3] Install pnpm after creation [skip ci] --- .devcontainer/devcontainer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d648996c..64417e63 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -22,6 +22,7 @@ "CROSS_COMPILE_ROOT": "/opt/cross-compile" }, "updateContentCommand": "git submodule update --init --recursive", + "postCreateCommand": "cd /workspaces/led-matrix/react-native && pnpm i", "customizations": { "vscode": { "extensions": [ From 8ef3e9211928c0aa58917862c2d029c91a1c65d7 Mon Sep 17 00:00:00 2001 From: sshcrack <34072808+sshcrack@users.noreply.github.com> Date: Tue, 12 Aug 2025 17:12:41 +0000 Subject: [PATCH 3/3] Also add nuget sources to devcontainer [skip ci] --- .devcontainer/Dockerfile | 14 +++----------- .devcontainer/devcontainer.json | 4 ++-- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 199fe8bb..a1280454 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,11 +1,3 @@ -FROM mcr.microsoft.com/devcontainers/cpp:1-debian-12 - -# Install required packages (excluding mono and nuget-related setup) -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - python3-jinja2 pkg-config autoconf automake libtool python3 linux-libc-dev curl libltdl-dev libx11-dev libxft-dev libxext-dev libwayland-dev libxkbcommon-dev libegl1-mesa-dev libibus-1.0-dev libxrandr-dev libxrandr2 wayland-protocols extra-cmake-modules xorg-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev libgtk-3-dev libayatana-appindicator3-dev ca-certificates && \ - update-ca-certificates && \ - curl -sSL https://github.com/Kitware/CMake/releases/download/v3.25.0/cmake-3.25.0-linux-x86_64.sh -o /tmp/cmake-install.sh && \ - chmod +x /tmp/cmake-install.sh && \ - /tmp/cmake-install.sh --skip-license --prefix=/usr/local && \ - rm /tmp/cmake-install.sh +# Add custom NuGet source for vcpkg as vscode user +USER vscode +RUN mono `vcpkg fetch nuget | tail -n 1` sources add -Name sshcrack -Source https://nuget.sshcrack.me/v3/index.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 64417e63..e7adf262 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -19,10 +19,10 @@ "containerEnv": { "BUILD_TYPE": "RelWithDebInfo", - "CROSS_COMPILE_ROOT": "/opt/cross-compile" + "CROSS_COMPILE_ROOT": "/opt/cross-compile", + "VCPKG_BINARY_SOURCES": "clear;nuget,https://nuget.sshcrack.me/v3/index.json,read" }, "updateContentCommand": "git submodule update --init --recursive", - "postCreateCommand": "cd /workspaces/led-matrix/react-native && pnpm i", "customizations": { "vscode": { "extensions": [