58 lines
2.3 KiB
CMake
58 lines
2.3 KiB
CMake
#
|
|
# Build libmodbus entirely under the current binary dir and expose IMPORTED target: modbus
|
|
#
|
|
include(ExternalProject)
|
|
|
|
# ---- Configurable inputs ----
|
|
set(LIBMODBUS_GIT_REPO "https://github.com/stephane/libmodbus.git" CACHE STRING "libmodbus git repository")
|
|
set(LIBMODBUS_GIT_TAG "v3.1.10" CACHE STRING "git tag/branch for libmodbus")
|
|
|
|
# ---- Layout strictly in BINARY dir ----
|
|
set(MODBUS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/libmodbus") # install root (include/, lib/)
|
|
set(MODBUS_SRC "${CMAKE_CURRENT_BINARY_DIR}/libmodbus-src") # git checkout
|
|
set(MODBUS_BUILD "${CMAKE_CURRENT_BINARY_DIR}/libmodbus-build") # out-of-source build dir
|
|
set(MODBUS_STATIC_LIB "${MODBUS_PREFIX}/lib/libmodbus.a")
|
|
set(MODBUS_INCLUDES "${MODBUS_PREFIX}/include")
|
|
|
|
file(MAKE_DIRECTORY "${MODBUS_PREFIX}")
|
|
file(MAKE_DIRECTORY "${MODBUS_BUILD}")
|
|
file(MAKE_DIRECTORY "${MODBUS_INCLUDES}")
|
|
|
|
# Some environments need -fPIC for static archives used in shared libs
|
|
set(_LIBMODBUS_ENV "CFLAGS=-fPIC" "CPPFLAGS=-fPIC" "CXXFLAGS=-fPIC")
|
|
|
|
ExternalProject_Add(libmodbus_ep
|
|
PREFIX "${MODBUS_PREFIX}" # bookkeeping also under binary dir
|
|
GIT_REPOSITORY "${LIBMODBUS_GIT_REPO}"
|
|
GIT_TAG "${LIBMODBUS_GIT_TAG}"
|
|
GIT_SHALLOW 1
|
|
UPDATE_DISCONNECTED 1
|
|
|
|
SOURCE_DIR "${MODBUS_SRC}"
|
|
BINARY_DIR "${MODBUS_BUILD}"
|
|
|
|
# Run autogen in source tree, then configure out-of-source pointing to install prefix under binary dir
|
|
CONFIGURE_COMMAND
|
|
${CMAKE_COMMAND} -E env ${_LIBMODBUS_ENV}
|
|
/bin/sh -c "cd '${MODBUS_SRC}' && ./autogen.sh && cd '${MODBUS_BUILD}' && '${MODBUS_SRC}/configure' --srcdir='${MODBUS_SRC}' --prefix='${MODBUS_PREFIX}' --enable-static=yes --disable-shared"
|
|
|
|
BUILD_COMMAND ${CMAKE_COMMAND} -E env ${_LIBMODBUS_ENV} make -j
|
|
INSTALL_COMMAND make install
|
|
|
|
BUILD_BYPRODUCTS "${MODBUS_STATIC_LIB}"
|
|
)
|
|
|
|
# ---- Imported target exposing the built library ----
|
|
add_library(modbus STATIC IMPORTED GLOBAL)
|
|
add_dependencies(modbus libmodbus_ep)
|
|
|
|
set_target_properties(modbus PROPERTIES
|
|
IMPORTED_LOCATION "${MODBUS_STATIC_LIB}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${MODBUS_INCLUDES}"
|
|
)
|
|
|
|
# (opcjonalnie) jeśli potrzebujesz ścieżek w innych miejscach projektu:
|
|
# set(MODBUS_PREFIX "${MODBUS_PREFIX}" PARENT_SCOPE)
|
|
# set(MODBUS_INCLUDES "${MODBUS_INCLUDES}" PARENT_SCOPE)
|
|
# set(MODBUS_STATIC_LIB "${MODBUS_STATIC_LIB}" PARENT_SCOPE)
|