summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt181
1 files changed, 137 insertions, 44 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 064aa06..59d9970 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,24 +2,82 @@
# General cmake settings
###
-cmake_minimum_required(VERSION 3.4.2)
+cmake_minimum_required(VERSION 3.10.2)
cmake_policy(SET CMP0042 NEW)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
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)
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+set(CMAKE_C_EXTENSIONS ON)
###
-# General project settings
+#
+# Default cmake directories:
+#
+# | Target Type | GNUInstallDirs Variable | Built-In Default |
+# | --- | --- | --- |
+# | RUNTIME | ${CMAKE_INSTALL_BINDIR} | bin |
+# | LIBRARY | ${CMAKE_INSTALL_LIBDIR} | lib |
+# | ARCHIVE | ${CMAKE_INSTALL_LIBDIR} | lib |
+# | PRIVATE_HEADER | ${CMAKE_INSTALL_INCLUDEDIR} | include |
+# | PUBLIC_HEADER | ${CMAKE_INSTALL_INCLUDEDIR} | include |
+# | FILE_SET (type HEADERS) | ${CMAKE_INSTALL_INCLUDEDIR} | include |
+#
+# | TYPE Argument | GNUInstallDirs Variable | Built-In Default |
+# | --- | --- | --- |
+# | BIN | ${CMAKE_INSTALL_BINDIR} | bin |
+# | SBIN | ${CMAKE_INSTALL_SBINDIR} | sbin |
+# | LIB | ${CMAKE_INSTALL_LIBDIR} | lib |
+# | INCLUDE | ${CMAKE_INSTALL_INCLUDEDIR} | include |
+# | SYSCONF | ${CMAKE_INSTALL_SYSCONFDIR} | etc |
+# | SHAREDSTATE | ${CMAKE_INSTALL_SHARESTATEDIR} | com |
+# | LOCALSTATE | ${CMAKE_INSTALL_LOCALSTATEDIR} | var |
+# | RUNSTATE | ${CMAKE_INSTALL_RUNSTATEDIR} | <LOCALSTATE dir>/run |
+# | DATA | ${CMAKE_INSTALL_DATADIR} | <DATAROOT dir> |
+# | INFO | ${CMAKE_INSTALL_INFODIR} | <DATAROOT dir>/info |
+# | LOCALE | ${CMAKE_INSTALL_LOCALEDIR} | <DATAROOT dir>/locale |
+# | MAN | ${CMAKE_INSTALL_MANDIR} | <DATAROOT dir>/man |
+# | DOC | ${CMAKE_INSTALL_DOCDIR} | <DATAROOT dir>/doc |
+#
+# ${CMAKE_BINARY_DIR}
+# This is the full path to the top level of the current CMake build tree.
+# For an in-source build, this would be the same as CMAKE_SOURCE_DIR.
+#
+# ${CMAKE_SOURCE_DIR}
+# This is the full path to the top level of the current CMake source tree.
+# For an in-source build, this would be the same as CMAKE_BINARY_DIR.
+#
+# ${CMAKE_CURRENT_BINARY_DIR}
+# The path to the binary directory currently being processed.
+# This is the full path to the build directory that is currently being processed by cmake.
+# Each directory added by add_subdirectory() will create a binary directory in the build tree,
+# and as it is being processed this variable will be set.
+# For in-source builds this is the current source directory being processed.
+#
+# ${CMAKE_CURRENT_SOURCE_DIR}
+# The path to the source directory currently being processed.
+# This is the full path to the source directory that is currently being processed by cmake.
+#
+###
+
+
+###
+# General Project Settings
###
project(stlink C)
set(PROJECT_DESCRIPTION "Open source version of the STMicroelectronics ST-LINK Tools")
+include(${CMAKE_MODULE_PATH}/get_version.cmake) # Determine project version
+
include(GNUInstallDirs) # Define GNU standard installation directories
-## Determine project version
-include(${CMAKE_MODULE_PATH}/get_version.cmake)
+# Define install directory for st-link shared files
+cmake_host_system_information(RESULT OS_NAME QUERY OS_NAME)
+message(STATUS "Checking for OS_NAME: ${OS_NAME}")
+
## Set C build flags
if (NOT MSVC)
@@ -30,7 +88,7 @@ else ()
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")
-endif ()
+endif()
###
@@ -50,10 +108,10 @@ if (_stack_chk_fail_exists)
set(SSP_LIB -static ssp)
else ()
set(SSP_LIB ssp)
- endif ()
+ endif()
else ()
set(SSP_LIB "")
-endif ()
+endif()
CHECK_INCLUDE_FILE(sys/mman.h STLINK_HAVE_SYS_MMAN_H)
if (STLINK_HAVE_SYS_MMAN_H)
@@ -68,12 +126,17 @@ endif()
CHECK_INCLUDE_FILE(unistd.h STLINK_HAVE_UNISTD_H)
if (STLINK_HAVE_UNISTD_H)
add_definitions(-DSTLINK_HAVE_UNISTD_H)
-endif ()
+endif()
+
+CHECK_INCLUDE_FILE(dirent.h STLINK_HAVE_DIRENT_H)
+if (STLINK_HAVE_DIRENT_H)
+ add_definitions(-DSTLINK_HAVE_DIRENT_H)
+endif()
if (MSVC)
# 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 ()
+endif()
###
@@ -88,10 +151,17 @@ include_directories(${PROJECT_BINARY_DIR}/inc) # contains version.h
include_directories(src)
include_directories(src/st-flash)
+include_directories(src/st-info)
+include_directories(src/st-trace)
+include_directories(src/st-util)
include_directories(src/stlink-lib)
## Set installation directory for header files
+if (WIN32)
+set(STLINK_INCLUDE_PATH ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Main include install directory")
+else ()
set(STLINK_INCLUDE_PATH ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} CACHE PATH "Main include install directory")
+endif()
## Subordinate CMakeLists for version config & header installation
add_subdirectory(inc)
@@ -100,27 +170,40 @@ add_subdirectory(inc)
set(STLINK_HEADERS
inc/backend.h
inc/stlink.h
- src/stlink-lib/commands.h
- src/stlink-lib/libusb_settings.h
- src/stlink-lib/reg.h
+ inc/stm32.h
+ inc/stm32flash.h
+ src/stlink-lib/calculate.h
src/stlink-lib/chipid.h
+ src/stlink-lib/commands.h
+ src/stlink-lib/common_flash.h
src/stlink-lib/flash_loader.h
+ src/stlink-lib/helper.h
+ src/stlink-lib/libusb_settings.h
+ src/stlink-lib/lib_md5.h
src/stlink-lib/logging.h
+ src/stlink-lib/map_file.h
src/stlink-lib/md5.h
+ src/stlink-lib/option_bytes.h
+ src/stlink-lib/register.h
src/stlink-lib/sg.h
src/stlink-lib/usb.h
- src/stlink-lib/helper.h
)
set(STLINK_SOURCE
- src/common.c
+ src/stlink-lib/calculate.c
src/stlink-lib/chipid.c
+ src/stlink-lib/common_flash.c
+ src/stlink-lib/common.c
src/stlink-lib/flash_loader.c
+ src/stlink-lib/helper.c
src/stlink-lib/logging.c
+ src/stlink-lib/map_file.c
+ src/stlink-lib/lib_md5.c
src/stlink-lib/md5.c
+ src/stlink-lib/option_bytes.c
+ src/stlink-lib/read_write.c
src/stlink-lib/sg.c
src/stlink-lib/usb.c
- src/stlink-lib/helper.c
)
if (WIN32)
@@ -132,7 +215,7 @@ if (WIN32)
# Add drop-in replacement for unistd.h to sources
include_directories(src/win32/unistd)
set(STLINK_HEADERS "${STLINK_HEADERS};src/win32/unistd/unistd.h")
- endif ()
+ endif()
if (NOT STLINK_HAVE_SYS_MMAN_H)
include_directories(src/win32/mmap)
@@ -144,20 +227,18 @@ if (WIN32)
set(STLINK_SOURCE "${STLINK_SOURCE};src/win32/sys_time.c")
set(STLINK_HEADERS "${STLINK_HEADERS};src/win32/sys_time.h")
endif()
-endif ()
+endif()
## Include test execution for test-targets for target Debug
if (${CMAKE_BUILD_TYPE} MATCHES "Debug")
include(CTest)
-endif ()
+endif()
###
# Libraries
###
-set(STLINK_LIBRARY_PATH ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Main library install directory")
-
# Set the environment variable LD_LIBRARY_PATH to point to /usr/local/lib (per default).
execute_process(COMMAND bash -c "export LD_LIBRARY_PATH=${CMAKE_INSTALL_LIBDIR}")
@@ -183,18 +264,25 @@ set_target_properties(${STLINK_LIB_SHARED} PROPERTIES
)
# Link shared library
-if (APPLE) # ... with Apple macOS libraries
- find_library(ObjC objc)
- find_library(CoreFoundation CoreFoundation)
- find_library(IOKit IOKit)
- target_link_libraries(${STLINK_LIB_SHARED} ${LIBUSB_LIBRARY} ${SSP_LIB} ${ObjC} ${CoreFoundation} ${IOKit})
-elseif (WIN32) # ... with Windows libraries
+if (WIN32) # ... with Windows libraries
target_link_libraries(${STLINK_LIB_SHARED} ${LIBUSB_LIBRARY} ${SSP_LIB} wsock32 ws2_32)
else ()
target_link_libraries(${STLINK_LIB_SHARED} ${LIBUSB_LIBRARY} ${SSP_LIB})
-endif ()
+endif()
-install(TARGETS ${STLINK_LIB_SHARED} DESTINATION ${STLINK_LIBRARY_PATH})
+install(TARGETS ${STLINK_LIB_SHARED}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+
+# Copy libusb DLL-library to binary output folder
+if (WIN32)
+file(COPY ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW64/dll/libusb-1.0.dll
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
+file(COPY ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW64/dll/libusb-1.0.dll
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
+endif()
###
@@ -222,18 +310,13 @@ set_target_properties(${STLINK_LIB_STATIC} PROPERTIES
)
# Link static library
-if (APPLE) # ... with Apple macOS libraries
- find_library(ObjC objc)
- find_library(CoreFoundation CoreFoundation)
- find_library(IOKit IOKit)
- target_link_libraries(${STLINK_LIB_STATIC} ${LIBUSB_LIBRARY} ${SSP_LIB} ${ObjC} ${CoreFoundation} ${IOKit})
-elseif (WIN32) # ... with Windows libraries
+if (WIN32) # ... with Windows libraries
target_link_libraries(${STLINK_LIB_STATIC} ${LIBUSB_LIBRARY} ${SSP_LIB} wsock32 ws2_32)
else ()
target_link_libraries(${STLINK_LIB_STATIC} ${LIBUSB_LIBRARY} ${SSP_LIB})
-endif ()
+endif()
-install(TARGETS ${STLINK_LIB_STATIC} ARCHIVE DESTINATION ${STLINK_LIBRARY_PATH})
+install(TARGETS ${STLINK_LIB_STATIC} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
###
@@ -250,14 +333,14 @@ if (MSVC)
include_directories(src/win32/getopt)
set(ST-UTIL_SOURCES "${ST-UTIL_SOURCES};src/win32/getopt/getopt.c")
set(ST-TRACE_SOURCES "${ST-TRACE_SOURCES};src/win32/getopt/getopt.c")
-endif ()
+endif()
add_executable(st-flash ${ST-FLASH_SOURCES})
add_executable(st-info ${ST-INFO_SOURCES})
add_executable(st-util ${ST-UTIL_SOURCES})
add_executable(st-trace ${ST-TRACE_SOURCES})
-if (WIN32 OR APPLE)
+if (WIN32)
target_link_libraries(st-flash ${STLINK_LIB_STATIC} ${SSP_LIB})
target_link_libraries(st-info ${STLINK_LIB_STATIC} ${SSP_LIB})
target_link_libraries(st-util ${STLINK_LIB_STATIC} ${SSP_LIB})
@@ -267,7 +350,7 @@ else ()
target_link_libraries(st-info ${STLINK_LIB_SHARED} ${SSP_LIB})
target_link_libraries(st-util ${STLINK_LIB_SHARED} ${SSP_LIB})
target_link_libraries(st-trace ${STLINK_LIB_SHARED} ${SSP_LIB})
-endif ()
+endif()
install(TARGETS st-flash DESTINATION ${CMAKE_INSTALL_BINDIR})
install(TARGETS st-info DESTINATION ${CMAKE_INSTALL_BINDIR})
@@ -288,20 +371,30 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(STLINK_UDEV_RULES_DIR "/lib/udev/rules.d" CACHE PATH "udev rules directory")
file(GLOB RULES_FILES ${CMAKE_SOURCE_DIR}/config/udev/rules.d/*.rules)
install(FILES ${RULES_FILES} DESTINATION ${STLINK_UDEV_RULES_DIR})
-endif ()
+endif()
###
# Additional build tasks
###
-add_subdirectory(src/stlink-gui) # contains subordinate CMakeLists to build GUI
-add_subdirectory(tests) # contains subordinate CMakeLists to build test executables
-add_subdirectory(cmake/packaging) # contains subordinate CMakeLists to build packages
+# MCU configuration files
+if (WIN32)
+set(CMAKE_CHIPS_DIR ${CMAKE_INSTALL_PREFIX}/config/chips)
+else ()
+set(CMAKE_CHIPS_DIR ${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/chips)
+endif ()
+add_definitions( -DSTLINK_CHIPS_DIR="${CMAKE_CHIPS_DIR}" )
+file(GLOB CHIP_FILES ${CMAKE_SOURCE_DIR}/config/chips/*.chip)
+install(FILES ${CHIP_FILES} DESTINATION ${CMAKE_CHIPS_DIR})
+# Documentation / manpages
option(STLINK_GENERATE_MANPAGES "Generate manpages with pandoc" OFF)
add_subdirectory(doc/man) # contains subordinate CMakeLists to generate manpages
+add_subdirectory(src/stlink-gui) # contains subordinate CMakeLists to build GUI
+add_subdirectory(tests) # contains subordinate CMakeLists to build test executables
+add_subdirectory(cmake/packaging) # contains subordinate CMakeLists to build packages
###
# Uninstall target
@@ -317,4 +410,4 @@ if (NOT TARGET uninstall)
uninstall COMMAND ${CMAKE_COMMAND}
-P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake
)
-endif ()
+endif()