From cbfa49551d725b82b89fde665857d67bc907db64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sun, 25 Oct 2020 21:08:13 +0100 Subject: [PATCH] Add option to use system Nanopb (#352) --- .github/workflows/bullseye.yml | 2 +- CMakeLists.txt | 13 +++++++++++++ cmake/FindNanopb.cmake | 25 +++++++++++++++++++++++++ lib/CMakeLists.txt | 3 +-- scripts/Dockerfile.bullseye | 2 +- third-party/CMakeLists.txt | 20 +++++++++++--------- 6 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 cmake/FindNanopb.cmake diff --git a/.github/workflows/bullseye.yml b/.github/workflows/bullseye.yml index cc736a3..5afd2c7 100644 --- a/.github/workflows/bullseye.yml +++ b/.github/workflows/bullseye.yml @@ -18,5 +18,5 @@ jobs: - 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" + run: docker run --rm -v "`pwd`:/build" -t chiaki-bullseye /bin/bash -c "cd /build && scripts/ci-script -DCHIAKI_USE_SYSTEM_JERASURE=ON -DCHIAKI_USE_SYSTEM_NANOPB=ON" diff --git a/CMakeLists.txt b/CMakeLists.txt index 1642cbd..57d4c0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,7 @@ option(CHIAKI_LIB_OPENSSL_EXTERNAL_PROJECT "Use OpenSSL as CMake external projec 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) +tri_option(CHIAKI_USE_SYSTEM_NANOPB "Use system-provided nanopb instead of submodule" AUTO) set(CHIAKI_VERSION_MAJOR 1) set(CHIAKI_VERSION_MINOR 3) @@ -74,6 +75,18 @@ if(CHIAKI_USE_SYSTEM_JERASURE) endif() endif() +find_package(PythonInterp 3 REQUIRED) # Make sure nanopb doesn't find Python 2.7 because Python 2 should just die. + +if(CHIAKI_USE_SYSTEM_NANOPB) + if(CHIAKI_USE_SYSTEM_NANOPB STREQUAL AUTO) + find_package(Nanopb QUIET) + set(CHIAKI_USE_SYSTEM_NANOPB ${Nanopb_FOUND}) + else() + find_package(Nanopb REQUIRED) + set(CHIAKI_USE_SYSTEM_NANOPB 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/FindNanopb.cmake b/cmake/FindNanopb.cmake new file mode 100644 index 0000000..6a9eab3 --- /dev/null +++ b/cmake/FindNanopb.cmake @@ -0,0 +1,25 @@ +# Provides Nanopb::nanopb and NANOPB_GENERATOR_PY + +find_package(nanopb CONFIG) +find_file(NANOPB_GENERATOR_PY nanopb_generator.py PATH_SUFFIXES bin) + +find_path(Jerasure_INCLUDE_DIR NAMES pb_encode.h pb_decode.h) +find_library(Jerasure_LIBRARY NAMES Jerasure) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Nanopb + FOUND_VAR Nanopb_FOUND + REQUIRED_VARS + nanopb_FOUND + NANOPB_GENERATOR_PY +) + +if(Nanopb_FOUND) + if(NOT TARGET Nanopb::nanopb) + add_library(Nanopb::nanopb ALIAS nanopb::protobuf-nanopb-static) + 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 f7083eb..a564577 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -74,7 +74,6 @@ set(SOURCE_FILES src/opusdecoder.c) add_subdirectory(protobuf) -include_directories("${NANOPB_SOURCE_DIR}") set_source_files_properties(${CHIAKI_LIB_PROTO_SOURCE_FILES} ${CHIAKI_LIB_PROTO_HEADER_FILES} PROPERTIES GENERATED TRUE) include_directories("${CHIAKI_LIB_PROTO_INCLUDE_DIR}") @@ -113,7 +112,7 @@ else() target_link_libraries(chiaki-lib OpenSSL::Crypto) endif() -target_link_libraries(chiaki-lib protobuf-nanopb-static) +target_link_libraries(chiaki-lib Nanopb::nanopb) target_link_libraries(chiaki-lib Jerasure::Jerasure) if(CHIAKI_LIB_ENABLE_OPUS) diff --git a/scripts/Dockerfile.bullseye b/scripts/Dockerfile.bullseye index 443c641..4946fd0 100644 --- a/scripts/Dockerfile.bullseye +++ b/scripts/Dockerfile.bullseye @@ -3,7 +3,7 @@ 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 \ + libjerasure-dev nanopb 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 diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index a71988d..33fbfbc 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -1,14 +1,16 @@ -################## -# nanopb -################## +if(NOT CHIAKI_USE_SYSTEM_NANOPB) + ################## + # nanopb + ################## -find_package(PythonInterp 3 REQUIRED) # Make sure nanopb doesn't find Python 2.7 because Python 2 should just die. - -add_subdirectory(nanopb EXCLUDE_FROM_ALL) -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) + add_subdirectory(nanopb EXCLUDE_FROM_ALL) + set(NANOPB_GENERATOR_PY "${CMAKE_CURRENT_SOURCE_DIR}/nanopb/generator/nanopb_generator.py" PARENT_SCOPE) + add_library(nanopb INTERFACE) + target_link_libraries(nanopb INTERFACE protobuf-nanopb-static) + target_include_directories(nanopb INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/nanopb") + add_library(Nanopb::nanopb ALIAS nanopb) +endif() if(NOT CHIAKI_USE_SYSTEM_JERASURE) ##################