diff --git a/.github/workflows/bullseye.yml b/.github/workflows/bullseye.yml new file mode 100644 index 0000000..cc736a3 --- /dev/null +++ b/.github/workflows/bullseye.yml @@ -0,0 +1,22 @@ +name: Debian Bullseye +on: + push: + branches: + - master + pull_request: + +jobs: + build: + name: Debian Bullseye + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Checkout submodules + run: | + git submodule init + git submodule update + - name: Docker Build + run: cd scripts && docker build -t chiaki-bullseye . -f Dockerfile.bullseye && cd .. + - name: Build and Test + run: docker run --rm -v "`pwd`:/build" -t chiaki-bullseye /bin/bash -c "cd /build && scripts/ci-script -DCHIAKI_USE_SYSTEM_JERASURE=ON" + diff --git a/CMakeLists.txt b/CMakeLists.txt index d59f031..f75bb09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ option(CHIAKI_LIB_ENABLE_MBEDTLS "Use mbedtls instead of OpenSSL as part of Chia option(CHIAKI_LIB_OPENSSL_EXTERNAL_PROJECT "Use OpenSSL as CMake external project" OFF) option(CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER "Use SDL Gamecontroller for Input" ON) option(CHIAKI_CLI_ARGP_STANDALONE "Search for standalone argp lib for CLI" OFF) +tri_option(CHIAKI_USE_SYSTEM_JERASURE "Use system-provided jerasure instead of submodule" AUTO) set(CHIAKI_VERSION_MAJOR 1) set(CHIAKI_VERSION_MINOR 3) @@ -52,6 +53,16 @@ elseif(CHIAKI_ENABLE_SWITCH) set(CHIAKI_LIB_ENABLE_MBEDTLS ON) endif() +if(CHIAKI_USE_SYSTEM_JERASURE) + if(CHIAKI_USE_SYSTEM_JERASURE STREQUAL AUTO) + find_package(Jerasure QUIET) + set(CHIAKI_USE_SYSTEM_JERASURE ${Jerasure_FOUND}) + else() + find_package(Jerasure REQUIRED) + set(CHIAKI_USE_SYSTEM_JERASURE ON) + endif() +endif() + add_subdirectory(third-party) add_definitions(-DCHIAKI_VERSION_MAJOR=${CHIAKI_VERSION_MAJOR} -DCHIAKI_VERSION_MINOR=${CHIAKI_VERSION_MINOR} -DCHIAKI_VERSION_PATCH=${CHIAKI_VERSION_PATCH} -DCHIAKI_VERSION=\"${CHIAKI_VERSION}\") diff --git a/cmake/FindJerasure.cmake b/cmake/FindJerasure.cmake new file mode 100644 index 0000000..973b5a6 --- /dev/null +++ b/cmake/FindJerasure.cmake @@ -0,0 +1,26 @@ +# Provides Jerasure::Jerasure + +find_path(Jerasure_INCLUDE_DIR NAMES jerasure.h) +find_path(Jerasure_INCLUDE_DIR2 NAMES galois.h PATH_SUFFIXES jerasure) +find_library(Jerasure_LIBRARY NAMES Jerasure) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Jerasure + FOUND_VAR Jerasure_FOUND + REQUIRED_VARS + Jerasure_LIBRARY + Jerasure_INCLUDE_DIR + Jerasure_INCLUDE_DIR2 +) + +if(Jerasure_FOUND) + set(Jerasure_LIBRARIES ${Jerasure_LIBRARY}) + set(Jerasure_INCLUDE_DIRS ${Jerasure_INCLUDE_DIR} ${Jerasure_INCLUDE_DIR2}) + if(NOT TARGET Jerasure::Jerasure) + add_library(Jerasure::Jerasure UNKNOWN IMPORTED) + set_target_properties(Jerasure::Jerasure PROPERTIES + IMPORTED_LOCATION "${Jerasure_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${Jerasure_INCLUDE_DIRS}" + ) + endif() +endif() diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index c002ab8..facead5 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -117,7 +117,7 @@ if(CHIAKI_ENABLE_SWITCH AND NOT CHIAKI_ENABLE_SWITCH_LINUX) endif() target_link_libraries(chiaki-lib protobuf-nanopb-static) -target_link_libraries(chiaki-lib jerasure) +target_link_libraries(chiaki-lib Jerasure::Jerasure) if(CHIAKI_LIB_ENABLE_OPUS) target_link_libraries(chiaki-lib ${Opus_LIBRARIES}) diff --git a/scripts/Dockerfile.bullseye b/scripts/Dockerfile.bullseye new file mode 100644 index 0000000..443c641 --- /dev/null +++ b/scripts/Dockerfile.bullseye @@ -0,0 +1,12 @@ + +FROM debian:bullseye + +RUN apt-get update +RUN apt-get -y install git g++ cmake pkg-config \ + libjerasure-dev libnanopb-dev libavcodec-dev libopus-dev \ + libssl-dev protobuf-compiler python3 python3-protobuf \ + libevdev-dev libudev-dev \ + qt5-default libqt5svg5-dev qtmultimedia5-dev libsdl2-dev + +CMD [] + diff --git a/scripts/ci-script b/scripts/ci-script new file mode 100755 index 0000000..e88acfb --- /dev/null +++ b/scripts/ci-script @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e +set -x + +mkdir build && cd build +cmake .. -DCHIAKI_ENABLE_SETSU=ON "$@" +make -j8 +make test diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index b1357d5..14e7f28 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -10,39 +10,43 @@ set(NANOPB_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/nanopb") set(NANOPB_SOURCE_DIR "${NANOPB_SOURCE_DIR}" PARENT_SCOPE) set(NANOPB_GENERATOR_PY "${NANOPB_SOURCE_DIR}/generator/nanopb_generator.py" PARENT_SCOPE) -################## -# gf-complete -################## +if(NOT CHIAKI_USE_SYSTEM_JERASURE) + ################## + # gf-complete + ################## -set(GF_COMPLETE_SOURCE - gf-complete/src/gf.c - gf-complete/src/gf_wgen.c - gf-complete/src/gf_w4.c - gf-complete/src/gf_w8.c - gf-complete/src/gf_w16.c - gf-complete/src/gf_w32.c - gf-complete/src/gf_w64.c - gf-complete/src/gf_w128.c - gf-complete/src/gf_rand.c - gf-complete/src/gf_general.c - gf-complete/src/gf_cpu.c) + set(GF_COMPLETE_SOURCE + gf-complete/src/gf.c + gf-complete/src/gf_wgen.c + gf-complete/src/gf_w4.c + gf-complete/src/gf_w8.c + gf-complete/src/gf_w16.c + gf-complete/src/gf_w32.c + gf-complete/src/gf_w64.c + gf-complete/src/gf_w128.c + gf-complete/src/gf_rand.c + gf-complete/src/gf_general.c + gf-complete/src/gf_cpu.c) -# TODO: support NEON + # TODO: support NEON -add_library(gf_complete STATIC ${GF_COMPLETE_SOURCE}) -target_include_directories(gf_complete PUBLIC gf-complete/include) + add_library(gf_complete STATIC ${GF_COMPLETE_SOURCE}) + target_include_directories(gf_complete PUBLIC gf-complete/include) -################## -# jerasure -################## + ################## + # jerasure + ################## -set(JERASURE_SOURCE - jerasure/src/galois.c - jerasure/src/jerasure.c - jerasure/src/reed_sol.c - jerasure/src/cauchy.c - jerasure/src/liberation.c) + set(JERASURE_SOURCE + jerasure/src/galois.c + jerasure/src/jerasure.c + jerasure/src/reed_sol.c + jerasure/src/cauchy.c + jerasure/src/liberation.c) -add_library(jerasure STATIC ${JERASURE_SOURCE}) -target_include_directories(jerasure PUBLIC jerasure/include) -target_link_libraries(jerasure gf_complete) + add_library(jerasure STATIC ${JERASURE_SOURCE}) + target_include_directories(jerasure PUBLIC jerasure/include) + target_link_libraries(jerasure gf_complete) + + add_library(Jerasure::Jerasure ALIAS jerasure) +endif()