Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 66 additions & 61 deletions third-party/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,24 @@ endif()
set(ARCHIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${FTDI_ARCHIVE}")
set(TEMP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/temp_extract")

set(NEED_DOWNLOAD FALSE)
if(NOT EXISTS "${DEBUG_LIB}" OR NOT EXISTS "${RELEASE_LIB}")
set(NEED_DOWNLOAD TRUE)
set(DOWNLOAD_SUCCESS FALSE)

if(EXISTS "${ARCHIVE_PATH}")
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar tf "${ARCHIVE_PATH}"
RESULT_VARIABLE TAR_RESULT OUTPUT_QUIET ERROR_QUIET)
if(TAR_RESULT EQUAL 0)
set(DOWNLOAD_SUCCESS TRUE)
message(STATUS "FTDI: using existing archive at ${ARCHIVE_PATH}")
else()
file(REMOVE "${ARCHIVE_PATH}")
endif()
endif()

if(NEED_DOWNLOAD)
if(NOT DOWNLOAD_SUCCESS)
set(RETRY_COUNT 0)
set(DOWNLOAD_SUCCESS FALSE)
while(RETRY_COUNT LESS 3)
math(EXPR RETRY_COUNT "${RETRY_COUNT} + 1")
if(EXISTS "${ARCHIVE_PATH}")
file(REMOVE "${ARCHIVE_PATH}")
endif()
file(DOWNLOAD "${FTDI_URL}" "${ARCHIVE_PATH}" SHOW_PROGRESS STATUS DOWNLOAD_STATUS TIMEOUT 300)
list(GET DOWNLOAD_STATUS 0 DOWNLOAD_ERROR_CODE)
if(DOWNLOAD_ERROR_CODE EQUAL 0 AND EXISTS "${ARCHIVE_PATH}")
Expand All @@ -65,63 +70,63 @@ if(NEED_DOWNLOAD)
" ${ARCHIVE_PATH}\n"
"Then re-run cmake.")
endif()

file(REMOVE_RECURSE "${TEMP_DIR}")
file(MAKE_DIRECTORY "${TEMP_DIR}")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf "${ARCHIVE_PATH}" WORKING_DIRECTORY "${TEMP_DIR}")

if(WIN32)
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib")
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib")
file(GLOB SOURCE_LIB "${TEMP_DIR}/${FTDI_ZIP_LIB_GLOB}")
endif()

file(GLOB SOURCE_DLL "${TEMP_DIR}/${FTDI_ZIP_DLL_GLOB}")
if(SOURCE_DLL)
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin")
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin")
file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin")
get_filename_component(SOURCE_DLL_NAME "${SOURCE_DLL}" NAME)
if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/ftd2xx.dll")
endif()
file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin")
if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/ftd2xx.dll")
endif()
endif()
file(REMOVE_RECURSE "${TEMP_DIR}")
file(MAKE_DIRECTORY "${TEMP_DIR}")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf "${ARCHIVE_PATH}" WORKING_DIRECTORY "${TEMP_DIR}")

if(NOT SOURCE_LIB AND FTDI_WIN_ARCH STREQUAL "x64")
file(GLOB SOURCE_LIB "${TEMP_DIR}/Static/amd64/ftd2xx.lib")
endif()
if(NOT SOURCE_LIB)
message(FATAL_ERROR
"FTDI ${FTDI_WIN_ARCH} lib not found in the downloaded CDM package.\n"
"Manually download '${FTDI_ARCHIVE}' from:\n"
" ${FTDI_URL}\n"
"Place the downloaded file at:\n"
" ${ARCHIVE_PATH}\n"
"Then re-run cmake.")
if(WIN32)
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib")
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib")
file(GLOB SOURCE_LIB "${TEMP_DIR}/${FTDI_ZIP_LIB_GLOB}")

file(GLOB SOURCE_DLL "${TEMP_DIR}/${FTDI_ZIP_DLL_GLOB}")
if(SOURCE_DLL)
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin")
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin")
file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin")
get_filename_component(SOURCE_DLL_NAME "${SOURCE_DLL}" NAME)
if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/ftd2xx.dll")
endif()
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib")
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib")
get_filename_component(SOURCE_LIB_NAME "${SOURCE_LIB}" NAME)
if(NOT SOURCE_LIB_NAME STREQUAL "ftd2xx.lib")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib/${SOURCE_LIB_NAME}" "${DEBUG_LIB}")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib/${SOURCE_LIB_NAME}" "${RELEASE_LIB}")
file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin")
if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/ftd2xx.dll")
endif()
else()
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib")
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib")
file(GLOB SOURCE_LIB "${TEMP_DIR}/*/libftd2xx-static.a")
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib")
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib/libftd2xx-static.a" "${DEBUG_LIB}")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib/libftd2xx-static.a" "${RELEASE_LIB}")
endif()

file(REMOVE_RECURSE "${TEMP_DIR}")

if(NOT SOURCE_LIB AND FTDI_WIN_ARCH STREQUAL "x64")
file(GLOB SOURCE_LIB "${TEMP_DIR}/Static/amd64/ftd2xx.lib")
endif()
if(NOT SOURCE_LIB)
message(FATAL_ERROR
"FTDI ${FTDI_WIN_ARCH} lib not found in the downloaded CDM package.\n"
"Manually download '${FTDI_ARCHIVE}' from:\n"
" ${FTDI_URL}\n"
"Place the downloaded file at:\n"
" ${ARCHIVE_PATH}\n"
"Then re-run cmake.")
endif()
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib")
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib")
get_filename_component(SOURCE_LIB_NAME "${SOURCE_LIB}" NAME)
if(NOT SOURCE_LIB_NAME STREQUAL "ftd2xx.lib")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib/${SOURCE_LIB_NAME}" "${DEBUG_LIB}")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib/${SOURCE_LIB_NAME}" "${RELEASE_LIB}")
endif()
else()
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib")
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib")
file(GLOB SOURCE_LIB "${TEMP_DIR}/*/libftd2xx-static.a")
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib")
file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib/libftd2xx-static.a" "${DEBUG_LIB}")
file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib/libftd2xx-static.a" "${RELEASE_LIB}")
endif()

file(REMOVE_RECURSE "${TEMP_DIR}")

if(WIN32)
add_library(ftd2xx_debug STATIC IMPORTED GLOBAL)
add_library(ftd2xx_release STATIC IMPORTED GLOBAL)
Expand All @@ -136,9 +141,9 @@ else()
)
endif()

if(WIN32 AND DEFINED ENV{QTDIR})
set(QT_BIN_DIR "$ENV{QTDIR}/bin")
set(QT_PLUGINS_DIR "$ENV{QTDIR}/plugins")
if(WIN32 AND DEFINED ENV{QTBIN})
set(QT_BIN_DIR "$ENV{QTBIN}")
set(QT_PLUGINS_DIR "$ENV{QTBIN}/../plugins")
set(DEBUG_BIN_DIR "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin")
set(RELEASE_BIN_DIR "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin")

Expand Down
Loading