Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 3 additions & 21 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +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

# 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"
# 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
3 changes: 2 additions & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@

"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",
"customizations": {
Expand Down
14 changes: 0 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
13 changes: 0 additions & 13 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 0 additions & 14 deletions .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
1 change: 1 addition & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
39 changes: 27 additions & 12 deletions cmake/PI.cmake
Original file line number Diff line number Diff line change
@@ -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")
7 changes: 7 additions & 0 deletions cmake/triplets/arm64-rpi.cmake
Original file line number Diff line number Diff line change
@@ -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")