157 lines
5.8 KiB
CMake
157 lines
5.8 KiB
CMake
set(VERSION_INFO_MAJOR 1)
|
|
set(VERSION_INFO_MINOR 0)
|
|
set(VERSION_INFO_PATCH 0)
|
|
|
|
if (NOT CMAKE_INSTALL_LIBDIR)
|
|
include(GNUInstallDirs)
|
|
endif (NOT CMAKE_INSTALL_LIBDIR)
|
|
|
|
# Fall back to just "lib" if the item provided by GNUInstallDirs doesn't exist
|
|
# For example, on Ubuntu 13.10 with CMake 2.8.11.2,
|
|
# /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} doesn't exist.
|
|
if (NOT EXISTS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
|
message(STATUS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} does not exist. Defaulting libcyusbserial install location to ${CMAKE_INSTALL_PREFIX}/lib.")
|
|
set(CMAKE_INSTALL_LIBDIR lib)
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
# Include paths
|
|
################################################################################
|
|
set(LIBCYUSBSERIAL_INCLUDES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include
|
|
)
|
|
|
|
|
|
################################################################################
|
|
# Build dependencies
|
|
################################################################################
|
|
if(MSVC)
|
|
set(LIBCYUSBSERIAL_INCLUDES ${LIBCYUSBSERIAL_INCLUDES} ${MSVC_C99_INCLUDES})
|
|
|
|
find_package(LibPThreadsWin32 REQUIRED)
|
|
if(LIBPTHREADSWIN32_FOUND)
|
|
set(HAVE_THREADS true)
|
|
set(LIBCYUSBSERIAL_INCLUDES
|
|
${LIBCYUSBSERIAL_INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS})
|
|
set(LIBCYUSBSERIAL_LIBS
|
|
${LIBCYUSBSERIAL_LIBS} ${LIBPTHREADSWIN32_LIBRARIES})
|
|
add_definitions(-DHAVE_STRUCT_TIMESPEC)
|
|
else()
|
|
set(HAVE_THREADS false)
|
|
endif()
|
|
else(MSVC)
|
|
find_package(Threads REQUIRED)
|
|
if(Threads_FOUND)
|
|
set(HAVE_THREADS true)
|
|
else()
|
|
set(HAVE_THREADS false)
|
|
endif()
|
|
endif(MSVC)
|
|
|
|
if (NOT HAVE_THREADS)
|
|
message(FATAL_ERROR "pthreads not found. This is required to build libcyusbserial.")
|
|
endif()
|
|
|
|
if(NOT LIBUSB_FOUND)
|
|
message(FATAL_ERROR "libusb-1.0 not found. This is required to use the libcyusbserial libusb backend. For binary releases, try setting LIBUSB_PATH.")
|
|
else(NOT LIBUSB_FOUND)
|
|
if(LIBUSB_VERSION)
|
|
if(NOT LIBUSB_VERSION VERSION_LESS "1.0.10")
|
|
add_definitions(-DHAVE_LIBUSB_GET_VERSION)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
# We require v1.0.19 because it provides Windows 8 USB 3.0
|
|
# speed detection fixes, additional AMD/Intel USB 3.0 root
|
|
# hub support, and some fixes to issues reported on v1.0.18
|
|
# that yielded corrupted samples.
|
|
if(${LIBUSB_VERSION} VERSION_LESS "1.0.19")
|
|
message(FATAL_ERROR "libusb v1.0.19 is required in Windows.\n"
|
|
"Please update libusb or consider using the Cypress backend if this is not possible.\n"
|
|
"Detected version: ${LIBUSB_VERSION}\n")
|
|
endif()
|
|
elseif(APPLE)
|
|
# A number of important changes were included in libusb
|
|
# v1.0.16 hrough v1.0.18, including SuperSpeed support, 64-bit support,
|
|
# and various build and crash fixes.
|
|
if(${LIBUSB_VERSION} VERSION_LESS "1.0.18")
|
|
message(FATAL_ERROR "libusb v1.0.18 is required in OS X. Please update libusb."
|
|
"Detected version: ${LIBUSB_VERSION}\n")
|
|
endif()
|
|
elseif(UNIX)
|
|
# A number of reported issues supposedly became resolved after
|
|
# updating to >= 1.0.16.
|
|
if(${LIBUSB_VERSION} VERSION_LESS "1.0.16")
|
|
message(WARNING "\nlibusb >= 1.0.16 is HIGHLY recommended. "
|
|
"If you experience issues or poor performance, please try updating libusb.\n"
|
|
"Detected version: ${LIBUSB_VERSION}")
|
|
endif()
|
|
else()
|
|
message(WARNING "Unexpected system type. Please report this warning to developers.")
|
|
endif()
|
|
else()
|
|
message(WARNING "Not checking libcyusbserial/libusb compatibility because LIBUSB_VERSION is not defined.")
|
|
endif()
|
|
set(LIBCYUSBSERIAL_INCLUDES ${LIBCYUSBSERIAL_INCLUDES} ${LIBUSB_INCLUDE_DIRS})
|
|
endif(NOT LIBUSB_FOUND)
|
|
|
|
if(MSVC)
|
|
set(LIBCYUSBSERIAL_INCLUDES ${LIBCYUSBSERIAL_INCLUDES}
|
|
${LIBPTHREADSWIN32_INCLUDE_DIRS})
|
|
endif()
|
|
|
|
include_directories(${LIBCYUSBSERIAL_INCLUDES})
|
|
|
|
|
|
################################################################################
|
|
# Configure source files
|
|
################################################################################
|
|
set(LIBCYUSBSERIAL_SOURCE
|
|
cyusb.c
|
|
cyuart.c
|
|
cyi2c.c
|
|
cyspi.c
|
|
cyphdc.c
|
|
cyjtag.c
|
|
cymisc.c
|
|
)
|
|
|
|
if(MSVC)
|
|
set(LIBCYUSBSERIAL_SOURCE ${LIBCYUSBSERIAL_SOURCE}
|
|
${PROJECT_SOURCE_DIR}/windows/gettimeofday.c
|
|
${PROJECT_SOURCE_DIR}/windows/usleep.c
|
|
)
|
|
endif(MSVC)
|
|
|
|
add_library(cyusbserial SHARED ${LIBCYUSBSERIAL_SOURCE})
|
|
|
|
|
|
################################################################################
|
|
# Build configuration
|
|
################################################################################
|
|
|
|
if(MSVC)
|
|
add_definitions(-DCYUSBSERIAL_EXPORTS)
|
|
set(LIBCYUSBSERIAL_LIBS ${LIBCYUSBSERIAL_LIBS} ${LIBPTHREADSWIN32_LIBRARIES})
|
|
else()
|
|
set(LIBCYUSBSERIAL_LIBS ${LIBCYUSBSERIAL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
|
|
endif(MSVC)
|
|
|
|
set(LIBCYUSBSERIAL_LIBS ${LIBCYUSBSERIAL_LIBS} ${LIBUSB_LIBRARIES})
|
|
|
|
target_link_libraries(cyusbserial ${LIBCYUSBSERIAL_LIBS})
|
|
|
|
# Set shared library version
|
|
set_target_properties(cyusbserial PROPERTIES SOVERSION ${VERSION_INFO_MAJOR})
|
|
|
|
|
|
################################################################################
|
|
# Library installation information
|
|
################################################################################
|
|
install(TARGETS cyusbserial
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .a/.lib
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} # .dll
|
|
)
|