Skip to content
This repository was archived by the owner on Oct 10, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
77 changes: 77 additions & 0 deletions cmake/functions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,80 @@ function(external_project_download IN_FILE OUT_DIR)
endif()
endfunction()

function(add_sdk)
# Sets the following variables into cache:
# ${NAME}_SDK_DIR
# ${NAME}_SDK_VERSION
# ${NAME}_SDK_URL

set(options "")
set(oneValueArgs NAME MAJOR MINOR PATCH SUB URL HASH HASH_ALGO)
set(multiValueArgs "")
cmake_parse_arguments(add_sdk "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(SDK_VERSION "${add_sdk_MAJOR}.${add_sdk_MINOR}.${add_sdk_PATCH}${add_sdk_SUB}")
set(SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${add_sdk_NAME}_v${SDK_VERSION}")
set(${add_sdk_NAME}_SDK_DIR "${SDK_DIR}" CACHE STRING "${add_sdk_NAME} SDK Directory")
set(${add_sdk_NAME}_SDK_VERSION "${SDK_VERSION}" CACHE STRING "${add_sdk_NAME} SDK Version")

string(CONFIGURE "${add_sdk_URL}" SDK_URL)

set(${add_sdk_NAME}_SDK_URL ${SDK_URL} CACHE STRING "${add_sdk_NAME} SDK URL")
get_filename_component(SDK_ARCHIVE "${SDK_URL}" NAME)
set(SDK_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/${SDK_ARCHIVE}")

message("Adding `${add_sdk_NAME}` SDK: `${SDK_DIR}` `${SDK_URL}` `${SDK_ARCHIVE}`")

if("${SDK_ARCHIVE}" MATCHES ".tar.bz2$")
set(EXTRACT_COMMAND tar)
set(EXTRACT_COMMAND_ARGS xjf ${SDK_ARCHIVE})
elseif("${SDK_ARCHIVE}" MATCHES ".tar.gz$" OR "${SDK_ARCHIVE}" MATCHES ".tgz$")
set(EXTRACT_COMMAND tar)
set(EXTRACT_COMMAND_ARGS xzf ${SDK_ARCHIVE})
elseif("${SDK_ARCHIVE}" MATCHES ".zip$")
set(EXTRACT_COMMAND unzip)
set(EXTRACT_COMMAND_ARGS ${SDK_ARCHIVE})
else()
message(FATAL_ERROR "${SDK_ARCHIVE}: Unrecognized archive format")
endif()

if(NOT EXISTS ${SDK_DIR})
message(STATUS "Downloading ${add_sdk_NAME} SDK v${SDK_VERSION}")
file(DOWNLOAD
"${SDK_URL}"
"${SDK_ARCHIVE}"
EXPECTED_HASH ${add_sdk_HASH_ALGO}=${add_sdk_HASH}
SHOW_PROGRESS LOG SDK_DOWNLOAD_LOG STATUS SDK_DOWNLOAD_STATUS
)

list(LENGTH SDK_DOWNLOAD_STATUS SDK_DOWNLOAD_STATUS_LENGTH)
list(GET SDK_DOWNLOAD_STATUS 0 SDK_DOWNLOAD_STATUS_CODE)
list(GET SDK_DOWNLOAD_STATUS 1 SDK_DOWNLOAD_STATUS_MESSAGE)
if(${SDK_DOWNLOAD_STATUS_CODE})
message(FATAL_ERROR "Error while downloading ${add_sdk_NAME} SDK: ${SDK_DOWNLOAD_STATUS_MESSAGE}(code: ${SDK_DOWNLOAD_STATUS_MESSAGE}. Full log: ${SDK_DOWNLOAD_LOG}")
endif()
file(MAKE_DIRECTORY "${SDK_DIR}")
execute_process(COMMAND ${EXTRACT_COMMAND} ${EXTRACT_COMMAND_ARGS} WORKING_DIRECTORY ${SDK_DIR} RESULT_VARIABLE UNPACK_ERROR)
if(NOT ${UNPACK_ERROR} EQUAL 0)
file(REMOVE_RECURSE ${SDK_DIR})
message(FATAL_ERROR "Error unpacking ${add_sdk_NAME} SDK: ${UNPACK_ERROR}")
endif()

file(GLOB SDK_DIR_LIST "${SDK_DIR}/*" LIST_DIRECTORIES TRUE)
list(LENGTH SDK_DIR_LIST SDK_DIR_LIST_LEN)

if(SDK_DIR_LIST_LEN EQUAL 1)
list(GET SDK_DIR_LIST 0 SDK_SUBDIR)
if(IS_DIRECTORY "${SDK_SUBDIR}")
file(GLOB SDK_SUBDIR_CONTENT "${SDK_SUBDIR}/*" LIST_DIRECTORIES TRUE)
foreach(ITEM ${SDK_SUBDIR_CONTENT})
get_filename_component(FILENAME ${ITEM} NAME)
message("Moving ${ITEM} to ${SDK_DIR}/${FILENAME}")
file(RENAME ${ITEM} ${SDK_DIR}/${FILENAME})
endforeach()
file(REMOVE_RECURSE "${SDK_SUBDIR}")
endif()
endif()
endif()


endfunction()
94 changes: 35 additions & 59 deletions src/drivers/qhy/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,71 +1,47 @@
#TODO replace this script invokation
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(QHY_INCLUDE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/QHYCCD_Windows_SDK_x64_LatestVersion/x64/include)
set(QHY_DLL_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/QHYCCD_Windows_SDK_x64_LatestVersion/x64/dll)
include_directories(${QHY_INCLUDE_DIRECTORY})
else()
external_project_download(QHYCCD.cmake.in QHYCCD_Linux)
set(QHY_INCLUDE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/QHYCCD_Linux)
set(QHY_LIBS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/QHYCCD_Linux)
endif()
execute_process(COMMAND ${CMAKE_SOURCE_DIR}/scripts/qhy_errors_to_map ${QHY_INCLUDE_DIRECTORY}/qhyccderr.h OUTPUT_VARIABLE qhy_error_codes)

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qhyccdstruct.h
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/qhy_fix_libusb_include.py ${QHY_INCLUDE_DIRECTORY}/qhyccdstruct.h ${CMAKE_CURRENT_BINARY_DIR}/qhyccdstruct.h
)
add_custom_target(qhyccdstruct DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qhyccdstruct.h )

if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
configure_file(${QHY_INCLUDE_DIRECTORY}/qhyccd.h ${CMAKE_CURRENT_BINARY_DIR}/ COPYONLY)
configure_file(${QHY_INCLUDE_DIRECTORY}/qhyccdcamdef.h ${CMAKE_CURRENT_BINARY_DIR}/ COPYONLY)
configure_file(${QHY_INCLUDE_DIRECTORY}/qhyccderr.h ${CMAKE_CURRENT_BINARY_DIR}/ COPYONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
endif()

# TODO automatically get from QHYCCD CMakeLists.txt
set(LIBQHY_VERSION "0.1.8")
set(LIBQHY_SOVERSION "0")

#TODO replace this script invokation

add_sdk(NAME QHY_Windows MAJOR 5 MINOR 0 PATCH 7 URL "http://www.qhyccd.com/file/repository/latestSoftAndDirver/SDK/V5.0.7/WINDOWS_qhyccd_V20190527_0.zip" HASH_ALGO MD5 HASH 342e063e31f662efe0d16448c7a4a696)
add_sdk(NAME QHY_Linux_x86_64 MAJOR 5 MINOR 0 PATCH 7 URL "http://www.qhyccd.com/file/repository/latestSoftAndDirver/SDK/V5.0.7/LINUX_X64_qhyccd_V20190527_0.tgz" HASH_ALGO MD5 HASH b599eae3a4a017321df0a8ccfd19f812)
add_sdk(NAME QHY_Mac_x86_64 MAJOR 5 MINOR 0 PATCH 7 URL "http://www.qhyccd.com/file/repository/latestSoftAndDirver/SDK/V5.0.7/MACOS_X64_qhyccd_V20190527_0.tgz" HASH_ALGO MD5 HASH 7bed1c9171c7731ff1ccb8f7cda66c19)

set(qhy_SOURCES qhyccdimager.cpp qhydriver.cpp qhyimagingworker.cpp qhyexception.cpp qhycontrol.cpp)

set(QHY_LIBRARY_armv6 ${QHY_LIBS_DIRECTORY}/libqhy_arm_v6.bin)
set(QHY_LIBRARY_armv7 ${QHY_LIBS_DIRECTORY}/libqhy_arm_v7.bin)
set(QHY_LIBRARY_x86_64 ${QHY_LIBS_DIRECTORY}/libqhy_64.bin)
set(QHY_LIBRARY_i686 ${QHY_LIBS_DIRECTORY}/libqhy_32.bin)

set(QHY_LIBRARY ${QHY_LIBRARY_${PlanetaryImager_ARCH}})

if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
set(QHY_INCLUDE_DIRECTORY ${QHY_Windows_SDK_DIR}/include)
set(QHY_DLL_DIRECTORY ${QHY_Windows_SDK_DIR}/x64)
set(QHY_LIBRARY ${QHY_DLL_DIRECTORY}/qhyccd.dll)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(QHY_LIBRARY ${QHY_LIBS_DIRECTORY}/libqhy_osx.a)
# fix for windows case insensitive includes when cross compiled
configure_file(${QHY_INCLUDE_DIRECTORY}/CyAPI.h ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes/cyapi.h COPYONLY)
configure_file(${QHY_INCLUDE_DIRECTORY}/CyUSB30_def.h ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes/cyusb30_def.h COPYONLY)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes/chatty.h "")
set(QHY_INCLUDE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes ${QHY_INCLUDE_DIRECTORY})
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
set(QHY_INCLUDE_DIRECTORY ${QHY_Mac_x86_64_SDK_DIR}/usr/local/include)
set(QHY_LIBS_DIRECTORY ${QHY_Mac_x86_64_SDK_DIR}/usr/local/lib)
set(QHY_LIBRARY ${QHY_LIBS_DIRECTORY}/libqhyccd.a)
set(QHY_EXTRA_LIBRARIES usb-1.0 "-framework CoreFoundation" "-framework IOKit" objc)
elseif(CMAKE_SYSTEM_NAME STREQUAL Linux)
set(QHY_INCLUDE_DIRECTORY ${QHY_Linux_x86_64_SDK_DIR}/usr/local/include)
set(QHY_LIBS_DIRECTORY ${QHY_Linux_x86_64_SDK_DIR}/usr/local/lib)
set(QHY_LIBRARY ${QHY_LIBS_DIRECTORY}/libqhyccd.a)
file(READ ${QHY_Linux_x86_64_SDK_DIR}/etc/udev/rules.d/85-qhyccd.rules QHY_UDEV_RULES)
string(REPLACE "/sbin/fxload" "${CMAKE_INSTALL_PREFIX}/bin/fxload_planetaryimager" QHY_UDEV_RULES "${QHY_UDEV_RULES}")
string(REPLACE "/lib/firmware/qhy" "/lib/firmware/qhy_planetaryimager" QHY_UDEV_RULES "${QHY_UDEV_RULES}")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qhyccd.rules" "${QHY_UDEV_RULES}")
endif()

include_directories(${QHY_INCLUDE_DIRECTORY})

# if(ADD_DRIVERS_BUILD_DIRECTORY)
# get_filename_component(QHY_LIBRARY_NAME ${QHY_LIBRARY} NAME)
# file(COPY ${QHY_LIBRARY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
# file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/${QHY_LIBRARY_NAME} ${CMAKE_CURRENT_BINARY_DIR}/libqhy.so.${LIBQHY_VERSION})
# endif()
execute_process(COMMAND ${CMAKE_SOURCE_DIR}/scripts/qhy_errors_to_map ${QHY_INCLUDE_DIRECTORY}/qhyccderr.h OUTPUT_VARIABLE qhy_error_codes)

add_driver(NAME qhy OS Linux Windows Darwin SRCS ${qhy_SOURCES} ${qhy_GENERATED_SOURCES} LINK ${QHY_LIBRARY} ${QHY_EXTRA_LIBRARIES})
set(qhy_SOURCES qhyccdimager.cpp qhydriver.cpp qhyimagingworker.cpp qhyexception.cpp qhycontrol.cpp)
add_driver(NAME qhy OS Linux Windows Darwin DEFAULT_ON SRCS ${qhy_SOURCES} ${qhy_GENERATED_SOURCES} LINK ${QHY_LIBRARY} ${QHY_EXTRA_LIBRARIES})

if(BUILD_DRIVER_qhy)
add_dependencies(qhy qhyccdstruct)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
install(FILES QHYCCD_Linux/85-qhy.rules DESTINATION ${UDEVRULES_INSTALL_DIR})
install(FILES ${QHY_LIBRARY} DESTINATION ${drivers_destination} RENAME libqhy.so.${LIBQHY_VERSION})

file(GLOB QHY_FIRMWARE_FILES QHYCCD_Linux/firmware/*)
install(FILES ${QHY_FIRMWARE_FILES} DESTINATION ${FIRMWARE_INSTALL_BASEDIR}/qhy)
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qhyccd.rules DESTINATION ${UDEVRULES_INSTALL_DIR} RENAME 80-qhyccd_planetaryimager.rules)
file(GLOB QHY_FIRMWARE_FILES ${QHY_Linux_x86_64_SDK_DIR}/lib/firmware/qhy/*)
install(FILES ${QHY_FIRMWARE_FILES} DESTINATION ${FIRMWARE_INSTALL_BASEDIR}/qhy_planetaryimager)
install(PROGRAMS ${QHY_Linux_x86_64_SDK_DIR}/sbin/fxload DESTINATION ${CMAKE_INSTALL_PREFIX}/bin RENAME fxload_planetaryimager)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
install(FILES ${QHY_LIBRARY} DESTINATION .)
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
file(GLOB QHY_WINDOWS_LIBRARIES ${QHY_DLL_DIRECTORY}/*.dll)
install(FILES ${QHY_WINDOWS_LIBRARIES} DESTINATION .)
endif()
endif()
141 changes: 0 additions & 141 deletions src/drivers/qhy/QHYCCD_Windows_SDK_x64_LatestVersion/changelog.txt

This file was deleted.

Binary file not shown.
Loading