From a2113442cb55ce79aa643c9deec5275fdea35bc7 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Fri, 27 Mar 2026 15:59:26 -0500 Subject: [PATCH] Builds on knulli --- cmake/targets/knulli.cmake | 40 ++++++++++++++++++++++++ cmake/targets/rg35xxh.cmake | 5 +++ cmake/toolchains/aarch64-linux-gnu.cmake | 29 +++++++++++++++++ docker/knulli/Dockerfile | 31 ++++++++++++++++++ scripts/build-rg35xxh-docker.sh | 3 ++ scripts/build-rg35xxh.sh | 7 +++++ src/CMakeLists.txt | 5 +++ 7 files changed, 120 insertions(+) create mode 100644 cmake/targets/knulli.cmake create mode 100644 cmake/targets/rg35xxh.cmake create mode 100644 cmake/toolchains/aarch64-linux-gnu.cmake create mode 100644 docker/knulli/Dockerfile create mode 100755 scripts/build-rg35xxh-docker.sh create mode 100755 scripts/build-rg35xxh.sh diff --git a/cmake/targets/knulli.cmake b/cmake/targets/knulli.cmake new file mode 100644 index 0000000..f83d136 --- /dev/null +++ b/cmake/targets/knulli.cmake @@ -0,0 +1,40 @@ +# Find link platform-specific libraries +find_package(SDL2 REQUIRED) +find_package(OpenGL REQUIRED) + +# Setup endianess at compile time to optimize. +include(TestBigEndian) +test_big_endian(IS_BIG_ENDIAN) +if(IS_BIG_ENDIAN) + target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC + DUSK_PLATFORM_ENDIAN_BIG + ) +else() + target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC + DUSK_PLATFORM_ENDIAN_LITTLE + ) +endif() + +# Link required libraries. +target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PUBLIC + SDL2 + pthread + OpenGL::GL + GL + m +) + +# Define platform-specific macros. +target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC + DUSK_SDL2 + DUSK_OPENGL + DUSK_LINUX + DUSK_DISPLAY_SIZE_DYNAMIC + DUSK_DISPLAY_WIDTH_DEFAULT=640 + DUSK_DISPLAY_HEIGHT_DEFAULT=480 + DUSK_DISPLAY_SCREEN_HEIGHT=240 + DUSK_INPUT_KEYBOARD + DUSK_INPUT_POINTER + DUSK_INPUT_GAMEPAD + DUSK_TIME_DYNAMIC +) \ No newline at end of file diff --git a/cmake/targets/rg35xxh.cmake b/cmake/targets/rg35xxh.cmake new file mode 100644 index 0000000..3073766 --- /dev/null +++ b/cmake/targets/rg35xxh.cmake @@ -0,0 +1,5 @@ +include(cmake/targets/knulli.cmake) + +target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC + DUSK_RG35XXH +) \ No newline at end of file diff --git a/cmake/toolchains/aarch64-linux-gnu.cmake b/cmake/toolchains/aarch64-linux-gnu.cmake new file mode 100644 index 0000000..ac7ef61 --- /dev/null +++ b/cmake/toolchains/aarch64-linux-gnu.cmake @@ -0,0 +1,29 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) +set(CMAKE_ASM_COMPILER aarch64-linux-gnu-gcc) + +set(CMAKE_SYSROOT /) +set(CMAKE_C_COMPILER_TARGET aarch64-linux-gnu) +set(CMAKE_CXX_COMPILER_TARGET aarch64-linux-gnu) + +set(CMAKE_FIND_ROOT_PATH + /usr/aarch64-linux-gnu + /usr/lib/aarch64-linux-gnu + /usr/include/aarch64-linux-gnu +) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig") +set(ENV{PKG_CONFIG_PATH} "/usr/lib/aarch64-linux-gnu/pkgconfig") + +set(CMAKE_PREFIX_PATH "/usr/aarch64-linux-gnu;/usr/lib/aarch64-linux-gnu") + +# Optional: helps some Find modules +set(SDL2_DIR "/usr/lib/aarch64-linux-gnu/cmake/SDL2" CACHE PATH "") \ No newline at end of file diff --git a/docker/knulli/Dockerfile b/docker/knulli/Dockerfile new file mode 100644 index 0000000..1af30fb --- /dev/null +++ b/docker/knulli/Dockerfile @@ -0,0 +1,31 @@ +FROM debian:bookworm +ENV DEBIAN_FRONTEND=noninteractive +WORKDIR /workdir +RUN dpkg --add-architecture arm64 && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + crossbuild-essential-arm64 \ + ca-certificates \ + pkg-config \ + cmake \ + make \ + ninja-build \ + git \ + file \ + python3 \ + python3-pip \ + python3-polib \ + python3-pil \ + python3-dotenv \ + python3-pyqt5 \ + python3-opengl \ + liblua5.3-dev:arm64 \ + xz-utils:arm64 \ + libbz2-dev:arm64 \ + zlib1g-dev:arm64 \ + libzip-dev:arm64 \ + libbz2-dev:arm64 \ + libssl-dev:arm64 \ + libsdl2-dev:arm64 \ + libgl1-mesa-dev:arm64 && \ + rm -rf /var/lib/apt/lists/* \ No newline at end of file diff --git a/scripts/build-rg35xxh-docker.sh b/scripts/build-rg35xxh-docker.sh new file mode 100755 index 0000000..55cfd40 --- /dev/null +++ b/scripts/build-rg35xxh-docker.sh @@ -0,0 +1,3 @@ +#!/bin/bash +docker build -t dusk-rg35xxh -f docker/knulli/Dockerfile . +docker run --rm -v $(pwd):/workdir dusk-rg35xxh /bin/bash -c "./scripts/build-rg35xxh.sh" \ No newline at end of file diff --git a/scripts/build-rg35xxh.sh b/scripts/build-rg35xxh.sh new file mode 100755 index 0000000..23af653 --- /dev/null +++ b/scripts/build-rg35xxh.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cmake -S . -B build-rg35xxh -G Ninja \ + -DDUSK_BUILD_TESTS=ON \ + -DDUSK_TARGET_SYSTEM=rg35xxh \ + -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchains/aarch64-linux-gnu.cmake \ + -DCMAKE_BUILD_TYPE=Release +cmake --build build-rg35xxh -- -j$(nproc) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 00cde61..cae6ca8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,6 +10,11 @@ if(DUSK_TARGET_SYSTEM STREQUAL "linux") add_subdirectory(dusksdl2) add_subdirectory(duskgl) +elseif(DUSK_TARGET_SYSTEM STREQUAL "rg35xxh") + add_subdirectory(dusklinux) + add_subdirectory(dusksdl2) + add_subdirectory(duskgl) + elseif(DUSK_TARGET_SYSTEM STREQUAL "psp") add_subdirectory(duskpsp) add_subdirectory(dusksdl2)