From d7a00209fecbac1df8c9b3e98ebd1901516f1e09 Mon Sep 17 00:00:00 2001 From: Lorenzooone Date: Wed, 17 Sep 2025 18:21:51 +0200 Subject: [PATCH] Add riscv64 builder and pre-cache android builder --- README.md | 2 +- docker-scripts/build-dockers/Dockerfile | 27 +++++++++++++++++-- docker-scripts/build-dockers/build-builder.sh | 2 ++ .../build-dockers/linux_install_packages.sh | 6 ++--- docker-scripts/docker_build_android | 6 +++-- docker-scripts/docker_build_android_libraries | 19 +++++++------ docker-scripts/docker_build_riscv64 | 3 +++ toolchains/linux_riscv64.cmake | 17 ++++++++++++ 8 files changed, 66 insertions(+), 16 deletions(-) create mode 100644 docker-scripts/docker_build_riscv64 create mode 100644 toolchains/linux_riscv64.cmake diff --git a/README.md b/README.md index b466172..b6cd8cb 100755 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ cmake -B build -DCMAKE_BUILD_TYPE=Release -DRASPBERRY_PI_COMPILATION=TRUE ; cmak ### Docker Compilation Alternatively, one may use Docker to compile the Linux version for its different architectures by running: `docker run --rm -it -v ${PWD}:/home/builder/cc3dsfs lorenzooone/cc3dsfs:` -The following builders are available: builder32, builder64, builderarm32, builderarm64 and builderandroid (in beta). +The following builders are available: builder32, builder64, builderarm32, builderarm64, builderriscv64 and builderandroid (in beta). ## Controls diff --git a/docker-scripts/build-dockers/Dockerfile b/docker-scripts/build-dockers/Dockerfile index dd07b02..cda8c3c 100644 --- a/docker-scripts/build-dockers/Dockerfile +++ b/docker-scripts/build-dockers/Dockerfile @@ -86,10 +86,22 @@ USER builder CMD /docker_build_starter docker-scripts/docker_build_arm64 ################################################################################ -### Build Android ### +### Build riscv 64 ### +################################################################################ +FROM base_builder as builderriscv64 +COPY linux_install_packages.sh / +RUN chmod +x /linux_install_packages.sh ; /linux_install_packages.sh riscv64 +WORKDIR /home/builder/building +COPY docker_build_starter / +RUN chmod +x /docker_build_starter +USER builder +CMD /docker_build_starter docker-scripts/docker_build_riscv64 + +################################################################################ +### Build Android without caching ### ################################################################################ # Different from all others -FROM saschpe/android-ndk:31-jdk11.0.13_8-ndk23.0.7599858-cmake3.18.1 as builderandroid +FROM saschpe/android-ndk:31-jdk11.0.13_8-ndk23.0.7599858-cmake3.18.1 as builderandroid_nocache ARG CMAKE_VERSION_SDKMANAGER_ANDROID RUN apt update && apt install -y lsb-release g++ build-essential wget git libssl-dev pkg-config zip unzip RUN curl -s "https://get.sdkman.io" | bash @@ -118,3 +130,14 @@ COPY --from=cmake_builder_focal cmake.tar.gz /cmake.tar.gz RUN mkdir -p /cmake_folder && cd /cmake_folder && tar -xvf /cmake.tar.gz --strip-components=1 && cp -rf * /usr/local/ USER builder CMD /docker_build_starter docker-scripts/docker_build_android + +################################################################################ +### Build Android with caching ### +################################################################################ +# Different from all others +FROM builderandroid_nocache as builderandroid +RUN git clone https://github.com/Lorenzooone/cc3dsfs.git +RUN mv cc3dsfs ../cc3dsfs_to_cache +RUN cd ../cc3dsfs_to_cache ; chmod -R +x . ; ./docker-scripts/docker_build_android +RUN rm -rf ../cc3dsfs_to_cache +CMD /docker_build_starter docker-scripts/docker_build_android diff --git a/docker-scripts/build-dockers/build-builder.sh b/docker-scripts/build-dockers/build-builder.sh index 9088c58..05f48b6 100644 --- a/docker-scripts/build-dockers/build-builder.sh +++ b/docker-scripts/build-dockers/build-builder.sh @@ -7,5 +7,7 @@ docker image rm lorenzooone/cc3dsfs:builderarm32 docker build --target builderarm32 . -t lorenzooone/cc3dsfs:builderarm32 docker image rm lorenzooone/cc3dsfs:builderarm64 docker build --target builderarm64 . -t lorenzooone/cc3dsfs:builderarm64 +docker image rm lorenzooone/cc3dsfs:builderriscv64 +docker build --target builderriscv64 . -t lorenzooone/cc3dsfs:builderriscv64 docker image rm lorenzooone/cc3dsfs:builderandroid docker build --target builderandroid . -t lorenzooone/cc3dsfs:builderandroid diff --git a/docker-scripts/build-dockers/linux_install_packages.sh b/docker-scripts/build-dockers/linux_install_packages.sh index 8d10fd7..2df9b0a 100644 --- a/docker-scripts/build-dockers/linux_install_packages.sh +++ b/docker-scripts/build-dockers/linux_install_packages.sh @@ -2,7 +2,7 @@ BASE_AMD_STR="deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu/ " BASE_SECURITY_AMD_STR="deb [arch=amd64,i386] http://security.ubuntu.com/ubuntu/ " -BASE_ARM_STR="deb [arch=arm64,armhf] http://ports.ubuntu.com/ " +BASE_ARM_STR="deb [arch=arm64,armhf,riscv64] http://ports.ubuntu.com/ " NO_SPECIAL_STR=" main multiverse universe" SECURITY_STR="-security main multiverse universe" BACKPORTS_STR="-backports main multiverse universe" @@ -12,9 +12,9 @@ LOCATION_BASE="/etc/apt/sources.list.d" LOCATION_AMD="${LOCATION_BASE}/x86_compilers.list" LOCATION_ARM="${LOCATION_BASE}/arm_compilers.list" -LIST_ARCHITECTURES=("amd64" "i386" "arm64" "armhf") +LIST_ARCHITECTURES=("amd64" "i386" "arm64" "armhf" "riscv64") LIST_PACKAGES_BASE=("libxinerama-dev" "libxi-dev" "libxss-dev" "libxxf86vm-dev" "libxkbfile-dev" "libxv-dev" "libx11-dev" "libxrandr-dev" "libxcursor-dev" "libudev-dev" "libflac-dev" "libvorbis-dev" "libgl1-mesa-dev" "libegl1-mesa-dev" "libdrm-dev" "libgbm-dev" "libfreetype-dev" "libharfbuzz-dev") -LIST_PACKAGES_NORMAL=("g++-multilib-i686-linux-gnu" "g++-aarch64-linux-gnu" "g++-arm-linux-gnueabihf" "g++:amd64" "g++" "git" "xorg-dev") +LIST_PACKAGES_NORMAL=("g++-riscv64-linux-gnu" "g++-multilib-i686-linux-gnu" "g++-aarch64-linux-gnu" "g++-arm-linux-gnueabihf" "g++:amd64" "g++" "git" "xorg-dev") LIST_PACKAGES_SPECIAL=("libgpiod-dev") echo "${BASE_AMD_STR}$(lsb_release -sc)${NO_SPECIAL_STR}" > ${LOCATION_AMD} diff --git a/docker-scripts/docker_build_android b/docker-scripts/docker_build_android index 9d891a2..7b3c833 100644 --- a/docker-scripts/docker_build_android +++ b/docker-scripts/docker_build_android @@ -3,7 +3,9 @@ SFML_EXTRACTED_TO_FOLDER=~ LIBUSB_EXTRACTED_TO_FOLDER=~ SFML_BRANCH_NAME=master +SFML_AUTHOR=SFML LIBUSB_BRANCH_NAME=android-rebase-2022-07 +LIBUSB_AUTHOR=jagheterfredrik SFML_EXTRACTED_FOLDER=${SFML_EXTRACTED_TO_FOLDER}/SFML-${SFML_BRANCH_NAME} LIBUSB_EXTRACTED_FOLDER=${LIBUSB_EXTRACTED_TO_FOLDER}/libusb-${LIBUSB_BRANCH_NAME} BUILD_APK_COMMAND=docker-scripts/docker_build_android_apk @@ -16,8 +18,8 @@ ANDROID_FOLDER=android export LANG=C.UTF-8 -(cd ${SFML_EXTRACTED_TO_FOLDER} ; rm -f ${SFML_BRANCH_NAME}.zip ; wget https://github.com/SFML/SFML/archive/refs/heads/${SFML_BRANCH_NAME}.zip ; unzip ${SFML_BRANCH_NAME}.zip) -(cd ${LIBUSB_EXTRACTED_TO_FOLDER} ; rm -f ${LIBUSB_BRANCH_NAME}.zip ; wget https://github.com/jagheterfredrik/libusb/archive/refs/heads/${LIBUSB_BRANCH_NAME}.zip ; unzip ${LIBUSB_BRANCH_NAME}.zip) +(cd ${SFML_EXTRACTED_TO_FOLDER} ; rm -f ${SFML_BRANCH_NAME}.zip ; rm -rf ${SFML_EXTRACTED_FOLDER} ; wget https://github.com/${SFML_AUTHOR}/SFML/archive/refs/heads/${SFML_BRANCH_NAME}.zip ; unzip ${SFML_BRANCH_NAME}.zip) +(cd ${LIBUSB_EXTRACTED_TO_FOLDER} ; rm -f ${LIBUSB_BRANCH_NAME}.zip ; rm -rf ${LIBUSB_EXTRACTED_FOLDER} ; wget https://github.com/${LIBUSB_AUTHOR}/libusb/archive/refs/heads/${LIBUSB_BRANCH_NAME}.zip ; unzip ${LIBUSB_BRANCH_NAME}.zip) ${BUILD_LIBS_COMMAND} ${LIBUSB_EXTRACTED_FOLDER} ${SFML_EXTRACTED_FOLDER} ${STL_CHOSEN} ${RELEASE_TYPE} diff --git a/docker-scripts/docker_build_android_libraries b/docker-scripts/docker_build_android_libraries index 2ba4259..6fbbe63 100644 --- a/docker-scripts/docker_build_android_libraries +++ b/docker-scripts/docker_build_android_libraries @@ -1,5 +1,8 @@ #!/bin/sh + +LIST_ARCHITECTURES='armeabi-v7a arm64-v8a x86 x86_64' + LIBUSB_FOLDER=$1 SFML_FOLDER=$2 STL_CHOSEN=$3 @@ -10,15 +13,15 @@ BUILD_SINGLE_ARCH_SFML_COMMAND=docker-scripts/docker_build_android_sfml_single_a (cd ${LIBUSB_FOLDER}/android/jni ; ndk-build APP_PLATFORM=${ANDROID_SDK_VERSION} -j ; mkdir -p ${ANDROID_NDK_HOME}/sources/third_party/libusb/include ; cp -r ../libs/ ${ANDROID_NDK_HOME}/sources/third_party/libusb ; cp -r ../../libusb ${ANDROID_NDK_HOME}/sources/third_party/libusb/include) -${CONFIGURE_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} armeabi-v7a ${STL_CHOSEN} ${RELEASE_TYPE} & -${CONFIGURE_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} arm64-v8a ${STL_CHOSEN} ${RELEASE_TYPE} & -${CONFIGURE_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} x86 ${STL_CHOSEN} ${RELEASE_TYPE} & -${CONFIGURE_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} x86_64 ${STL_CHOSEN} ${RELEASE_TYPE} +for target_arch in ${LIST_ARCHITECTURES}; +do + ${CONFIGURE_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} ${target_arch} ${STL_CHOSEN} ${RELEASE_TYPE} & +done wait $(jobs -p) echo "All libraries configured..." -${BUILD_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} armeabi-v7a -${BUILD_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} arm64-v8a -${BUILD_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} x86 -${BUILD_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} x86_64 +for target_arch in ${LIST_ARCHITECTURES}; +do + ${BUILD_SINGLE_ARCH_SFML_COMMAND} ${SFML_FOLDER} ${target_arch} +done diff --git a/docker-scripts/docker_build_riscv64 b/docker-scripts/docker_build_riscv64 new file mode 100644 index 0000000..424d4cf --- /dev/null +++ b/docker-scripts/docker_build_riscv64 @@ -0,0 +1,3 @@ +#!/bin/sh + +docker-scripts/docker_build_base buildriscv64 "-DCMAKE_TOOLCHAIN_FILE=toolchains/linux_riscv64.cmake" diff --git a/toolchains/linux_riscv64.cmake b/toolchains/linux_riscv64.cmake new file mode 100644 index 0000000..37fd551 --- /dev/null +++ b/toolchains/linux_riscv64.cmake @@ -0,0 +1,17 @@ +# the name of the target operating system +SET(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR riscv64) + +# which C and C++ compiler to use +set(CMAKE_C_COMPILER "/usr/bin/riscv64-linux-gnu-gcc") +set(CMAKE_CXX_COMPILER "/usr/bin/riscv64-linux-gnu-g++") + +# here is the target environment located +SET(CMAKE_FIND_ROOT_PATH /usr/lib/riscv64-linux-gnu) + +# adjust the default behaviour of the FIND_XXX() commands: +# search headers and libraries in the target environment, search +# programs in the host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)