diff --git a/CMakeLists.txt b/CMakeLists.txt index 21ae33f..5a68c17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,17 +6,36 @@ find_package(PkgConfig REQUIRED) find_package(Doxygen) pkg_check_modules(LIBUSB REQUIRED libusb-1.0) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") +include(GitVersion) +get_version_from_git() +message("Building version ${PROJECT_VERSION}") + set(CMAKE_CXX_STANDARD 17) set(CMAKE_C_STANDARD 11) +add_compile_definitions(VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR}) +add_compile_definitions(VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR}) +add_compile_definitions(VERSION_PATCH=${CMAKE_PROJECT_VERSION_PATCH}) + set(SRC_FILES eismultiplexer.c usbshm.c) +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") + message(FATAL_ERROR "Windows builds have to be cross compiled on UNIX") +endif() + message("Platform " ${CMAKE_SYSTEM_NAME}) if(WIN32) message("Building for Windows") file(GLOB_RECURSE ARGP_SRC ${PROJECT_SOURCE_DIR}/argp/*.*) set(SRC_FILES ${SRC_FILES} ${ARGP_SRC}) include_directories(./argp) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/release-win.sh ${CMAKE_CURRENT_BINARY_DIR}/release.sh @ONLY) + add_custom_target(package + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/release.sh + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Createing release archive" + VERBATIM) else() message("Building for UNIX") if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) @@ -25,8 +44,8 @@ else() endif(WIN32) add_library(${PROJECT_NAME} SHARED ${SRC_FILES}) -target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARIES}) target_include_directories(${PROJECT_NAME} PUBLIC ${LIBUSB_INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARIES}) add_definitions("-std=c17 -Wall -O2 -fno-strict-aliasing") install(TARGETS ${PROJECT_NAME} DESTINATION lib) install(FILES ./eismultiplexer.h DESTINATION include) diff --git a/EisMultiplexerWinDriver/_DriverFiles.7z b/EisMultiplexerWinDriver/_DriverFiles.7z deleted file mode 100755 index 32adf29..0000000 Binary files a/EisMultiplexerWinDriver/_DriverFiles.7z and /dev/null differ diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake new file mode 100644 index 0000000..00e22d9 --- /dev/null +++ b/cmake/GitVersion.cmake @@ -0,0 +1,38 @@ +function(get_version_from_git) + find_package(Git REQUIRED) + + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --always + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_RESULT + ) + + if(NOT GIT_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to get git tag") + endif() + + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_SHORT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + string(REGEX REPLACE "^v" "" CLEAN_TAG "${GIT_TAG}") + if(CLEAN_TAG MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-.*)?$") + + set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1}) + set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) + set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2}) + set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) + set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3}) + set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) + + set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") + set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE) + else() + message(FATAL_ERROR "Tag '${CLEAN_TAG}' does not match semver format") + endif() +endfunction() diff --git a/crossW64.cmake b/crossW64.cmake index 250001d..4f841a7 100644 --- a/crossW64.cmake +++ b/crossW64.cmake @@ -1,4 +1,5 @@ set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR AMD64) set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)