From 4209e4b924165dc46a8f6c0cf4338f4d321ee08b Mon Sep 17 00:00:00 2001 From: Jerry Jacobs Date: Thu, 15 Sep 2016 22:29:59 +0200 Subject: [PATCH] cmake: Refactor into seperate files, fix project version detection when everything fails (travis) --- .travis.sh | 4 +- .travis.yml | 4 +- CMakeLists.txt | 254 ++++-------------- cmake/CFlags.cmake | 49 ++++ cmake/CPackConfig.cmake | 11 + cmake/Version.cmake | 50 ++++ cmake/modules/Find7Zip.cmake | 8 +- cmake/modules/FindLibUSB.cmake | 2 + doc/man/CMakeLists.txt | 27 +- include/CMakeLists.txt | 12 +- include/stlink.h | 1 + include/stlink/version.h.in | 9 + src/gdbserver/CMakeLists.txt | 10 + src/gdbserver/gdb-server.c | 5 +- src/logging.c | 2 +- src/tools/flash.c | 2 + src/tools/gui/CMakeLists.txt | 24 ++ src/tools/info.c | 1 + usr/lib/pkgconfig/CMakeLists.txt | 14 + .../lib/pkgconfig/pkg-config.pc.cmake | 0 20 files changed, 268 insertions(+), 221 deletions(-) create mode 100644 cmake/CFlags.cmake create mode 100644 cmake/CPackConfig.cmake create mode 100644 cmake/Version.cmake create mode 100644 include/stlink/version.h.in create mode 100644 src/gdbserver/CMakeLists.txt create mode 100644 src/tools/gui/CMakeLists.txt create mode 100644 usr/lib/pkgconfig/CMakeLists.txt rename pkg-config.pc.cmake => usr/lib/pkgconfig/pkg-config.pc.cmake (100%) diff --git a/.travis.sh b/.travis.sh index 9fa519dad..82c1fd862 100755 --- a/.travis.sh +++ b/.travis.sh @@ -13,7 +13,7 @@ else fi echo "=== Building Debug" -mkdir -p build/Debug && cd build/Debug && cmake -DCMAKE_BUILD_TYPE=Debug ../../ && make && make package && cd - +mkdir -p build/Debug && cd build/Debug && cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$PWD/_install ../../ && make && make package && cd - echo "=== Building Release" -mkdir -p build/Release && cd build/Release && cmake -DCMAKE_BUILD_TYPE=Release ../../ && make && make package && cd - +mkdir -p build/Release && cd build/Release && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/_install ../../ && make && make package && cd - diff --git a/.travis.yml b/.travis.yml index 543c0edec..2bf170d2b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,9 @@ addons: - g++-5 - gcc-5 script: + - git fetch --tags + - printenv + - cmake --version - ./.travis.sh matrix: include: @@ -20,7 +23,6 @@ matrix: # compiler: clang-3.8 - os: linux compiler: gcc-5 - compiler: gcc-5 # - os: linux # compiler: clang-3.8 - os: osx diff --git a/CMakeLists.txt b/CMakeLists.txt index 9195e3345..2d5a03170 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,7 @@ cmake_minimum_required(VERSION 2.8.7) project(stlink C) set(PROJECT_DESCRIPTION "Open source version of the STMicroelectronics Stlink Tools") -include(CheckCCompilerFlag) include(CheckIncludeFile) -find_package(PkgConfig) if (POLICY CMP0042) # Newer cmake on MacOS should use @rpath @@ -12,123 +10,30 @@ if (POLICY CMP0042) endif () set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake/modules") +include(cmake/Version.cmake) +include(cmake/CFlags.cmake) -message(STATUS "Building on ${CMAKE_SYSTEM_NAME}") - -# Determine package version. -find_package (Git QUIET) -if (DEFINED ENV{TRAVIS_TAG} AND NOT "$ENV{TRAVIS_TAG}" STREQUAL "") - set (STLINK_PACKAGE_VERSION "$ENV{TRAVIS_TAG}") -elseif (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") - # Working off a git repo, using git versioning - # Check if HEAD is pointing to a tag - execute_process ( - COMMAND "${GIT_EXECUTABLE}" describe --always - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - OUTPUT_VARIABLE STLINK_PACKAGE_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # If the sources have been changed locally, add -dirty to the version. - execute_process ( - COMMAND "${GIT_EXECUTABLE}" diff --quiet - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - RESULT_VARIABLE res) - - if (res EQUAL 1) - set (STLINK_PACKAGE_VERSION "${STLINK_PACKAGE_VERSION}-dirty") - endif() -elseif (EXISTS ${PROJECT_SOURCE_DIR}/.version) - # If git is not available (e.g. when building from source package) - # we can extract the package version from .version file. - file (STRINGS .version STLINK_PACKAGE_VERSION) -else () - set (STLINK_PACKAGE_VERSION "999.99.99-unknown") -endif() - -# We shall use STLINK_PACKAGE_VERSION* variables to set soversion and other stuff -# Since these numbers will appear in .so names, e.g. libstlink.so.1.2.0 -# We can't just use STLINK_PACKAGE_VERSION here -# (Well, we can, but that breaks all the existing conventions) -# We can't as well use PROJECT_VERSION* variables here, since they are managed -# by project() directive and the whole version detection relies on PROJECT_SOURCE_DIR - -string(REPLACE "." ";" STLINK_PACKAGE_VERSION_ARRAY ${STLINK_PACKAGE_VERSION}) -string(REPLACE "-" ";" STLINK_PACKAGE_VERSION_ARRAY "${STLINK_PACKAGE_VERSION_ARRAY}") -list(GET STLINK_PACKAGE_VERSION_ARRAY 0 STLINK_PACKAGE_VERSION_MAJOR) -list(GET STLINK_PACKAGE_VERSION_ARRAY 1 STLINK_PACKAGE_VERSION_MINOR) -list(GET STLINK_PACKAGE_VERSION_ARRAY 2 STLINK_PACKAGE_VERSION_PATCH) -list(GET STLINK_PACKAGE_VERSION_ARRAY 3 STLINK_PACKAGE_VERSION_TAG) - -if(WIN32) - find_package(7Zip REQUIRED) - message(STATUS "7Zip Location: " ${ZIP_LOCATION}) -endif() - +### +# Dependencies +### find_package(LibUSB REQUIRED) if (NOT APPLE AND NOT WIN32) find_package(PkgConfig) pkg_check_modules(gtk gtk+-3.0) endif () -function(add_cflag_if_supported flag) - string(REPLACE "-" "_" flagclean ${flag}) - string(REPLACE "=" "_" flagclean ${flagclean}) - string(REPLACE "+" "_" flagclean ${flagclean}) - string(REPLACE "," "_" flagclean ${flagclean}) - string(TOUPPER ${flagclean} flagclean) - - check_c_compiler_flag(${flag} C_SUPPORTS${flagclean}) - - if (C_SUPPORTS${flagclean}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) - endif() -endfunction() - -add_cflag_if_supported("-std=gnu99") -add_cflag_if_supported("-Wall") -add_cflag_if_supported("-Wextra") -add_cflag_if_supported("-Wshadow") -add_cflag_if_supported("-D_FORTIFY_SOURCE=2") -add_cflag_if_supported("-fstrict-aliasing") -add_cflag_if_supported("-Wformat") -add_cflag_if_supported("-Wformat-security") -add_cflag_if_supported("-Wmaybe-uninitialized") -add_cflag_if_supported("-Wmissing-variable-declarations") -add_cflag_if_supported("-Wshorten-64-to-32") -add_cflag_if_supported("-Wimplicit-function-declaration") - -## -# On OpenBSD the system headers suck so we need to disable redundant declaration check -# /usr/include/unistd.h:429: warning: redundant redeclaration of 'truncate' -# /usr/include/sys/types.h:218: warning: previous declaration of 'truncate' was here -## -if (NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") - add_cflag_if_supported("-Wredundant-decls") -endif () - -add_cflag_if_supported("-Wundef") -if (NOT WIN32) - add_cflag_if_supported("-fPIC") -endif () - -if (CMAKE_BUILD_TYPE STREQUAL "") - set (CMAKE_BUILD_TYPE "Debug") -endif () - -if(${CMAKE_BUILD_TYPE} MATCHES "Debug") - add_cflag_if_supported("-ggdb") - add_cflag_if_supported("-O0") - include(CTest) -elseif() - add_cflag_if_supported("-O2") -endif() - CHECK_INCLUDE_FILE(sys/mman.h STLINK_HAVE_SYS_MMAN_H) if (STLINK_HAVE_SYS_MMAN_H) add_definitions(-DSTLINK_HAVE_SYS_MMAN_H) endif() -message("Building ${PROJECT_NAME} ${STLINK_PACKAGE_VERSION}") +if (CMAKE_BUILD_TYPE STREQUAL "") + set(CMAKE_BUILD_TYPE "Debug") +endif() + +if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + include(CTest) +endif() set(STLINK_HEADERS include/stlink.h @@ -155,31 +60,26 @@ endif () include_directories(${LIBUSB_INCLUDE_DIR}) include_directories(include) +include_directories(${PROJECT_BINARY_DIR}/include) include_directories(src/mingw) -set(STLINK_LIB_STATIC ${PROJECT_NAME}-static) - +# Shared library add_library(${PROJECT_NAME} SHARED - ${STLINK_HEADERS} # header files for ide projects generated by cmake - ${STLINK_SOURCE}) + ${STLINK_HEADERS} # header files for ide projects generated by cmake + ${STLINK_SOURCE} +) target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARY}) if (WIN32 OR MSYS OR MINGW) - set(STLINK_SHARED_VERSION - ${STLINK_PACKAGE_VERSION_MAJOR}.${STLINK_PACKAGE_VERSION_MINOR}) + set(STLINK_SHARED_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) else() - set(STLINK_SHARED_VERSION - ${STLINK_PACKAGE_VERSION_MAJOR}.${STLINK_PACKAGE_VERSION_MINOR}.${STLINK_PACKAGE_VERSION_PATCH}) + set(STLINK_SHARED_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) endif() -set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${STLINK_PACKAGE_VERSION_MAJOR} -VERSION ${STLINK_SHARED_VERSION}) - -add_library(${STLINK_LIB_STATIC} STATIC - ${STLINK_HEADERS} # header files for ide projects generated by cmake - ${STLINK_SOURCE}) -target_link_libraries(${STLINK_LIB_STATIC} ${LIBUSB_LIBRARY}) -set_target_properties(${STLINK_LIB_STATIC} PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) +set_target_properties(${PROJECT_NAME} + PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${STLINK_SHARED_VERSION} +) if (APPLE) find_library(ObjC objc) @@ -194,91 +94,49 @@ else() target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARY}) endif() -add_executable(st-flash src/tools/flash.c src/tools/flash_opts.c) -target_link_libraries(st-flash ${PROJECT_NAME}) - -add_executable(st-info src/tools/info.c) -target_link_libraries(st-info ${PROJECT_NAME}) - -add_executable(st-util src/gdbserver/gdb-remote.c - src/gdbserver/gdb-remote.h - src/gdbserver/gdb-server.c - src/gdbserver/gdb-server.h - src/gdbserver/semihosting.c - src/gdbserver/semihosting.h) - -target_link_libraries(st-util ${PROJECT_NAME}) - -install(TARGETS ${PROJECT_NAME} ${STLINK_LIB_STATIC} st-flash st-util st-info - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib/${CMAKE_LIBRARY_PATH} - LIBRARY DESTINATION lib/${CMAKE_LIBRARY_PATH} +install(TARGETS ${PROJECT_NAME} + LIBRARY DESTINATION lib/${CMAKE_LIBRARY_PATH} ) -if (NOT APPLE AND NOT WIN32) - set(PKG_CONFIG_LIBDIR - "\${prefix}/lib/\${deb_host_multiarch}" - ) - set(PKG_CONFIG_INCLUDEDIR - "\${prefix}/include/\${deb_host_multiarch}/${PROJECT_NAME}-${STLINK_PACKAGE_VERSION}" - ) - set(PKG_CONFIG_LIBS - "-L\${libdir} -l:libstlink.so.${STLINK_PACKAGE_VERSION_MAJOR}" - ) - set(PKG_CONFIG_CFLAGS - "-I\${includedir}" - ) - - set(PKG_CONFIG_REQUIRES - "libusb-1.0" - ) +### +# Static library +### +set(STLINK_LIB_STATIC ${PROJECT_NAME}-static) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/pkg-config.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - ) +add_library(${STLINK_LIB_STATIC} STATIC + ${STLINK_HEADERS} # header files for ide projects generated by cmake + ${STLINK_SOURCE} +) +target_link_libraries(${STLINK_LIB_STATIC} ${LIBUSB_LIBRARY}) +set_target_properties(${STLINK_LIB_STATIC} PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION lib/${CMAKE_LIBRARY_PATH}/pkgconfig/) -endif() +install(TARGETS ${STLINK_LIB_STATIC} + ARCHIVE DESTINATION lib/${CMAKE_LIBRARY_PATH} +) -if (NOT APPLE AND gtk_FOUND) - include_directories(SYSTEM ${gtk_INCLUDE_DIRS}) - set(GUI_SOURCES src/tools/gui/stlink-gui.c - src/tools/gui/stlink-gui.h) +### +# Tools +### +add_executable(st-flash src/tools/flash.c src/tools/flash_opts.c) +target_link_libraries(st-flash ${PROJECT_NAME}) - # TODO REMOVE whole stlink-gui-local target, fixup auto-search of ui file in implementation - add_executable(stlink-gui-local ${GUI_SOURCES}) - set_target_properties(stlink-gui-local PROPERTIES - COMPILE_FLAGS -DSTLINK_UI_DIR=\\"${CMAKE_CURRENT_SOURCE_DIR}/gui\\") - target_link_libraries(stlink-gui-local stlink ${gtk_LDFLAGS}) +add_executable(st-info src/tools/info.c) +target_link_libraries(st-info ${PROJECT_NAME}) - set(INSTALLED_UI_DIR share/stlink) - add_executable(stlink-gui ${GUI_SOURCES}) - # TODO REMOVE, fixup auto-search of ui file in implementation - set_target_properties(stlink-gui PROPERTIES - COMPILE_FLAGS -DSTLINK_UI_DIR=\\"${CMAKE_INSTALL_PREFIX}/${INSTALLED_UI_DIR}\\") - target_link_libraries(stlink-gui stlink ${gtk_LDFLAGS}) +install(TARGETS st-flash st-info + RUNTIME DESTINATION bin +) - install(TARGETS stlink-gui - RUNTIME DESTINATION bin) - install(FILES src/tools/gui/stlink-gui.ui - DESTINATION ${INSTALLED_UI_DIR}) -endif() +add_subdirectory(src/gdbserver) +add_subdirectory(src/tools/gui) +### +# Others +### +add_subdirectory(usr/lib/pkgconfig) add_subdirectory(include) add_subdirectory(doc/man) add_subdirectory(tests) -set (CPACK_PACKAGE_NAME ${PROJECT_NAME}) -set (CPACK_PACKAGE_VERSION ${STLINK_PACKAGE_VERSION}) -set (CPACK_SOURCE_GENERATOR "TBZ2;ZIP") -set (CPACK_SOURCE_IGNORE_FILES "/build/;/.git/;~$;${CPACK_SOURCE_IGNORE_FILES}") -set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${STLINK_PACKAGE_VERSION}") -if (APPLE) - set(CPACK_GENERATOR "ZIP") - file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/dist/osx") - set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/dist/osx") -endif() -add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) -include (CPack) +include(cmake/CPackConfig.cmake) +include(CPack) diff --git a/cmake/CFlags.cmake b/cmake/CFlags.cmake new file mode 100644 index 000000000..b17463707 --- /dev/null +++ b/cmake/CFlags.cmake @@ -0,0 +1,49 @@ +include(CheckCCompilerFlag) + +function(add_cflag_if_supported flag) + string(REPLACE "-" "_" flagclean ${flag}) + string(REPLACE "=" "_" flagclean ${flagclean}) + string(REPLACE "+" "_" flagclean ${flagclean}) + string(REPLACE "," "_" flagclean ${flagclean}) + string(TOUPPER ${flagclean} flagclean) + + check_c_compiler_flag(${flag} C_SUPPORTS${flagclean}) + + if (C_SUPPORTS${flagclean}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) + endif() +endfunction() + +add_cflag_if_supported("-std=gnu99") +add_cflag_if_supported("-Wall") +add_cflag_if_supported("-Wextra") +add_cflag_if_supported("-Wshadow") +add_cflag_if_supported("-D_FORTIFY_SOURCE=2") +add_cflag_if_supported("-fstrict-aliasing") +add_cflag_if_supported("-Wundef") +add_cflag_if_supported("-Wformat") +add_cflag_if_supported("-Wformat-security") +add_cflag_if_supported("-Wmaybe-uninitialized") +add_cflag_if_supported("-Wmissing-variable-declarations") +add_cflag_if_supported("-Wshorten-64-to-32") +add_cflag_if_supported("-Wimplicit-function-declaration") + +## +# On OpenBSD the system headers suck so we need to disable redundant declaration check +# /usr/include/unistd.h:429: warning: redundant redeclaration of 'truncate' +# /usr/include/sys/types.h:218: warning: previous declaration of 'truncate' was here +## +if (NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + add_cflag_if_supported("-Wredundant-decls") +endif () + +if (NOT WIN32) + add_cflag_if_supported("-fPIC") +endif () + +if(${CMAKE_BUILD_TYPE} MATCHES "Debug") + add_cflag_if_supported("-ggdb") + add_cflag_if_supported("-O0") +elseif() + add_cflag_if_supported("-O2") +endif() diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake new file mode 100644 index 000000000..4e851efae --- /dev/null +++ b/cmake/CPackConfig.cmake @@ -0,0 +1,11 @@ +set (CPACK_PACKAGE_NAME ${PROJECT_NAME}) +set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +set (CPACK_SOURCE_GENERATOR "TBZ2;ZIP") +set (CPACK_SOURCE_IGNORE_FILES "/build/;/.git/;~$;${CPACK_SOURCE_IGNORE_FILES}") +set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") +if (APPLE) + set(CPACK_GENERATOR "ZIP") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/dist/osx") + set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/dist/osx") +endif() +add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) diff --git a/cmake/Version.cmake b/cmake/Version.cmake new file mode 100644 index 000000000..957e29ca4 --- /dev/null +++ b/cmake/Version.cmake @@ -0,0 +1,50 @@ +# Determine project version +# * Using Git +# * Local .version file +find_package (Git QUIET) +if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") + # Working off a git repo, using git versioning + # Check if HEAD is pointing to a tag + execute_process ( + COMMAND "${GIT_EXECUTABLE}" describe --always + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE PROJECT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # If the sources have been changed locally, add -dirty to the version. + execute_process ( + COMMAND "${GIT_EXECUTABLE}" diff --quiet + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + RESULT_VARIABLE res) + + if (res EQUAL 1) + set (PROJECT_VERSION "${PROJECT_VERSION}-dirty") + endif() +endif() + +string(REGEX REPLACE "^(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" + "\\1;\\2;\\3" PROJECT_VERSION_LIST ${PROJECT_VERSION}) +list(LENGTH PROJECT_VERSION_LIST len) +if(len EQUAL 3) + list(GET PROJECT_VERSION_LIST 0 PROJECT_VERSION_MAJOR) + list(GET PROJECT_VERSION_LIST 1 PROJECT_VERSION_MINOR) + list(GET PROJECT_VERSION_LIST 2 PROJECT_VERSION_PATCH) +elseif(EXISTS ${PROJECT_SOURCE_DIR}/.version) + # If git is not available (e.g. when building from source package) + # we can extract the package version from .version file. + file (STRINGS .version PROJECT_VERSION) + + # TODO create function to extract semver from file or string and check if it is correct instead of copy-pasting + string(REGEX REPLACE "^(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" + "\\1;\\2;\\3" PROJECT_VERSION_LIST ${PROJECT_VERSION}) + list(GET PROJECT_VERSION_LIST 0 PROJECT_VERSION_MAJOR) + list(GET PROJECT_VERSION_LIST 1 PROJECT_VERSION_MINOR) + list(GET PROJECT_VERSION_LIST 2 PROJECT_VERSION_PATCH) +else() + message(FATAL_ERROR "Unable to determine project version") +endif() + +if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + message(STATUS "stlink version: ${PROJECT_VERSION}") + message(STATUS " Major ${PROJECT_VERSION_MAJOR} Minor ${PROJECT_VERSION_MINOR} Patch ${PROJECT_VERSION_PATCH}") +endif() diff --git a/cmake/modules/Find7Zip.cmake b/cmake/modules/Find7Zip.cmake index c264d12f7..3448a2856 100644 --- a/cmake/modules/Find7Zip.cmake +++ b/cmake/modules/Find7Zip.cmake @@ -1,5 +1,5 @@ -find_program(ZIP_LOCATION NAMES 7z.exe - HINTS - "C:\\Program Files\\7-Zip\\" - "C:\\Program Files (x86)\\7-Zip\\" +find_program(ZIP_EXECUTABLE NAMES 7z.exe + HINTS + "C:\\Program Files\\7-Zip\\" + "C:\\Program Files (x86)\\7-Zip\\" ) diff --git a/cmake/modules/FindLibUSB.cmake b/cmake/modules/FindLibUSB.cmake index 006ab6976..90aafb3a2 100644 --- a/cmake/modules/FindLibUSB.cmake +++ b/cmake/modules/FindLibUSB.cmake @@ -7,6 +7,8 @@ # LIBUSB_DEFINITIONS - Compiler switches required for using libusb if(WIN32 OR CMAKE_VS_PLATFORM_NAME OR MINGW OR MSYS) + find_package(7Zip REQUIRED) + set(LIBUSB_WIN_VERSION 1.0.20) set(LIBUSB_WIN_ARCHIVE libusb-${LIBUSB_WIN_VERSION}.7z) set(LIBUSB_WIN_ARCHIVE_PATH ${CMAKE_BINARY_DIR}/${LIBUSB_WIN_ARCHIVE}) diff --git a/doc/man/CMakeLists.txt b/doc/man/CMakeLists.txt index 96e1734d8..4ea25e797 100644 --- a/doc/man/CMakeLists.txt +++ b/doc/man/CMakeLists.txt @@ -16,16 +16,21 @@ if(${CMAKE_BUILD_TYPE} MATCHES "Debug") PANDOC_DIRECTIVES -s -t man PRODUCT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) - - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${manpage}.1 - DESTINATION share/man/man1 - ) - endforeach() -else() - # TODO(xor-gate): we should generate a install list for Release and Debug targets - foreach(manpage ${MANPAGES}) - install(FILES ${manpage}.1 - DESTINATION share/man/man1 - ) endforeach() endif() + +# Install from output folder or this folder +foreach(manpage ${MANPAGES}) + if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${manpage}.1) + set(f "${CMAKE_CURRENT_BINARY_DIR}/${manpage}.1") + elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${manpage}.1") + set(f "${CMAKE_CURRENT_SOURCE_DIR}/${manpage}.1") + else() + message(AUTHOR_WARNING "Manpage ${manpage} not generated") + endif() + + if (f) + install(FILES ${f} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1) + unset(f) + endif() +endforeach() diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 5f603df8c..0b5a443c0 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,8 +1,14 @@ +configure_file( + "${PROJECT_SOURCE_DIR}/include/stlink/version.h.in" + "${CMAKE_BINARY_DIR}/include/stlink/version.h" +) file(GLOB STLINK_HEADERS "stlink/*.h" + "${CMAKE_BINARY_DIR}/include/stlink/*.h" ) - install(FILES ${CMAKE_SOURCE_DIR}/include/stlink.h - DESTINATION include/${CMAKE_LIBRARY_PATH}) + DESTINATION include/${CMAKE_LIBRARY_PATH} +) install(FILES ${STLINK_HEADERS} - DESTINATION include/${CMAKE_LIBRARY_PATH}/stlink) + DESTINATION include/${CMAKE_LIBRARY_PATH}/stlink +) diff --git a/include/stlink.h b/include/stlink.h index 0f032614e..674aa3b28 100644 --- a/include/stlink.h +++ b/include/stlink.h @@ -212,6 +212,7 @@ typedef struct flash_loader { #include "stlink/commands.h" #include "stlink/chipid.h" #include "stlink/flash_loader.h" +#include "stlink/version.h" #ifdef __cplusplus } diff --git a/include/stlink/version.h.in b/include/stlink/version.h.in new file mode 100644 index 000000000..4ce2a5cac --- /dev/null +++ b/include/stlink/version.h.in @@ -0,0 +1,9 @@ +#ifndef STLINK_VERSION_H_ +#define STLINK_VERSION_H_ + +#define STLINK_VERSION "@PROJECT_VERSION@" +#define STLINK_VERSION_MAJOR @PROJECT_VERSION_MAJOR@ +#define STLINK_VERSION_MINOR @PROJECT_VERSION_MINOR@ +#define STLINK_VERSION_PATCH @PROJECT_VERSION_PATCH@ + +#endif /* STLINK_VERSION_ */ diff --git a/src/gdbserver/CMakeLists.txt b/src/gdbserver/CMakeLists.txt new file mode 100644 index 000000000..c6114f6d6 --- /dev/null +++ b/src/gdbserver/CMakeLists.txt @@ -0,0 +1,10 @@ +add_executable(st-util gdb-remote.c + gdb-remote.h + gdb-server.c + gdb-server.h + semihosting.c + semihosting.h) +target_link_libraries(st-util ${PROJECT_NAME}) +install(TARGETS st-util + RUNTIME DESTINATION bin +) diff --git a/src/gdbserver/gdb-server.c b/src/gdbserver/gdb-server.c index 4d52d0cba..6015ed00b 100644 --- a/src/gdbserver/gdb-server.c +++ b/src/gdbserver/gdb-server.c @@ -176,12 +176,16 @@ int main(int argc, char** argv) { st_state_t state; memset(&state, 0, sizeof(state)); + + printf("st-util %s (%s)\n", STLINK_VERSION); + // set defaults... state.stlink_version = 2; state.logging_level = DEFAULT_LOGGING_LEVEL; state.listen_port = DEFAULT_GDB_LISTEN_PORT; state.reset = 1; /* By default, reset board */ parse_options(argc, argv, &state); + switch (state.stlink_version) { case 2: sl = stlink_open_usb(state.logging_level, state.reset, NULL); @@ -205,7 +209,6 @@ int main(int argc, char** argv) { ILOG("Chip ID is %08x, Core ID is %08x.\n", sl->chip_id, sl->core_id); sl->verbose=0; - current_memory_map = make_memory_map(sl); #ifdef __MINGW32__ diff --git a/src/logging.c b/src/logging.c index 4969c4400..1f51900b5 100644 --- a/src/logging.c +++ b/src/logging.c @@ -11,7 +11,7 @@ #include "stlink/logging.h" -static int max_level; +static int max_level = UINFO; int ugly_init(int maximum_threshold) { max_level = maximum_threshold; diff --git a/src/tools/flash.c b/src/tools/flash.c index 2dde37d06..6ebfcc2fb 100644 --- a/src/tools/flash.c +++ b/src/tools/flash.c @@ -52,6 +52,8 @@ int main(int ac, char** av) return -1; } + printf("st-flash %s (%s)\n", STLINK_VERSION); + if (o.devname != NULL) /* stlinkv1 */ sl = stlink_v1_open(o.log_level, 1); else /* stlinkv2 */ diff --git a/src/tools/gui/CMakeLists.txt b/src/tools/gui/CMakeLists.txt new file mode 100644 index 000000000..e217af03a --- /dev/null +++ b/src/tools/gui/CMakeLists.txt @@ -0,0 +1,24 @@ +if (NOT gtk_FOUND) + return() +endif() + +set(GUI_SOURCES stlink-gui.c stlink-gui.h) +set(INSTALLED_UI_DIR share/stlink) + +include_directories(SYSTEM ${gtk_INCLUDE_DIRS}) + +add_executable(stlink-gui-local ${GUI_SOURCES}) +set_target_properties(stlink-gui-local PROPERTIES + COMPILE_FLAGS -DSTLINK_UI_DIR=\\"${CMAKE_CURRENT_SOURCE_DIR}/gui\\") +target_link_libraries(stlink-gui-local stlink ${gtk_LDFLAGS}) + + +add_executable(stlink-gui ${GUI_SOURCES}) +set_target_properties(stlink-gui PROPERTIES + COMPILE_FLAGS -DSTLINK_UI_DIR=\\"${CMAKE_INSTALL_PREFIX}/${INSTALLED_UI_DIR}\\") +target_link_libraries(stlink-gui stlink ${gtk_LDFLAGS}) + +install(TARGETS stlink-gui + RUNTIME DESTINATION bin) +install(FILES stlink-gui.ui + DESTINATION ${INSTALLED_UI_DIR}) diff --git a/src/tools/info.c b/src/tools/info.c index d3a315150..58e34718a 100644 --- a/src/tools/info.c +++ b/src/tools/info.c @@ -145,6 +145,7 @@ int main(int ac, char** av) return -1; } + printf("st-info %s (%s)\n", STLINK_VERSION); err = print_data(av); return err; diff --git a/usr/lib/pkgconfig/CMakeLists.txt b/usr/lib/pkgconfig/CMakeLists.txt new file mode 100644 index 000000000..5ddc500ca --- /dev/null +++ b/usr/lib/pkgconfig/CMakeLists.txt @@ -0,0 +1,14 @@ +set(PKG_CONFIG_LIBDIR "\${prefix}/lib/\${deb_host_multiarch}") +set(PKG_CONFIG_INCLUDEDIR "\${prefix}/include/\${deb_host_multiarch}/${PROJECT_NAME}-${PROJECT_VERSION}") +set(PKG_CONFIG_LIBS "-L\${libdir} -l:libstlink.so.${PROJECT_VERSION_MAJOR}") +set(PKG_CONFIG_CFLAGS "-I\${includedir}") +set(PKG_CONFIG_REQUIRES "libusb-1.0") + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/pkg-config.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" +) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION lib/${CMAKE_LIBRARY_PATH}/pkgconfig/ +) diff --git a/pkg-config.pc.cmake b/usr/lib/pkgconfig/pkg-config.pc.cmake similarity index 100% rename from pkg-config.pc.cmake rename to usr/lib/pkgconfig/pkg-config.pc.cmake