Update README
[fw/stlink] / CMakeLists.txt
1 project(stlink C)
2 cmake_minimum_required(VERSION 2.8.7)
3
4 include(CheckCCompilerFlag)
5 find_package(PkgConfig)
6
7 set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake/modules")
8
9 find_package(LibUSB REQUIRED)
10 pkg_check_modules(gtk gtk+-3.0)
11
12 function(add_cflag_if_supported flag)
13     string(REPLACE "-" "_" flagclean ${flag})
14     string(REPLACE "=" "_" flagclean ${flagclean})
15     string(REPLACE "+" "_" flagclean ${flagclean})
16     string(REPLACE "," "_" flagclean ${flagclean})
17     string(TOUPPER ${flagclean} flagclean)
18
19     check_c_compiler_flag(${flag} C_SUPPORTS${flagclean})
20
21     if (C_SUPPORTS${flagclean})
22         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE)
23     endif()
24 endfunction()
25
26 add_cflag_if_supported("-std=gnu99")
27 add_cflag_if_supported("-Wall")
28 add_cflag_if_supported("-Wextra")
29 add_cflag_if_supported("-Wshadow")
30 add_cflag_if_supported("-D_FORTIFY_SOURCE=2")
31 add_cflag_if_supported("-fstrict-aliasing")
32 add_cflag_if_supported("-Wformat")
33 add_cflag_if_supported("-Wformat-security")
34 add_cflag_if_supported("-Wmaybe-uninitialized")
35 add_cflag_if_supported("-Wmissing-variable-declarations")
36 add_cflag_if_supported("-Wshorten-64-to-32")
37 add_cflag_if_supported("-Wimplicit-function-declaration")
38 add_cflag_if_supported("-Wredundant-decls")
39 add_cflag_if_supported("-Wundef")
40 add_cflag_if_supported("-fPIC")
41
42 if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
43         include(CTest)
44         add_cflag_if_supported("-ggdb")
45         add_cflag_if_supported("-O0")
46 elseif()
47         add_cflag_if_supported("-O2")
48 endif()
49
50 set(STLINK_HEADERS
51         include/stlink.h
52         include/stlink/usb.h
53         include/stlink/sg.h
54         include/stlink/logging.h
55         include/stlink/mmap.h
56         include/stlink/chipid.h
57         include/stlink/flash_loader.h
58 )
59
60 set(STLINK_SOURCE
61         src/chipid.c
62         src/common.c
63         src/usb.c
64         src/sg.c
65         src/logging.c
66         src/flash_loader.c
67 )
68
69 include_directories(${LIBUSB_INCLUDE_DIR})
70 include_directories(include)
71 include_directories(src/mingw)
72
73 add_library(${PROJECT_NAME} STATIC
74             ${STLINK_HEADERS} # header files for ide projects generated by cmake
75             ${STLINK_SOURCE})
76 target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARY})
77
78 if (APPLE)
79         find_library(ObjC objc)
80         find_library(CoreFoundation CoreFoundation)
81         find_library(IOKit IOKit)
82         target_link_libraries(${PROJECT_NAME} ${CoreFoundation} ${IOKit} ${ObjC})
83 endif()
84
85 add_executable(st-flash src/tools/flash.c)
86 target_link_libraries(st-flash ${PROJECT_NAME})
87
88 add_executable(st-info src/tools/info.c)
89 target_link_libraries(st-info ${PROJECT_NAME})
90
91 add_executable(st-util src/gdbserver/gdb-remote.c
92                        src/gdbserver/gdb-remote.h
93                        src/gdbserver/gdb-server.c
94                        src/gdbserver/gdb-server.h)
95 target_link_libraries(st-util ${PROJECT_NAME})
96
97 install(TARGETS ${PROJECT_NAME} st-flash st-util st-info
98         RUNTIME DESTINATION bin
99         ARCHIVE DESTINATION lib
100 )
101
102 if(NOT MINGW)
103   list(APPEND STLINK_SOURCE src/tools/term.c)
104   add_executable(st-term src/tools/term.c)
105   target_link_libraries(st-term ${PROJECT_NAME})
106
107   install(TARGETS st-term
108           RUNTIME DESTINATION bin)
109 endif()
110
111 if(gtk_FOUND)
112   include_directories(${gtk_INCLUDE_DIRS})
113   set(GUI_SOURCES src/tools/gui/stlink-gui.c
114                   src/tools/gui/stlink-gui.h)
115
116   add_executable(stlink-gui-local ${GUI_SOURCES})
117   set_target_properties(stlink-gui-local PROPERTIES
118                         COMPILE_FLAGS -DSTLINK_UI_DIR=\\"${CMAKE_CURRENT_SOURCE_DIR}/gui\\")
119   target_link_libraries(stlink-gui-local stlink ${gtk_LDFLAGS})
120
121   set(INSTALLED_UI_DIR ${CMAKE_INSTALL_PREFIX}/share)
122   add_executable(stlink-gui ${GUI_SOURCES})
123   set_target_properties(stlink-gui PROPERTIES
124                         COMPILE_FLAGS -DSTLINK_UI_DIR=\\"${INSTALLED_UI_DIR}\\")
125   target_link_libraries(stlink-gui stlink ${gtk_LDFLAGS})
126
127   install(TARGETS stlink-gui
128           RUNTIME DESTINATION bin)
129   install(FILES src/tools/gui/stlink-gui.ui
130           DESTINATION ${INSTALLED_UI_DIR})
131 endif()
132
133 add_subdirectory(tests)