diff --git a/.gitignore b/.gitignore index 3a3a5f38a..23e7ddc07 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ build +build-mingw obj-* *.user* diff --git a/CMakeLists.txt b/CMakeLists.txt index 306d3d6ff..4c53f05ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,78 +1,81 @@ -cmake_minimum_required(VERSION 2.8.7) +cmake_minimum_required(VERSION 3.4.2) set(CMAKE_USER_MAKE_RULES_OVERRIDE cmake/c_flag_overrides.cmake) + project(stlink C) -set(PROJECT_DESCRIPTION "Open source version of the STMicroelectronics Stlink Tools") +set(PROJECT_DESCRIPTION "Open source version of the STMicroelectronics ST-LINK Tools") set(STLINK_UDEV_RULES_DIR "/etc/udev/rules.d" CACHE PATH "Udev rules directory") set(STLINK_MODPROBED_DIR "/etc/modprobe.d" CACHE PATH "modprobe.d directory") set(STLINK_STATIC_LIB ON CACHE BOOL "Install static lib") -if( IS_DIRECTORY ${LIB_INSTALL_DIR}) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +if (IS_DIRECTORY ${LIB_INSTALL_DIR}) set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR} CACHE PATH "Main library directory") set(STLINK_LIBRARY_PATH "${LIB_INSTALL_DIR}") -else() +else () set(LIB_INSTALL_DIR "lib" CACHE PATH "Main library directory") set(STLINK_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}" ) -endif() +endif () -if( IS_DIRECTORY ${INCLUDE_INSTALL_DIR}) +if (IS_DIRECTORY ${INCLUDE_INSTALL_DIR}) set(INCLUDE_INSTALL_DIR ${INCLUDE_INSTALL_DIR} CACHE PATH "Main include directory") set(STLINK_INCLUDE_PATH "${INCLUDE_INSTALL_DIR}" ) -else() +else () set(INCLUDE_INSTALL_DIR "include" CACHE PATH "Main include directory") set(STLINK_INCLUDE_PATH "${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}") -endif() +endif () option(STLINK_GENERATE_MANPAGES "Generate manpages with pandoc" OFF) option(STLINK_INSTALL_UDEV_RULES "Install udev rules files" ON) option(STLINK_INSTALL_MODPROBE_CONF "Install modprobe conf files" ON) -if (POLICY CMP0042) - # Newer cmake on MacOS should use @rpath - cmake_policy (SET CMP0042 NEW) -endif () +# cmake (3.0+) on MacOS should use @rpath +cmake_policy(SET CMP0042 NEW) set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake/modules") -include(cmake/Version.cmake) -if(NOT MSVC) - include(cmake/CFlags.cmake) -endif() +include(cmake/version.cmake) +if (NOT MSVC) + include(cmake/c_flags.cmake) +endif () ### # Dependencies ### find_package(LibUSB REQUIRED) if (NOT APPLE AND NOT WIN32 AND NOT CMAKE_CROSSCOMPILING) - find_package(PkgConfig) - pkg_check_modules(gtk gtk+-3.0) + find_package(PkgConfig) + pkg_check_modules(gtk gtk+-3.0) endif () include(CheckIncludeFile) 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() + add_definitions(-DSTLINK_HAVE_SYS_MMAN_H) +endif () CHECK_INCLUDE_FILE(unistd.h STLINK_HAVE_UNISTD_H) if (STLINK_HAVE_UNISTD_H) - add_definitions(-DSTLINK_HAVE_UNISTD_H) -endif() + add_definitions(-DSTLINK_HAVE_UNISTD_H) +endif () include(CheckLibraryExists) CHECK_LIBRARY_EXISTS(ssp __stack_chk_fail "" _stack_chk_fail_exists) -if(_stack_chk_fail_exists) +if (_stack_chk_fail_exists) set(SSP_LIB ssp) -else() +else () set(SSP_LIB "") -endif() +endif () if (CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_BUILD_TYPE "Debug") -endif() + set(CMAKE_BUILD_TYPE "Debug") +endif () if (${CMAKE_BUILD_TYPE} MATCHES "Debug") - include(CTest) -endif() + include(CTest) +endif () set(STLINK_HEADERS include/stlink.h @@ -82,7 +85,6 @@ set(STLINK_HEADERS include/stlink/mmap.h include/stlink/chipid.h include/stlink/flash_loader.h - include/stlink/stlinkusb.h ) set(STLINK_SOURCE @@ -95,8 +97,8 @@ set(STLINK_SOURCE ) if (WIN32 OR MSYS OR MINGW) - set (STLINK_SOURCE "${STLINK_SOURCE};src/mmap.c;src/mingw/mingw.c") - set (STLINK_HEADERS "${STLINK_HEADERS};src/mingw/mingw.h") + set (STLINK_SOURCE "${STLINK_SOURCE};src/mmap.c;src/mingw/mingw.c") + set (STLINK_HEADERS "${STLINK_HEADERS};src/mingw/mingw.h") endif () include_directories(${LIBUSB_INCLUDE_DIR}) @@ -104,55 +106,56 @@ include_directories(include) include_directories(${PROJECT_BINARY_DIR}/include) include_directories(src/mingw) if (MSVC) - include_directories(src/win32) - include_directories(src/getopt) - # Use string.h rather than strings.h and disable annoying warnings - add_definitions(-DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS /wd4710) + include_directories(src/win32) + include_directories(src/getopt) + # Use string.h rather than strings.h and disable annoying warnings + add_definitions(-DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS /wd4710) endif () ### # Shared library ### if (NOT WIN32) -set(STLINK_LIB_SHARED ${PROJECT_NAME}) + set(STLINK_LIB_SHARED ${PROJECT_NAME}) else () -set(STLINK_LIB_SHARED ${PROJECT_NAME}-shared) -endif() + set(STLINK_LIB_SHARED ${PROJECT_NAME}-shared) +endif () -add_library(${STLINK_LIB_SHARED} SHARED - ${STLINK_HEADERS} # header files for ide projects generated by cmake - ${STLINK_SOURCE} -) -target_link_libraries(${STLINK_LIB_SHARED} ${LIBUSB_LIBRARY}) +add_library( + ${STLINK_LIB_SHARED} SHARED + ${STLINK_HEADERS} # header files for ide projects generated by cmake + ${STLINK_SOURCE} + ) +target_link_libraries( + ${STLINK_LIB_SHARED} + ${LIBUSB_LIBRARY} + ) + +set(STLINK_SHARED_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) -if (WIN32 OR MSYS OR MINGW) - set(STLINK_SHARED_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) -else() - set(STLINK_SHARED_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) -endif() message(STATUS "STLINK_LIB_SHARED: ${STLINK_LIB_SHARED}") message(STATUS "PROJECT_VERSION_MAJOR: ${PROJECT_VERSION_MAJOR}") message(STATUS "VERSION: ${STLINK_SHARED_VERSION}") set_target_properties(${STLINK_LIB_SHARED} - PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} - VERSION ${STLINK_SHARED_VERSION} -) + PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${STLINK_SHARED_VERSION} + ) # Link shared library with apple OS libraries if (APPLE) - find_library(ObjC objc) - find_library(CoreFoundation CoreFoundation) - find_library(IOKit IOKit) + find_library(ObjC objc) + find_library(CoreFoundation CoreFoundation) + find_library(IOKit IOKit) target_link_libraries(${STLINK_LIB_SHARED} ${CoreFoundation} ${IOKit} ${ObjC} ${SSP_LIB}) -endif() +endif () if (WIN32 OR MSYS OR MINGW) target_link_libraries(${STLINK_LIB_SHARED} ${LIBUSB_LIBRARY} wsock32 ws2_32 ${SSP_LIB}) -else() +else () target_link_libraries(${STLINK_LIB_SHARED} ${LIBUSB_LIBRARY} ${SSP_LIB}) -endif() +endif () install(TARGETS ${STLINK_LIB_SHARED} @@ -165,31 +168,29 @@ install(TARGETS ${STLINK_LIB_SHARED} set(STLINK_LIB_STATIC ${PROJECT_NAME}-static) add_library(${STLINK_LIB_STATIC} STATIC - ${STLINK_HEADERS} # header files for ide projects generated by cmake - ${STLINK_SOURCE} -) + ${STLINK_HEADERS} # header files for ide projects generated by cmake + ${STLINK_SOURCE} + ) # Link shared library with apple OS libraries if (APPLE) - find_library(ObjC objc) - find_library(CoreFoundation CoreFoundation) - find_library(IOKit IOKit) + find_library(ObjC objc) + find_library(CoreFoundation CoreFoundation) + find_library(IOKit IOKit) target_link_libraries(${STLINK_LIB_STATIC} ${CoreFoundation} ${IOKit} ${ObjC} ${SSP_LIB}) endif() if (WIN32 OR MSYS OR MINGW) target_link_libraries(${STLINK_LIB_STATIC} ${LIBUSB_LIBRARY} wsock32 ws2_32 ${SSP_LIB}) -else() +else () target_link_libraries(${STLINK_LIB_STATIC} ${LIBUSB_LIBRARY} ${SSP_LIB}) -endif() +endif () set_target_properties(${STLINK_LIB_STATIC} PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) if (STLINK_STATIC_LIB) - install(TARGETS ${STLINK_LIB_STATIC} - ARCHIVE DESTINATION ${STLINK_LIBRARY_PATH} - ) -endif() + install(TARGETS ${STLINK_LIB_STATIC} ARCHIVE DESTINATION ${STLINK_LIBRARY_PATH}) +endif () ### # Tools @@ -197,32 +198,28 @@ endif() add_executable(st-flash src/tools/flash.c src/tools/flash_opts.c) if (WIN32 OR APPLE) target_link_libraries(st-flash ${STLINK_LIB_STATIC} ${SSP_LIB}) -else() +else () target_link_libraries(st-flash ${STLINK_LIB_SHARED} ${SSP_LIB}) -endif() +endif () add_executable(st-info src/tools/info.c) if (WIN32 OR APPLE) target_link_libraries(st-info ${STLINK_LIB_STATIC} ${SSP_LIB}) -else() +else () target_link_libraries(st-info ${STLINK_LIB_SHARED} ${SSP_LIB}) -endif() +endif () -install(TARGETS st-flash st-info - RUNTIME DESTINATION bin -) +install(TARGETS st-flash st-info RUNTIME DESTINATION bin) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - if (STLINK_INSTALL_MODPROBE_CONF) - install(FILES etc/modprobe.d/stlink_v1.conf - DESTINATION ${STLINK_MODPROBED_DIR}/) - endif() - if (STLINK_INSTALL_UDEV_RULES) - file(GLOB RULES_FILES etc/udev/rules.d/*.rules) - install(FILES ${RULES_FILES} - DESTINATION ${STLINK_UDEV_RULES_DIR}/) - endif() -endif() + if (STLINK_INSTALL_MODPROBE_CONF) + install(FILES etc/modprobe.d/stlink_v1.conf DESTINATION ${STLINK_MODPROBED_DIR}/) + endif () + if (STLINK_INSTALL_UDEV_RULES) + file(GLOB RULES_FILES etc/udev/rules.d/*.rules) + install(FILES ${RULES_FILES} DESTINATION ${STLINK_UDEV_RULES_DIR}/) + endif () +endif () add_subdirectory(src/gdbserver) add_subdirectory(src/tools/gui) @@ -235,5 +232,5 @@ add_subdirectory(include) add_subdirectory(doc/man) add_subdirectory(tests) -include(cmake/CPackConfig.cmake) +include(cmake/cpack_config.cmake) include(CPack) diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake deleted file mode 100644 index 20768453b..000000000 --- a/cmake/CPackConfig.cmake +++ /dev/null @@ -1,27 +0,0 @@ -set (CPACK_PACKAGE_NAME ${PROJECT_NAME}) -set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) -set (CPACK_SET_DESTDIR "ON") -if (APPLE) - set(CPACK_GENERATOR "ZIP") - set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-macosx-amd64") - file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/dist/osx") - set (CPACK_INSTALL_PREFIX "") - set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/dist/osx") -elseif (WIN32) - set(CPACK_GENERATOR "ZIP") - file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/dist/windows") - set (CPACK_INSTALL_PREFIX "") - set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/dist/windows") -elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND EXISTS "/etc/debian_version") - message(STATUS "Debian-based Linux OS detected") - set(CPACK_GENERATOR "DEB") - - if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") - set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}-amd64" ) - endif() - - set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/texane/stlink") - set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Jerry Jacobs") - set(CPACK_PACKAGE_CONTACT "jerry.jacobs@xor-gate.org") - set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "STM32 stlink programmer tools") -endif() diff --git a/cmake/c_flag_overrides.cmake b/cmake/c_flag_overrides.cmake index 663e08175..c15815e17 100644 --- a/cmake/c_flag_overrides.cmake +++ b/cmake/c_flag_overrides.cmake @@ -1,6 +1,6 @@ if(MSVC) message(STATUS "MSVC C Flags override to /MT") - set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") diff --git a/cmake/CFlags.cmake b/cmake/c_flags.cmake similarity index 86% rename from cmake/CFlags.cmake rename to cmake/c_flags.cmake index b76856d24..fbadd6d9e 100644 --- a/cmake/CFlags.cmake +++ b/cmake/c_flags.cmake @@ -14,7 +14,7 @@ function(add_cflag_if_supported flag) endif() endfunction() -add_cflag_if_supported("-std=gnu99") +add_cflag_if_supported("-std=gnu11") add_cflag_if_supported("-Wall") add_cflag_if_supported("-Wextra") add_cflag_if_supported("-Wshadow") @@ -34,17 +34,17 @@ add_cflag_if_supported("-Wimplicit-function-declaration") # /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") + add_cflag_if_supported("-Wredundant-decls") endif () if (NOT WIN32) - add_cflag_if_supported("-fPIC") + add_cflag_if_supported("-fPIC") endif () if(${CMAKE_BUILD_TYPE} MATCHES "Debug") - add_cflag_if_supported("-ggdb") - add_cflag_if_supported("-O0") + add_cflag_if_supported("-ggdb") + add_cflag_if_supported("-O0") else() - add_cflag_if_supported("-O2") + add_cflag_if_supported("-O2") add_cflag_if_supported("-Werror") endif() diff --git a/cmake/cpack_config.cmake b/cmake/cpack_config.cmake new file mode 100644 index 000000000..72a98a821 --- /dev/null +++ b/cmake/cpack_config.cmake @@ -0,0 +1,28 @@ +set (CPACK_PACKAGE_NAME ${PROJECT_NAME}) +set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +set (CPACK_SET_DESTDIR "ON") + +if (APPLE) + set(CPACK_GENERATOR "ZIP") + set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-macosx-amd64") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/dist/osx") + set (CPACK_INSTALL_PREFIX "") + set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/dist/osx") +elseif (WIN32) + set(CPACK_GENERATOR "ZIP") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/dist/windows") + set (CPACK_INSTALL_PREFIX "") + set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/dist/windows") +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND EXISTS "/etc/debian_version") + message(STATUS "Debian-based Linux OS detected") + set(CPACK_GENERATOR "DEB") + + if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}-amd64" ) + endif() + + set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/texane/stlink") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Luca Boccassi") + set(CPACK_PACKAGE_CONTACT "bluca@debian.org") + set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "STM32 STlink programmer tools") +endif() diff --git a/cmake/linux-mingw32.cmake b/cmake/linux-mingw32.cmake index 2044a7e22..2b4799037 100644 --- a/cmake/linux-mingw32.cmake +++ b/cmake/linux-mingw32.cmake @@ -1,4 +1,4 @@ -# Sample toolchain file for building for Windows from an Debian/Ubuntu Linux system. +# Sample toolchain file for building for Windows from a Debian/Ubuntu Linux system. # # Typical usage: # *) install cross compiler: `sudo apt-get install mingw-w64` @@ -14,7 +14,7 @@ set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) # target environment on the build host system -# set 1st to dir with the cross compiler's C/C++ headers/libs +# set 1st to dir with the cross compiler's C/C++ headers/libs set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) # modify default behavior of FIND_XXX() commands to @@ -22,4 +22,4 @@ set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) # search for programs in the build host environment set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/linux-mingw64.cmake b/cmake/linux-mingw64.cmake index db4bd70d0..f8b523965 100644 --- a/cmake/linux-mingw64.cmake +++ b/cmake/linux-mingw64.cmake @@ -1,4 +1,4 @@ -# Sample toolchain file for building for Windows from an Ubuntu Linux system. +# Sample toolchain file for building for Windows from a Debian/Ubuntu Linux system. # # Typical usage: # *) install cross compiler: `sudo apt-get install mingw-w64` @@ -14,7 +14,7 @@ set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) # target environment on the build host system -# set 1st to dir with the cross compiler's C/C++ headers/libs +# set 1st to dir with the cross compiler's C/C++ headers/libs set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) # modify default behavior of FIND_XXX() commands to @@ -22,4 +22,4 @@ set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) # search for programs in the build host environment set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/modules/Find7Zip.cmake b/cmake/modules/Find7Zip.cmake index e4d33dfce..c462f73de 100644 --- a/cmake/modules/Find7Zip.cmake +++ b/cmake/modules/Find7Zip.cmake @@ -1,5 +1,4 @@ -find_program(ZIP_EXECUTABLE NAMES 7z.exe p7zip - HINTS - "C:\\Program Files\\7-Zip\\" - "C:\\Program Files (x86)\\7-Zip\\" +find_program( + ZIP_EXECUTABLE NAMES 7z.exe p7zip + 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 c8f467902..a8b65cba3 100644 --- a/cmake/modules/FindLibUSB.cmake +++ b/cmake/modules/FindLibUSB.cmake @@ -8,56 +8,60 @@ if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") # FreeBSD - FIND_PATH(LIBUSB_INCLUDE_DIR NAMES libusb.h - HINTS - /usr/include - ) + FIND_PATH(LIBUSB_INCLUDE_DIR NAMES libusb.h + HINTS + /usr/include + ) else () # other OS - FIND_PATH(LIBUSB_INCLUDE_DIR NAMES libusb.h - HINTS - /usr - /usr/local - /opt - PATH_SUFFIXES libusb-1.0 - ) + FIND_PATH(LIBUSB_INCLUDE_DIR NAMES libusb.h + HINTS + /usr + /usr/local + /opt + PATH_SUFFIXES libusb-1.0 + ) endif() # macOS if (APPLE) - set(LIBUSB_NAME libusb-1.0.a) + set(LIBUSB_NAME libusb-1.0.a) elseif(MSYS OR MINGW) - set(LIBUSB_NAME usb-1.0) + set(LIBUSB_NAME usb-1.0) elseif(MSVC) - set(LIBUSB_NAME libusb-1.0.lib) + set(LIBUSB_NAME libusb-1.0.lib) elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - set(LIBUSB_NAME usb) + set(LIBUSB_NAME usb) else() - set(LIBUSB_NAME usb-1.0) + set(LIBUSB_NAME usb-1.0) endif() if (MSYS OR MINGW) - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} - HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW64/static) - else () - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} - HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW32/static) - endif () -elseif(MSVC) - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW64/static) + else () + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW32/static) + endif () +elseif (MSVC) + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MS64/dll) - else () - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} - HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MS32/dll) - endif () + else () + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MS32/dll) + endif () else() - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} - HINTS - /usr - /usr/local - /opt) + find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + HINTS + /usr + /usr/local + /opt) endif () include(FindPackageHandleStandardArgs) @@ -72,7 +76,7 @@ if(NOT LIBUSB_FOUND) set(LIBUSB_WIN_VERSION 1.0.23) set(LIBUSB_WIN_ARCHIVE libusb-${LIBUSB_WIN_VERSION}.7z) set(LIBUSB_WIN_ARCHIVE_PATH ${CMAKE_BINARY_DIR}/${LIBUSB_WIN_ARCHIVE}) - set(LIBUSB_WIN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/3thparty/libusb-${LIBUSB_WIN_VERSION}) + set(LIBUSB_WIN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/3rdparty/libusb-${LIBUSB_WIN_VERSION}) if(EXISTS ${LIBUSB_WIN_ARCHIVE_PATH}) message(STATUS "libusb archive already in build folder") @@ -102,13 +106,15 @@ if(NOT LIBUSB_FOUND) if (MSYS OR MINGW) if (CMAKE_SIZEOF_VOID_P EQUAL 8) - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW64/static NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH ) else () - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW32/static NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH @@ -116,13 +122,15 @@ if(NOT LIBUSB_FOUND) endif () elseif(MSVC) if (CMAKE_SIZEOF_VOID_P EQUAL 8) - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MS64/dll NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH ) else () - find_library(LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + find_library( + LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MS32/dll NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH diff --git a/cmake/modules/pandocology.cmake b/cmake/modules/pandocology.cmake index f39f8d952..763eae558 100644 --- a/cmake/modules/pandocology.cmake +++ b/cmake/modules/pandocology.cmake @@ -93,6 +93,7 @@ function(pandocology_get_file_extension varname filename) STRING(REGEX MATCH "\\.[^.]*\$" result "${name}") SET(${varname} "${result}" PARENT_SCOPE) endfunction() + ############################################################################### function(pandocology_add_input_dir source_dir dest_parent_dir dir_dest_filelist_var) @@ -370,4 +371,3 @@ endfunction() function(add_pandoc_document) add_document(${ARGV}) endfunction() - diff --git a/cmake/Version.cmake b/cmake/version.cmake similarity index 94% rename from cmake/Version.cmake rename to cmake/version.cmake index 71859015c..bdfe95ace 100644 --- a/cmake/Version.cmake +++ b/cmake/version.cmake @@ -60,8 +60,6 @@ else() message(STATUS "Git or repo not found.") endif() - - if(NOT __detect_version) message(STATUS "Try to detect version from \"${PROJECT_SOURCE_DIR}/.version\" file.") if(EXISTS ${PROJECT_SOURCE_DIR}/.version) @@ -71,7 +69,7 @@ if(NOT __detect_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}) + "\\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) @@ -90,6 +88,5 @@ if(NOT __detect_version) message(FATAL_ERROR "Unable to determine project version") endif() - message(STATUS "stlink version: ${PROJECT_VERSION}") -message(STATUS " Major ${PROJECT_VERSION_MAJOR} Minor ${PROJECT_VERSION_MINOR} Patch ${PROJECT_VERSION_PATCH}") +message(STATUS "Major ${PROJECT_VERSION_MAJOR} Minor ${PROJECT_VERSION_MINOR} Patch ${PROJECT_VERSION_PATCH}") diff --git a/doc/app-example/CMakeLists.txt b/doc/app-example/CMakeLists.txt index 0e91bed6f..a7697720c 100644 --- a/doc/app-example/CMakeLists.txt +++ b/doc/app-example/CMakeLists.txt @@ -1,12 +1,11 @@ -# Warning: This example assumes that you are building on a host -# with pkg-config available (e.g. linux). The logic required to -# build under windows/mingw and/or mac was intentionally omitted -# to keep this CMakeLists as small as possible +# Warning: This example assumes that you are building on a host with pkg-config available (e.g. linux). +# The logic required to build under windows/mingw and/or mac was intentionally omitted to keep this +# CMakeLists as small as possible. -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.4.2) project(st-hello) -set(PROJECT_VERSION 0.1) +set(PROJECT_VERSION 0.1) set(SRCS main.c) find_package(PkgConfig) @@ -14,15 +13,10 @@ pkg_check_modules(STLINK REQUIRED stlink) set(CMAKE_C_FLAGS " ${STLINK_CFLAGS_OTHER} -Wall -Werror") -include_directories( - ${STLINK_INCLUDE_DIRS} -) +include_directories(${STLINK_INCLUDE_DIRS}) add_executable(${PROJECT_NAME} ${SRCS}) -target_link_libraries(${PROJECT_NAME} - ${STLINK_LIBRARIES} -) +target_link_libraries(${PROJECT_NAME} ${STLINK_LIBRARIES}) -install(TARGETS ${PROJECT_NAME} - DESTINATION bin) +install(TARGETS ${PROJECT_NAME} DESTINATION bin) diff --git a/doc/compiling.md b/doc/compiling.md index 0133981b1..bcaf7d567 100644 --- a/doc/compiling.md +++ b/doc/compiling.md @@ -15,10 +15,10 @@ On Windows users should ensure that the following software is installed: 1. Install `7zip` from 2. Install `git` from -3. Install `cmake` from +3. Install `cmake` from
+ Ensure that you add cmake to the $PATH system variable when following the instructions by the setup assistant. 4. Install - _EITHER_: **MinGW-w64** from (mingw-w64-install.exe)
- Ensure that you add MinGW to the $PATH system variable when following the instructions by the setup assistant.
- _OR_: **Visual Studio 2017 CE** (other versions will likely work as well, but are untested; the Community edition is free for open source development) 5. Create a new destination folder at a place of your choice @@ -51,7 +51,7 @@ Release) and build the solution normally (F7). NOTE:
This solution will link to the dll version of libusb-1.0.y
To debug or run the executable, the dll version of libusb-1.0 must be either on the path, or in the same folder as the executable.
-It can be copied from here: `build\3thparty\libusb-1.0.21\MS32\dll\libusb-1.0.dll`. +It can be copied from here: `build\3rdparty\libusb-1.0.21\MS32\dll\libusb-1.0.dll`. ## Linux ### Common requirements diff --git a/doc/man/CMakeLists.txt b/doc/man/CMakeLists.txt index 949cd2fcf..dce8fbfa6 100644 --- a/doc/man/CMakeLists.txt +++ b/doc/man/CMakeLists.txt @@ -1,37 +1,37 @@ set(MANPAGES - st-util - st-flash - st-info -) + st-util + st-flash + st-info + ) # Only generate manpages with pandoc in Debug builds if(${STLINK_GENERATE_MANPAGES}) - include(pandocology) + include(pandocology) - foreach(manpage ${MANPAGES}) - add_document( - ${manpage}.1 - SOURCES ${manpage}.md - PANDOC_DIRECTIVES -s -t man - PRODUCT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - ) - endforeach() + foreach(manpage ${MANPAGES}) + add_document( + ${manpage}.1 + SOURCES ${manpage}.md + PANDOC_DIRECTIVES -s -t man + PRODUCT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + endforeach() else() - message(STATUS "Manpage generation disabled") + message(STATUS "Manpage generation disabled") 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(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 AND NOT WIN32) - install(FILES ${f} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1) - unset(f) - endif() + if (f AND NOT WIN32) + 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 a5121aee5..94df89958 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,17 +1,8 @@ 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 ${STLINK_INCLUDE_PATH} -) -install(FILES ${CMAKE_SOURCE_DIR}/include/stm32.h - DESTINATION ${STLINK_INCLUDE_PATH} -) -install(FILES ${STLINK_HEADERS} - DESTINATION ${STLINK_INCLUDE_PATH}/stlink -) + "${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 ${STLINK_INCLUDE_PATH}) +install(FILES ${CMAKE_SOURCE_DIR}/include/stm32.h DESTINATION ${STLINK_INCLUDE_PATH}) +install(FILES ${STLINK_HEADERS} DESTINATION ${STLINK_INCLUDE_PATH}/stlink) diff --git a/scripts/mingw64-build.bat b/scripts/mingw64-build.bat index 773195410..15ec21cd0 100644 --- a/scripts/mingw64-build.bat +++ b/scripts/mingw64-build.bat @@ -1,5 +1,8 @@ @echo off -set PATH=C:\Program Files (x86)\CMake\bin;C:\Program Files\CMake\bin;C:\Program Files\mingw-w64\x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0\mingw64\bin;%PATH% +cd .. +mkdir build-mingw +cd build-mingw +set PATH=C:\Program Files (x86)\CMake\bin;C:\Program Files\CMake\bin;C:\Program Files\mingw-w64\x86_64-8.1.0-win32-sjlj-rt_v6-rev0\mingw64\bin;%PATH% cmake -G "MinGW Makefiles" .. mingw32-make mingw32-make install DESTDIR=_install diff --git a/src/gdbserver/CMakeLists.txt b/src/gdbserver/CMakeLists.txt index b4674ebbb..5fb0c1ab8 100644 --- a/src/gdbserver/CMakeLists.txt +++ b/src/gdbserver/CMakeLists.txt @@ -4,7 +4,8 @@ set(STUTIL_SOURCE gdb-server.c gdb-server.h semihosting.c - semihosting.h) + semihosting.h + ) if (MSVC) # We need a getopt from somewhere... @@ -19,6 +20,4 @@ else() target_link_libraries(st-util ${STLINK_LIB_SHARED} ${SSP_LIB}) endif() -install(TARGETS st-util - RUNTIME DESTINATION bin -) +install(TARGETS st-util RUNTIME DESTINATION bin) diff --git a/src/tools/gui/CMakeLists.txt b/src/tools/gui/CMakeLists.txt index 91aabc53b..850f483a9 100644 --- a/src/tools/gui/CMakeLists.txt +++ b/src/tools/gui/CMakeLists.txt @@ -1,5 +1,6 @@ if (NOT gtk_FOUND) - return() + message(STATUS "gtk not found!") + return() endif() set(GUI_SOURCES stlink-gui.c stlink-gui.h) @@ -8,26 +9,26 @@ 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_DEFINITIONS STLINK_UI_DIR="${CMAKE_CURRENT_SOURCE_DIR}") +set_target_properties( + stlink-gui-local PROPERTIES + COMPILE_DEFINITIONS STLINK_UI_DIR="${CMAKE_CURRENT_SOURCE_DIR}" + ) target_link_libraries(stlink-gui-local ${STLINK_LIB_STATIC} ${gtk_LDFLAGS} ${SSP_LIB}) add_executable(stlink-gui ${GUI_SOURCES}) -set_target_properties(stlink-gui PROPERTIES - COMPILE_DEFINITIONS STLINK_UI_DIR="${CMAKE_INSTALL_PREFIX}/${INSTALLED_UI_DIR}") +set_target_properties( + stlink-gui PROPERTIES + COMPILE_DEFINITIONS STLINK_UI_DIR="${CMAKE_INSTALL_PREFIX}/${INSTALLED_UI_DIR}" + ) target_link_libraries(stlink-gui ${STLINK_LIB_STATIC} ${gtk_LDFLAGS} ${SSP_LIB}) -install(TARGETS stlink-gui - RUNTIME DESTINATION bin) -install(FILES stlink-gui.ui - DESTINATION ${INSTALLED_UI_DIR}) +install(TARGETS stlink-gui RUNTIME DESTINATION bin) +install(FILES stlink-gui.ui DESTINATION ${INSTALLED_UI_DIR}) + if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # Install desktop entry - install(FILES stlink-gui.desktop - DESTINATION share/applications) + install(FILES stlink-gui.desktop DESTINATION share/applications) # Install icon - install(FILES art/stlink-gui.svg - DESTINATION share/icons/hicolor/scalable/apps) + install(FILES art/stlink-gui.svg DESTINATION share/icons/hicolor/scalable/apps) endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") - diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9d0bdffaf..e8ec5fec0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,13 +1,13 @@ set(TESTS - usb - sg -) + usb + sg + ) foreach(test ${TESTS}) - add_executable(${test} ${test}.c) - add_dependencies(${test} ${STLINK_LIB_STATIC}) + add_executable(${test} ${test}.c) + add_dependencies(${test} ${STLINK_LIB_STATIC}) target_link_libraries(${test} ${STLINK_LIB_STATIC} ${SSP_LIB}) - add_test(${test} ${CMAKE_CURRENT_BINARY_DIR}/${test}) + add_test(${test} ${CMAKE_CURRENT_BINARY_DIR}/${test}) endforeach() add_executable(flash flash.c "${CMAKE_SOURCE_DIR}/src/tools/flash_opts.c") diff --git a/usr/lib/pkgconfig/CMakeLists.txt b/usr/lib/pkgconfig/CMakeLists.txt index a656ff623..5a8227125 100644 --- a/usr/lib/pkgconfig/CMakeLists.txt +++ b/usr/lib/pkgconfig/CMakeLists.txt @@ -5,10 +5,11 @@ 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" -) + "${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 ${STLINK_LIBRARY_PATH}/pkgconfig/ -) +install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${STLINK_LIBRARY_PATH}/pkgconfig/ + )