From 826e4516fac22ebaae940f4bfd5dc03f6753fe5d Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Wed, 5 May 2021 11:02:21 +0100 Subject: [PATCH 1/8] iiod: Use WITH_AIO instead of ENABLE_AIO The code already checked for the WITH_AIO macro, and almost all configurable options in libiio and IIOD use the "WITH" prefix. Signed-off-by: Paul Cercueil --- iio-config.h.cmakein | 2 +- iiod/CMakeLists.txt | 11 +++++------ iiod/iiod.c | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/iio-config.h.cmakein b/iio-config.h.cmakein index 39a9c73bc..781bfb6cc 100644 --- a/iio-config.h.cmakein +++ b/iio-config.h.cmakein @@ -17,9 +17,9 @@ #cmakedefine01 WITH_NETWORK_EVENTFD #cmakedefine01 WITH_IIOD_USBD #cmakedefine01 WITH_LOCAL_CONFIG +#cmakedefine01 WITH_AIO #cmakedefine01 HAVE_DNS_SD #cmakedefine01 HAVE_AVAHI -#cmakedefine01 ENABLE_AIO #cmakedefine01 WITH_ZSTD #cmakedefine HAS_PIPE2 diff --git a/iiod/CMakeLists.txt b/iiod/CMakeLists.txt index 22b699d5e..49049b488 100644 --- a/iiod/CMakeLists.txt +++ b/iiod/CMakeLists.txt @@ -24,7 +24,7 @@ find_library(LIBAIO_LIBRARIES aio) find_path(LIBAIO_INCLUDE_DIR libaio.h) if (LIBAIO_LIBRARIES AND LIBAIO_INCLUDE_DIR) - option(ENABLE_AIO "Build IIOD with async. I/O support" ON) + option(WITH_AIO "Build IIOD with async. I/O support" ON) endif () include(CheckTypeSize) @@ -33,12 +33,12 @@ check_type_size("struct usb_functionfs_descs_head_v2" FUNCTIONFS_V2) set(CMAKE_EXTRA_INCLUDE_FILES) if (HAVE_FUNCTIONFS_V2) - OPTION(WITH_IIOD_USBD "Add support for USB through FunctionFS within IIOD" ${ENABLE_AIO}) + OPTION(WITH_IIOD_USBD "Add support for USB through FunctionFS within IIOD" ${WITH_AIO}) if (WITH_IIOD_USBD) - if (NOT ENABLE_AIO) + if (NOT WITH_AIO) message(SEND_ERROR "USB support in IIOD requires async. I/O support") - endif (NOT ENABLE_AIO) + endif (NOT WITH_AIO) set(IIOD_CFILES ${IIOD_CFILES} usbd.c) endif (WITH_IIOD_USBD) @@ -52,8 +52,7 @@ set_target_properties(iiod PROPERTIES ) target_link_libraries(iiod iio ${PTHREAD_LIBRARIES} ${AVAHI_LIBRARIES}) -if (ENABLE_AIO) - add_definitions(-DWITH_AIO=1) +if (WITH_AIO) include_directories(${LIBAIO_INCLUDE_DIR}) target_link_libraries(iiod ${LIBAIO_LIBRARIES}) endif () diff --git a/iiod/iiod.c b/iiod/iiod.c index b4dc3d889..178558b90 100644 --- a/iiod/iiod.c +++ b/iiod/iiod.c @@ -373,7 +373,7 @@ int main(int argc, char **argv) interactive = true; break; case 'a': - if (!ENABLE_AIO) { + if (!WITH_AIO) { IIO_ERROR("IIOD was not compiled with AIO support.\n"); return EXIT_FAILURE; } From 70c4e0ea784eb491b5165b33d5af63201f199e85 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Fri, 7 May 2021 11:13:34 +0100 Subject: [PATCH 2/8] network: Fix IN6_IS_ADDR_LINKLOCAL() macro on old OSes Old OSes (CentOS 7, Ubuntu 16.04) require s6_addr32 to be defined for the IN6_IS_ADDR_LINKLOCAL() macro to work. Signed-off-by: Paul Cercueil --- network.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/network.c b/network.c index 5ae9b2b18..1ed580302 100644 --- a/network.c +++ b/network.c @@ -23,6 +23,14 @@ #include #include #else +/* + * Old OSes (CentOS 7, Ubuntu 16.04) require this for the + * IN6_IS_ADDR_LINKLOCAL() macro to work. + */ +#define __USE_MISC +#include +#undef __USE_MISC + #include #include #include From adf33f2e6c48fc22135757a352a33f9750b2df86 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Fri, 7 May 2021 09:48:10 +0100 Subject: [PATCH 3/8] CMake: Move check for pthread_setname_np to IIOD This function is not used in libiio, but is used by IIOD. Signed-off-by: Paul Cercueil --- CMakeLists.txt | 9 ++------- iiod/CMakeLists.txt | 7 +++++++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6eac89549..9b4393efe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,13 +135,6 @@ check_symbol_exists(strndup "string.h" HAS_STRNDUP) check_symbol_exists(strerror_r "string.h" HAS_STRERROR_R) check_symbol_exists(newlocale "locale.h" HAS_NEWLOCALE) -if (NOT WIN32) - find_library(PTHREAD_LIBRARIES pthread) - set(CMAKE_REQUIRED_LIBRARIES ${PTHREAD_LIBRARIES}) - check_symbol_exists(pthread_setname_np "pthread.h" HAS_PTHREAD_SETNAME_NP) - set(CMAKE_REQUIRED_LIBRARIES) -endif() - option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) if (ENABLE_IPV6) check_symbol_exists(in6addr_any "netinet/in.h" HAVE_IPV6) @@ -398,6 +391,8 @@ endif() if (NEED_THREADS) if (NOT WIN32) + find_library(PTHREAD_LIBRARIES pthread) + if (PTHREAD_LIBRARIES) list(APPEND LIBS_TO_LINK ${PTHREAD_LIBRARIES}) else() diff --git a/iiod/CMakeLists.txt b/iiod/CMakeLists.txt index 49049b488..9a0b6ff27 100644 --- a/iiod/CMakeLists.txt +++ b/iiod/CMakeLists.txt @@ -12,6 +12,13 @@ add_flex_bison_dependency(lexer parser) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include(CheckSymbolExists) +set(CMAKE_REQUIRED_LIBRARIES ${PTHREAD_LIBRARIES}) +set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) +check_symbol_exists(pthread_setname_np "pthread.h" HAS_PTHREAD_SETNAME_NP) +set(CMAKE_REQUIRED_LIBRARIES) +set(CMAKE_REQUIRED_DEFINITIONS) + if (CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC) # flex sometimes generates code which generate sign comparison errors set_source_files_properties(${FLEX_lexer_OUTPUTS} PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") From 57db9815d141ffb475191262c5f95984c1ae5f41 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Wed, 5 May 2021 10:22:46 +0100 Subject: [PATCH 4/8] CMake: Don't compile with -D_GNU_SOURCE We do not want to compile with GNU-specific extensions, as we want the code to be as portable as possible. Thanksfully we don't actually need _GNU_SOURCE to be defined, removing it only triggers an error in network-unix.c about an undefined structure, which we can fix by including the right header. Signed-off-by: Paul Cercueil --- CMakeLists.txt | 3 --- network-unix.c | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b4393efe..c9c00ee82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,9 +120,6 @@ endif() if(APPLE) #full Single Unix Standard v3 (SUSv3) conformance (the Unix API) add_definitions(-D_DARWIN_C_SOURCE) -elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") - set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE=1") - add_definitions(-D_GNU_SOURCE=1) elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|DragonFly|OpenBSD|NetBSD") set(CMAKE_REQUIRED_DEFINITIONS "-D__BSD_VISIBLE") add_definitions(-D__BSD_VISIBLE=1) diff --git a/network-unix.c b/network-unix.c index 071f34b19..594ffc877 100644 --- a/network-unix.c +++ b/network-unix.c @@ -17,6 +17,7 @@ #include #include #include +#include #include int set_blocking_mode(int fd, bool blocking) From e8b35740cc596b4598a206adf4019a946ae5213b Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Tue, 4 May 2021 15:43:06 +0100 Subject: [PATCH 5/8] CMake: Make options independant from environment Instead of making build options available according to whether or not a library is found, only search for the library if the option has been enabled. This change may temporarily break the auto-builders (which will need to be updated), but it makes the build *reproductible*, and that's very important. Signed-off-by: Paul Cercueil --- CMakeLists.txt | 178 +++++++++++++++++++++++--------------------- iiod/CMakeLists.txt | 38 +++++----- 2 files changed, 115 insertions(+), 101 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9c00ee82..d3ed0a2cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,7 @@ if (NOT CMAKE_BUILD_TYPE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel) endif() -set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") +option(BUILD_SHARED_LIBS "Build shared libraries" ON) if (NOT BUILD_SHARED_LIBS) add_definitions(-DLIBIIO_STATIC=1) @@ -136,18 +136,21 @@ option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) if (ENABLE_IPV6) check_symbol_exists(in6addr_any "netinet/in.h" HAVE_IPV6) if (NOT HAVE_IPV6) - message(WARNING "IPv6 is not available in your system.") + message(SEND_ERROR "IPv6 is not available in your system.") endif() endif() -#Handle FreeBSD libusb and Linux libusb-1.0 libraries -find_library(LIBUSB_LIBRARIES NAMES usb-1.0 usb) -find_path(LIBUSB_INCLUDE_DIR libusb.h PATH_SUFFIXES libusb-1.0) -if (LIBUSB_LIBRARIES AND LIBUSB_INCLUDE_DIR) - message(STATUS "Looking for libusb-1.0 : Found") - option(WITH_USB_BACKEND "Enable the libusb backend" ON) +option(WITH_USB_BACKEND "Enable the libusb backend" ON) +if (WITH_USB_BACKEND) + #Handle FreeBSD libusb and Linux libusb-1.0 libraries + find_library(LIBUSB_LIBRARIES NAMES usb-1.0 usb) + find_path(LIBUSB_INCLUDE_DIR libusb.h PATH_SUFFIXES libusb-1.0) + if (NOT LIBUSB_LIBRARIES OR NOT LIBUSB_INCLUDE_DIR) + message(SEND_ERROR "Unable to find libusb-1.0 dependency.\n" + "If you want to disable the USB backend, set WITH_USB_BACKEND=OFF.") + else() + message(STATUS "Looking for libusb-1.0 : Found") - if(WITH_USB_BACKEND) set(IIOD_CLIENT 1) set(NEED_LIBXML2 1) set(NEED_THREADS 1) @@ -158,13 +161,10 @@ if (LIBUSB_LIBRARIES AND LIBUSB_INCLUDE_DIR) set(TEMP1 ${CMAKE_REQUIRED_INCLUDES}) list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBUSB_LIBRARIES}) list(APPEND CMAKE_REQUIRED_INCLUDES ${LIBUSB_INCLUDE_DIR}) - check_symbol_exists(libusb_get_version libusb.h - HAS_LIBUSB_GETVERSION) + check_symbol_exists(libusb_get_version libusb.h HAS_LIBUSB_GETVERSION) set(CMAKE_REQUIRED_LIBRARIES ${TEMP}) - set(CMAKE_REQUIRED_INCLUDES ${TEMP1}) + set(CMAKE_REQUIRED_INCLUDES ${TEMP1}) endif() -else() - message(STATUS "Looking for libusb-1.0 : Failed; building without usb") endif() # make sure all check_symbol_exists are before this point, otherwise they fail @@ -250,31 +250,31 @@ if(WITH_LOCAL_BACKEND) endif() endif() -find_library(LIBSERIALPORT_LIBRARIES serialport) -find_path(LIBSERIALPORT_INCLUDE_DIR libserialport.h) -if (LIBSERIALPORT_LIBRARIES AND LIBSERIALPORT_INCLUDE_DIR) - option(WITH_SERIAL_BACKEND "Enable the serial backend" ON) +option(WITH_SERIAL_BACKEND "Enable the serial backend" ON) +if (WITH_SERIAL_BACKEND) + find_library(LIBSERIALPORT_LIBRARIES serialport) + find_path(LIBSERIALPORT_INCLUDE_DIR libserialport.h) + if (NOT LIBSERIALPORT_LIBRARIES OR NOT LIBSERIALPORT_INCLUDE_DIR) + message(SEND_ERROR "Unable to find libserialport dependency.\n" + "If you want to disable the serial backend, set WITH_SERIAL_BACKEND=OFF.") + else() + message(STATUS "Looking for libserialport : Found") - if (WITH_SERIAL_BACKEND) file(STRINGS ${LIBSERIALPORT_INCLUDE_DIR}/libserialport.h LIBSERIALPORT_VERSION_STR REGEX "SP_PACKAGE_VERSION_STRING") string(REGEX REPLACE "#define SP_PACKAGE_VERSION_STRING \"(.*)\"" "\\1" LIBSERIALPORT_VERSION ${LIBSERIALPORT_VERSION_STR}) if ("${LIBSERIALPORT_VERSION}" VERSION_LESS 0.1.1) - message(WARNING "The installed version of libserialport is too old. The minimum version supported is 0.1.1. Disabling Serial support.") - SET(WITH_SERIAL_BACKEND OFF) - else() - message(STATUS "Looking for libserialport : Found") - list(APPEND LIBIIO_CFILES serial.c) - list(APPEND LIBS_TO_LINK ${LIBSERIALPORT_LIBRARIES}) - - set(NEED_THREADS 1) - set(IIOD_CLIENT 1) - set(NEED_LIBXML2 1) - - include_directories(${LIBSERIALPORT_INCLUDE_DIR}) + message(SEND_ERROR "The installed version of libserialport is too old. The minimum version supported is 0.1.1.") endif() + + list(APPEND LIBIIO_CFILES serial.c) + list(APPEND LIBS_TO_LINK ${LIBSERIALPORT_LIBRARIES}) + + set(NEED_THREADS 1) + set(IIOD_CLIENT 1) + set(NEED_LIBXML2 1) + + include_directories(${LIBSERIALPORT_INCLUDE_DIR}) endif() -else() - message(STATUS "Looking for libserialport : Failed; building without serial") endif() option(WITH_ZSTD "Support for ZSTD compressed metadata" OFF) @@ -283,7 +283,8 @@ if (WITH_ZSTD) find_path(LIBZSTD_INCLUDE_DIR zstd.h) if (NOT LIBZSTD_LIBRARIES OR NOT LIBZSTD_INCLUDE_DIR) - message(SEND_ERROR "Unable to find libzstd") + message(SEND_ERROR "Unable to find libzstd dependency.\n" + "If you want to disable ZSTD compression support, set WITH_ZSTD=OFF.") endif() list(APPEND LIBS_TO_LINK ${LIBZSTD_LIBRARIES}) @@ -299,12 +300,15 @@ if(WITH_NETWORK_BACKEND) endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - include(CheckCSourceCompiles) - check_c_source_compiles("#include \nint main(void) { return O_TMPFILE; }" HAS_O_TMPFILE) - - if (HAS_O_TMPFILE) - option(WITH_NETWORK_GET_BUFFER "Enable experimental zero-copy transfers" OFF) - endif(HAS_O_TMPFILE) + option(WITH_NETWORK_GET_BUFFER "Enable experimental zero-copy transfers" OFF) + if (WITH_NETWORK_GET_BUFFER) + include(CheckCSourceCompiles) + check_c_source_compiles("#include \nint main(void) { return O_TMPFILE; }" HAS_O_TMPFILE) + + if (NOT HAS_O_TMPFILE) + message(SEND_ERROR "Zero-copy requires the O_TMPFILE flag, which is not available on the system.") + endif() + endif() check_c_source_compiles("#include \nint main(void) { return eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); }" WITH_NETWORK_EVENTFD) endif() @@ -321,34 +325,37 @@ if(WITH_NETWORK_BACKEND) list(APPEND LIBIIO_CFILES network-unix.c) endif() - find_library(AVAHI_CLIENT_LIBRARIES avahi-client) - find_library(AVAHI_COMMON_LIBRARIES avahi-common) - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + option(HAVE_DNS_SD "Enable DNS-SD (ZeroConf) support" ON) + if (NOT HAVE_DNS_SD) + message(STATUS "Building without DNS-SD (ZeroConf) support") + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_library(CORE_SERVICES CoreServices) message(STATUS "Building with CFNetServices, an Apple DNS SD implementation") - set(HAVE_DNS_SD ON) list(APPEND LIBIIO_CFILES dns_sd_bonjour.c dns_sd.c) list(APPEND LIBS_TO_LINK ${CORE_SERVICES} ) - elseif(AVAHI_CLIENT_LIBRARIES AND AVAHI_COMMON_LIBRARIES) - message(STATUS "Building with Avahi, a DNS SD implementation") - set(HAVE_DNS_SD ON) - set(HAVE_AVAHI ON) - - list(APPEND LIBIIO_CFILES dns_sd_avahi.c dns_sd.c) - set(AVAHI_LIBRARIES ${AVAHI_CLIENT_LIBRARIES} ${AVAHI_COMMON_LIBRARIES}) - list(APPEND LIBS_TO_LINK ${AVAHI_LIBRARIES}) elseif(WIN32) - set(HAVE_DNS_SD ON) list(APPEND LIBIIO_CFILES dns_sd_windows.c dns_sd.c) if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") set_source_files_properties(dns_sd_windows.c PROPERTIES COMPILE_FLAGS "-Wno-unused-function") endif() message(STATUS "Building with mdns, A Public domain mDNS/DNS-SD library in C ") else() - message(STATUS "Building without DNS-SD (Zeroconf) support") + find_library(AVAHI_CLIENT_LIBRARIES avahi-client) + find_library(AVAHI_COMMON_LIBRARIES avahi-common) + if (NOT AVAHI_CLIENT_LIBRARIES OR NOT AVAHI_COMMON_LIBRARIES) + message(SEND_ERROR "Unable to find libavahi-common / libavahi-client dependencies.\n" + "If you want to disable DNS-SD (ZeroConf) support, set HAVE_DNS_SD=OFF.") + endif() + + message(STATUS "Building with Avahi, a DNS-SD (ZeroConf) implementation") + set(HAVE_AVAHI ON) + + list(APPEND LIBIIO_CFILES dns_sd_avahi.c dns_sd.c) + set(AVAHI_LIBRARIES ${AVAHI_CLIENT_LIBRARIES} ${AVAHI_COMMON_LIBRARIES}) + list(APPEND LIBS_TO_LINK ${AVAHI_LIBRARIES}) endif() set(NEED_THREADS 1) @@ -358,44 +365,47 @@ else() message(STATUS "Building without network support") endif() -# Since libxml2-2.9.2, libxml2 provides its own LibXml2-config.cmake, with all -# variables correctly set. -# So, try first to find the CMake module provided by libxml2 package, then fallback -# on the CMake's FindLibXml2.cmake module (which can lack some definition, especially -# in static build case). -find_package(LibXml2 QUIET NO_MODULE) -if(DEFINED LIBXML2_VERSION_STRING) - set(LIBXML2_FOUND ON) - set(LIBXML2_INCLUDE_DIR ${LIBXML2_INCLUDE_DIRS}) -else() - include(FindLibXml2) -endif() -if (LIBXML2_FOUND) - option(WITH_XML_BACKEND "Enable the XML backend" ON) - - if (WITH_XML_BACKEND) - list(APPEND LIBIIO_CFILES xml.c) +option(WITH_XML_BACKEND "Enable the XML backend" ON) +if (WITH_XML_BACKEND) + # Since libxml2-2.9.2, libxml2 provides its own LibXml2-config.cmake, with all + # variables correctly set. + # So, try first to find the CMake module provided by libxml2 package, then fallback + # on the CMake's FindLibXml2.cmake module (which can lack some definition, especially + # in static build case). + find_package(LibXml2 QUIET NO_MODULE) + if(DEFINED LIBXML2_VERSION_STRING) + set(LIBXML2_FOUND ON) + set(LIBXML2_INCLUDE_DIR ${LIBXML2_INCLUDE_DIRS}) + else() + include(FindLibXml2) + endif() - include_directories(${LIBXML2_INCLUDE_DIR}) - list(APPEND LIBS_TO_LINK ${LIBXML2_LIBRARIES}) + if (NOT LIBXML2_FOUND) + message(SEND_ERROR "Unable to find libxml2 dependency.\n" + "If you want to disable the XML backend, set WITH_XML_BACKEND=OFF.") endif() -endif() -if (NEED_LIBXML2 AND NOT (LIBXML2_FOUND AND WITH_XML_BACKEND)) - message(SEND_ERROR "The selected backends require libxml2 and the XML backend to be enabled") + list(APPEND LIBIIO_CFILES xml.c) + + include_directories(${LIBXML2_INCLUDE_DIR}) + list(APPEND LIBS_TO_LINK ${LIBXML2_LIBRARIES}) +elseif(NEED_LIBXML2) + message(SEND_ERROR "Enabled backends require the XML backend to be enabled as well.\n" + "If you want to enable the XML backend, set WITH_XML_BACKEND=ON.") endif() -if (NEED_THREADS) +option(NO_THREADS "Disable multi-threading support" OFF) +if (NEED_THREADS AND NOT NO_THREADS) if (NOT WIN32) find_library(PTHREAD_LIBRARIES pthread) - if (PTHREAD_LIBRARIES) - list(APPEND LIBS_TO_LINK ${PTHREAD_LIBRARIES}) - else() - message(WARNING "pthread library not found; support for threads will be disabled") - set(NO_THREADS ON) + if (NOT PTHREAD_LIBRARIES) + message(SEND_ERROR "Unable to find pthread dependency.\n" + "If you want to disable multi-threading support, set NO_THREADS=ON.") endif() + + list(APPEND LIBS_TO_LINK ${PTHREAD_LIBRARIES}) endif() list(APPEND LIBIIO_CFILES lock.c) @@ -569,8 +579,8 @@ if(WITH_IIOD) set(UPSTART_CONF_INSTALL_DIR /etc/init CACHE PATH "default install path for upstart conf files") if (NOT PTHREAD_LIBRARIES) - message(WARNING "IIOD requires threads support; disabling") - set(WITH_IIOD OFF CACHE BOOL "" FORCE) + message(SEND_ERROR "IIOD requires pthread support\n." + "If you want to disable IIOD, set WITH_IIOD=OFF.") else() add_subdirectory(iiod) endif() diff --git a/iiod/CMakeLists.txt b/iiod/CMakeLists.txt index 9a0b6ff27..b91f00141 100644 --- a/iiod/CMakeLists.txt +++ b/iiod/CMakeLists.txt @@ -27,29 +27,33 @@ endif () set(IIOD_CFILES iiod.c ops.c thread-pool.c ${BISON_parser_OUTPUTS} ${FLEX_lexer_OUTPUTS}) -find_library(LIBAIO_LIBRARIES aio) -find_path(LIBAIO_INCLUDE_DIR libaio.h) - -if (LIBAIO_LIBRARIES AND LIBAIO_INCLUDE_DIR) - option(WITH_AIO "Build IIOD with async. I/O support" ON) -endif () +option(WITH_AIO "Build IIOD with async. I/O support" ON) +if (WITH_AIO) + find_library(LIBAIO_LIBRARIES aio) + find_path(LIBAIO_INCLUDE_DIR libaio.h) -include(CheckTypeSize) -set(CMAKE_EXTRA_INCLUDE_FILES linux/usb/functionfs.h) -check_type_size("struct usb_functionfs_descs_head_v2" FUNCTIONFS_V2) -set(CMAKE_EXTRA_INCLUDE_FILES) + if (NOT LIBAIO_LIBRARIES OR NOT LIBAIO_INCLUDE_DIR) + message(SEND_ERROR "Unable to find libaio dependency.\n" + "If you want to disable async. I/O support, set WITH_AIO=OFF.") + endif () -if (HAVE_FUNCTIONFS_V2) - OPTION(WITH_IIOD_USBD "Add support for USB through FunctionFS within IIOD" ${WITH_AIO}) + message(STATUS "Looking for libaio: Found") + option(WITH_IIOD_USBD "Add support for USB through FunctionFS within IIOD" ON) if (WITH_IIOD_USBD) - if (NOT WITH_AIO) - message(SEND_ERROR "USB support in IIOD requires async. I/O support") - endif (NOT WITH_AIO) + include(CheckTypeSize) + set(CMAKE_EXTRA_INCLUDE_FILES linux/usb/functionfs.h) + check_type_size("struct usb_functionfs_descs_head_v2" FUNCTIONFS_V2) + set(CMAKE_EXTRA_INCLUDE_FILES) + + if (NOT HAVE_FUNCTIONFS_V2) + message(SEND_ERROR "Linux kernel headers are too old.\n" + "If you want to disable USB support, set WITH_IIOD_USBD=OFF.") + endif() set(IIOD_CFILES ${IIOD_CFILES} usbd.c) - endif (WITH_IIOD_USBD) -endif (HAVE_FUNCTIONFS_V2) + endif() +endif() add_executable(iiod ${IIOD_CFILES}) set_target_properties(iiod PROPERTIES From 9c873759103f6e7cc700a4795f9f3743d7f5d8e6 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Thu, 6 May 2021 11:17:23 +0100 Subject: [PATCH 6/8] CI: Update build script for Mac OSX Disable serial backend, enable ZSTD support. Signed-off-by: Paul Cercueil --- CI/travis/before_install_darwin | 2 +- CI/travis/make_darwin | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CI/travis/before_install_darwin b/CI/travis/before_install_darwin index 166077203..bf6cfc25d 100755 --- a/CI/travis/before_install_darwin +++ b/CI/travis/before_install_darwin @@ -2,4 +2,4 @@ . CI/travis/lib.sh -brew_install_if_not_exists cmake doxygen libusb libxml2 ncurses cdk +brew_install_if_not_exists cmake doxygen libusb libxml2 ncurses cdk zstd diff --git a/CI/travis/make_darwin b/CI/travis/make_darwin index be729ebaa..52902598c 100755 --- a/CI/travis/make_darwin +++ b/CI/travis/make_darwin @@ -1,5 +1,7 @@ #!/bin/sh -e +LIBIIO_BUILD_CONF="-DWITH_SERIAL_BACKEND=OFF -DWITH_ZSTD=ON" + if [ "x${COVERITY_SCAN_PROJECT_NAME}" != "x" ] ; then exit 0; fi @@ -18,13 +20,13 @@ build_osx() { mkdir -p build cd build -build_osx "-DOSX_PACKAGE=ON -DPYTHON_BINDINGS=ON -DWITH_EXAMPLES=ON" +build_osx "-DOSX_PACKAGE=ON -DPYTHON_BINDINGS=ON -DWITH_EXAMPLES=ON ${LIBIIO_BUILD_CONF}" cd .. mkdir -p build_tar cd build_tar -build_osx "-DOSX_PACKAGE=OFF -DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON" +build_osx "-DOSX_PACKAGE=OFF -DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON ${LIBIIO_BUILD_CONF}" echo "### make package" make package echo "### files are" From ff96fc8279b689d0b6b2a2f9499899da9c73e6c1 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Thu, 6 May 2021 11:29:33 +0100 Subject: [PATCH 7/8] CI: Update build script for Windows Disable serial and USB backends. Signed-off-by: Paul Cercueil --- CI/build_win.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CI/build_win.ps1 b/CI/build_win.ps1 index 9f244ddbe..56f745279 100644 --- a/CI/build_win.ps1 +++ b/CI/build_win.ps1 @@ -7,5 +7,5 @@ $src_dir=$pwd mkdir build cd build -cmake -G "$COMPILER" -A "$ARCH" -DPYTHON_BINDINGS=ON -DLIBXML2_LIBRARIES="$src_dir\deps\lib\libxml2.dll.a" .. +cmake -G "$COMPILER" -A "$ARCH" -DENABLE_IPV6=OFF -DWITH_USB_BACKEND=OFF -DWITH_SERIAL_BACKEND=OFF -DPYTHON_BINDINGS=ON -DLIBXML2_LIBRARIES="$src_dir\deps\lib\libxml2.dll.a" .. cmake --build . --config Release From c31cc2f3e0d9a14545283e15df7fd514dbf1f8c3 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Thu, 6 May 2021 11:21:46 +0100 Subject: [PATCH 8/8] CI: Update build script for Linux Enable ZSTD support, except on Ubuntu 16.04 where it doesn't build, and explicitely set the build options as it is required now. Note that the serial backend is disabled on Ubuntu 16.04 as its version of libserialport is too old, and USB support in IIOD is disabled in CentOS 7 as its kernel headers are too old. Signed-off-by: Paul Cercueil --- CI/travis/before_install_linux | 4 ++-- CI/travis/make_linux | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CI/travis/before_install_linux b/CI/travis/before_install_linux index 3cdc3844f..db248fd65 100755 --- a/CI/travis/before_install_linux +++ b/CI/travis/before_install_linux @@ -27,7 +27,7 @@ handle_centos() { # FIXME: see about adding `libserialport-dev` from EPEL ; maybe libusb-1.0.0-devel... yum -y groupinstall 'Development Tools' yum -y install cmake libxml2-devel libusb1-devel libaio-devel \ - bzip2 gzip rpm rpm-build + bzip2 gzip rpm rpm-build libzstd-devel if [ "$(get_version | head -c 1)" = "7" ] ; then # install Cmake3, and make it the default @@ -66,7 +66,7 @@ handle_generic_docker() { handle_default() { sudo apt-get -qq update sudo DEBIAN_FRONTEND=noninteractive apt-get install -y cmake graphviz \ - libaio-dev libavahi-client-dev libserialport-dev \ + libaio-dev libavahi-client-dev libserialport-dev libzstd-dev \ libavahi-common-dev libusb-1.0-0-dev libxml2-dev rpm tar \ bzip2 gzip flex bison git libncurses5-dev libcdk5-dev \ doxygen man2html python3 python3-pip python3-setuptools diff --git a/CI/travis/make_linux b/CI/travis/make_linux index d215d4d6f..cf732d5d1 100755 --- a/CI/travis/make_linux +++ b/CI/travis/make_linux @@ -44,6 +44,13 @@ handle_default() { FLAGS="-DENABLE_PACKAGING=ON -DDEB_DETECT_DEPENDENCIES=ON -DWITH_EXAMPLES=ON ${PYTHON_HELP} ${DOC_HELP} ${MAN_HELP}" + # Ubuntu Xenial's libserialport and libzstd are too old + if [ "${OS_VERSION}" = xenial ] ; then + FLAGS="${FLAGS} -DWITH_SERIAL_BACKEND=OFF" + else + FLAGS="${FLAGS} -DWITH_ZSTD=ON" + fi + echo "### cmake ${FLAGS}" cmake ${FLAGS} .. @@ -103,7 +110,13 @@ handle_centos() { echo "handle centos" mkdir -p build cd build - cmake -DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON .. + + FLAGS="-DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON -DWITH_SERIAL_BACKEND=OFF -DWITH_ZSTD=ON" + + # CentOS 7's kernel headers are too old for USB support in IIOD + [ "${OS_VERSION}" = centos7 ] && FLAGS="${FLAGS} -DWITH_IIOD_USBD=OFF" + + cmake ${FLAGS} .. make make package cd ..