From d4df989c615f18121df525d767a669f599b3b4e5 Mon Sep 17 00:00:00 2001 From: Schdro <> Date: Sun, 9 Apr 2023 14:24:52 +0200 Subject: [PATCH] Add support for building against system libraries of libserialport and Argtable3 --- CMakeLists.txt | 81 +++++++++++++++++++++----------------- README.md | 10 +++++ tools/blisp/CMakeLists.txt | 9 ++++- 3 files changed, 62 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c369de..c6a0d45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ project(blisp C) set(CMAKE_C_STANDARD 23) option(BLISP_BUILD_CLI "Build CLI Tool" OFF) +option(BLISP_USE_SYSTEM_LIBRARIES "Use system-installed libraries" "${CMAKE_USE_SYSTEM_LIBRARIES}") add_library(libblisp_obj OBJECT lib/blisp.c @@ -32,46 +33,54 @@ set_target_properties(libblisp_static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "static" OUTPUT_NAME "blisp") -if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") -target_sources(libblisp_obj PRIVATE +if(BLISP_USE_SYSTEM_LIBRARIES) + find_package(PkgConfig) + pkg_search_module(LIBSERIALPORT REQUIRED libserialport) + target_link_libraries(libblisp PUBLIC ${LIBSERIALPORT_LIBRARIES}) + target_link_libraries(libblisp_static PUBLIC ${LIBSERIALPORT_LIBRARIES}) + target_include_directories(libblisp_obj PUBLIC ${LIBSERIALPORT_INCLUDE_DIRS}) +else() + if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + target_sources(libblisp_obj PRIVATE ${CMAKE_SOURCE_DIR}/vendor/libserialport/serialport.c ${CMAKE_SOURCE_DIR}/vendor/libserialport/timing.c) -target_include_directories(libblisp_obj PRIVATE ${CMAKE_SOURCE_DIR}/vendor/libserialport) -endif() + target_include_directories(libblisp_obj PRIVATE ${CMAKE_SOURCE_DIR}/vendor/libserialport) + endif() -if(WIN32) - target_link_libraries(libblisp PRIVATE Setupapi.lib) - target_link_libraries(libblisp_static PRIVATE Setupapi.lib) - target_compile_definitions(libblisp_obj PRIVATE LIBSERIALPORT_MSBUILD) - target_sources(libblisp_obj PRIVATE - ${CMAKE_SOURCE_DIR}/vendor/libserialport/windows.c) -elseif(UNIX AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") - target_sources(libblisp_obj PRIVATE - ${CMAKE_SOURCE_DIR}/vendor/libserialport/linux.c - ${CMAKE_SOURCE_DIR}/vendor/libserialport/linux_termios.c) - target_compile_definitions(libblisp_obj PRIVATE - LIBSERIALPORT_ATBUILD - HAVE_TERMIOS2_SPEED - HAVE_STRUCT_TERMIOS2 - HAVE_DECL_BOTHER - "SP_API=__attribute__((visibility(\"default\")))" - "SP_PRIV=__attribute__((visibility(\"hidden\")))") - write_file(${CMAKE_SOURCE_DIR}/vendor/libserialport/config.h "// bypass errors.") -elseif(UNIX AND ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") - target_include_directories(libblisp_obj PRIVATE /usr/local/include/) - target_link_libraries(libblisp PRIVATE -L/usr/local/lib usb serialport) - target_link_libraries(libblisp_static PRIVATE -L/usr/local/lib usb serialport) -elseif(APPLE) - target_sources(libblisp_obj PRIVATE - ${CMAKE_SOURCE_DIR}/vendor/libserialport/macosx.c) - target_link_libraries(libblisp PRIVATE "-framework IOKit" "-framework CoreFoundation") - target_compile_definitions(libblisp_obj PRIVATE - LIBSERIALPORT_ATBUILD - "SP_PRIV=__attribute__((visibility(\"hidden\")))" - "SP_API=__attribute__((visibility(\"default\")))") - target_include_directories(libblisp_obj PRIVATE ${CMAKE_SOURCE_DIR}/vendor/libserialport) - write_file(${CMAKE_SOURCE_DIR}/vendor/libserialport/config.h "// bypass errors.") + if(WIN32) + target_link_libraries(libblisp PRIVATE Setupapi.lib) + target_link_libraries(libblisp_static PRIVATE Setupapi.lib) + target_compile_definitions(libblisp_obj PRIVATE LIBSERIALPORT_MSBUILD) + target_sources(libblisp_obj PRIVATE + ${CMAKE_SOURCE_DIR}/vendor/libserialport/windows.c) + elseif(UNIX AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + target_sources(libblisp_obj PRIVATE + ${CMAKE_SOURCE_DIR}/vendor/libserialport/linux.c + ${CMAKE_SOURCE_DIR}/vendor/libserialport/linux_termios.c) + target_compile_definitions(libblisp_obj PRIVATE + LIBSERIALPORT_ATBUILD + HAVE_TERMIOS2_SPEED + HAVE_STRUCT_TERMIOS2 + HAVE_DECL_BOTHER + "SP_API=__attribute__((visibility(\"default\")))" + "SP_PRIV=__attribute__((visibility(\"hidden\")))") + write_file(${CMAKE_SOURCE_DIR}/vendor/libserialport/config.h "// bypass errors.") + elseif(UNIX AND ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + target_include_directories(libblisp_obj PRIVATE /usr/local/include/) + target_link_libraries(libblisp PRIVATE -L/usr/local/lib usb serialport) + target_link_libraries(libblisp_static PRIVATE -L/usr/local/lib usb serialport) + elseif(APPLE) + target_sources(libblisp_obj PRIVATE + ${CMAKE_SOURCE_DIR}/vendor/libserialport/macosx.c) + target_link_libraries(libblisp PRIVATE "-framework IOKit" "-framework CoreFoundation") + target_compile_definitions(libblisp_obj PRIVATE + LIBSERIALPORT_ATBUILD + "SP_PRIV=__attribute__((visibility(\"hidden\")))" + "SP_API=__attribute__((visibility(\"default\")))") + target_include_directories(libblisp_obj PRIVATE ${CMAKE_SOURCE_DIR}/vendor/libserialport) + write_file(${CMAKE_SOURCE_DIR}/vendor/libserialport/config.h "// bypass errors.") + endif() endif() if(BLISP_BUILD_CLI) diff --git a/README.md b/README.md index 6dc9591..7a95463 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,16 @@ mkdir build && cd build cmake -DBLISP_BUILD_CLI=ON .. cmake --build . ``` + +For building against preinstalled system libraries of the used vendor +libraries (system maintainers), additionally define +`BLISP_USE_SYSTEM_LIBRARIES`, e.g. using following commands: +```bash +mkdir build && cd build +cmake -DBLISP_USE_SYSTEM_LIBRARIES=ON -DBLISP_BUILD_CLI=ON .. +cmake --build . +``` + #### Need more build details? [See here](https://github.com/pine64/blisp/wiki/Update-Pinecil-V2#build-blisp-flasher-from-code). ## Usage diff --git a/tools/blisp/CMakeLists.txt b/tools/blisp/CMakeLists.txt index ce38714..e694d7f 100644 --- a/tools/blisp/CMakeLists.txt +++ b/tools/blisp/CMakeLists.txt @@ -1,7 +1,12 @@ set(ARGTABLE3_ENABLE_TESTS OFF CACHE BOOL "Enable unit tests") set(ARGTABLE3_ENABLE_EXAMPLES OFF CACHE BOOL "Enable examples") #set(ARGTABLE3_REPLACE_GETOPT OFF CACHE BOOL "Replace getopt in the system C library") -add_subdirectory(${CMAKE_SOURCE_DIR}/vendor/argtable3 ${CMAKE_CURRENT_BINARY_DIR}/argtable3) + +if(BLISP_USE_SYSTEM_LIBRARIES) + find_package(Argtable3) +else() + add_subdirectory(${CMAKE_SOURCE_DIR}/vendor/argtable3 ${CMAKE_CURRENT_BINARY_DIR}/argtable3) +endif() add_executable(blisp src/main.c src/cmd/write.c src/util.c src/common.c src/cmd/iot.c) @@ -17,4 +22,4 @@ if (WIN32) target_link_libraries(blisp PRIVATE Setupapi.lib) elseif (APPLE) target_link_libraries(blisp PRIVATE "-framework IOKit" "-framework CoreFoundation") -endif () \ No newline at end of file +endif ()