From c9572f6c6b9a2bd368d2e439ebc9aa0a8c09846f Mon Sep 17 00:00:00 2001 From: Marius Greuel Date: Tue, 28 Dec 2021 14:14:41 +0100 Subject: [PATCH] Add external libraries to CMake project --- .github/workflows/build_cmake.yml | 28 +++++++++++ src/CMakeLists.txt | 78 +++++++++++++++++++------------ 2 files changed, 75 insertions(+), 31 deletions(-) diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index bcbf72ef..df09ca8e 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -95,6 +95,34 @@ jobs: name: macos-x86_64 path: | ${{github.workspace}}/build/* + msvc: + runs-on: windows-latest + defaults: + run: + working-directory: ./src + steps: + - uses: actions/checkout@v2 + - name: Install prerequisites + run: choco install winflexbison3 + - name: Configure + run: >- + cmake + -D DEBUG_CMAKE=1 + -D CMAKE_SYSTEM_VERSION=11 + -D CMAKE_C_FLAGS_RELWITHDEBINFO="/MT /GL /Zi /O2 /Ob1 /DNDEBUG" + -D CMAKE_CXX_FLAGS_RELWITHDEBINFO="/MT /GL /Zi /O2 /Ob1 /DNDEBUG" + -D CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO="/DEBUG /INCREMENTAL:NO /LTCG /OPT:REF /OPT:ICF" + -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -D USE_EXTERNAL=1 + -B ../build + - name: Build + run: cmake --build ../build --config ${{env.BUILD_TYPE}} + - name: Archive build artifacts + uses: actions/upload-artifact@v2 + with: + name: msvc-x64 + path: | + ${{github.workspace}}/build/* mingw: runs-on: windows-latest defaults: diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 917b41cb..a631d1f3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,18 +30,18 @@ option(BUILD_DOC "Enable building documents" OFF) option(HAVE_LINUXGPIO "Enable Linux sysfs GPIO support" OFF) option(HAVE_LINUXSPI "Enable Linux SPI support" OFF) option(HAVE_PARPORT "Enable parallel port support" OFF) -option(USE_EXTERNAL "Use local code from the 'external' folder" OFF) +option(USE_EXTERNAL "Use external code from GitHub repositories" OFF) option(USE_LIBUSBWIN32 "Prefer libusb-win32 over libusb" OFF) option(DEBUG_CMAKE "Enable debugging output for this CMake project" OFF) include(CheckIncludeFile) include(CheckFunctionExists) include(GNUInstallDirs) +include(FetchContent) include(FindPackageMessage) set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}") set(AVRDUDE_FULL_VERSION ${CMAKE_PROJECT_VERSION}) -set(AVRDUDE_EXTERNAL_PATH "${PROJECT_SOURCE_DIR}/external") # ===================================== # Get Git commit info @@ -249,41 +249,57 @@ if(HAVE_LIBREADLINE) endif() # ===================================== -# Use local libraries if requested +# Use external libraries if requested # ===================================== if(USE_EXTERNAL) - if(EXISTS "${AVRDUDE_EXTERNAL_PATH}/libelf/CMakeLists.txt") - message(STATUS "Using local library 'libelf'") - add_subdirectory(${AVRDUDE_EXTERNAL_PATH}/libelf) - set(LIB_LIBELF libelf) - set(HAVE_LIBELF 1) - set(HAVE_LIBELF_H 1) - endif() + FetchContent_Declare(libelf + GIT_REPOSITORY https://github.com/mariusgreuel/libelf-win.git + GIT_TAG e5a39bf19bd6598c42e09172be5a78ceec2a065c + ) - if(EXISTS "${AVRDUDE_EXTERNAL_PATH}/libusb/CMakeLists.txt") - message(STATUS "Using local library 'libusb'") - add_subdirectory(${AVRDUDE_EXTERNAL_PATH}/libusb) - set(LIB_LIBUSB libusb) - set(HAVE_LIBUSB 1) - set(HAVE_LUSB0_USB_H 1) - endif() + FetchContent_Declare(libusb + GIT_REPOSITORY https://github.com/mariusgreuel/libusb-win.git + GIT_TAG 632bc25d04eff563cc00de29435b9a7ed6f4654c + ) - if(EXISTS "${AVRDUDE_EXTERNAL_PATH}/libhidapi/CMakeLists.txt") - message(STATUS "Using local library 'libhidapi'") - add_subdirectory(${AVRDUDE_EXTERNAL_PATH}/libhidapi) - set(LIB_LIBHIDAPI libhidapi) - set(HAVE_LIBHIDAPI 1) - set(HAVE_HIDAPI_HIDAPI_H 1) - endif() + FetchContent_Declare(libhidapi + GIT_REPOSITORY https://github.com/mariusgreuel/libhidapi-win.git + GIT_TAG e3700e951f762ef92871ff4fc94586e4d1c042a6 + ) - if(EXISTS "${AVRDUDE_EXTERNAL_PATH}/libftdi/CMakeLists.txt") - message(STATUS "Using local library 'libftdi'") - add_subdirectory(${AVRDUDE_EXTERNAL_PATH}/libftdi) - set(LIB_LIBFTDI libftdi) - set(HAVE_LIBFTDI 1) - set(HAVE_LIBFTDI_TYPE_232H 1) - endif() + FetchContent_Declare(libftdi + GIT_REPOSITORY https://github.com/mariusgreuel/libftdi-win.git + GIT_TAG facd9b16336539b68e8e824ece994d3d3eb2f091 + ) + + message(STATUS "Fetching external libraries, please wait...") + FetchContent_MakeAvailable( + libelf + libusb + libhidapi + libftdi + ) + + message(STATUS "Using external library 'libelf'") + set(LIB_LIBELF libelf) + set(HAVE_LIBELF 1) + set(HAVE_LIBELF_H 1) + + message(STATUS "Using external library 'libusb'") + set(LIB_LIBUSB libusb) + set(HAVE_LIBUSB 1) + set(HAVE_LUSB0_USB_H 1) + + message(STATUS "Using external library 'libhidapi'") + set(LIB_LIBHIDAPI libhidapi) + set(HAVE_LIBHIDAPI 1) + set(HAVE_HIDAPI_HIDAPI_H 1) + + message(STATUS "Using external library 'libftdi'") + set(LIB_LIBFTDI libftdi) + set(HAVE_LIBFTDI 1) + set(HAVE_LIBFTDI_TYPE_232H 1) endif() # =====================================