project(stlink C) cmake_minimum_required(VERSION 2.8.7) include(CheckCCompilerFlag) find_package(PkgConfig) set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake/modules") find_package(LibUSB REQUIRED) pkg_check_modules(gtk gtk+-3.0) 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") add_cflag_if_supported("-Wredundant-decls") add_cflag_if_supported("-Wundef") add_cflag_if_supported("-fPIC") if(${CMAKE_BUILD_TYPE} MATCHES "Debug") include(CTest) add_cflag_if_supported("-ggdb") add_cflag_if_supported("-O0") elseif() add_cflag_if_supported("-O2") endif() set(HFILES src/stlink-common.h src/stlink-usb.h src/stlink-sg.h src/uglylogging.h src/mmap.h) set(CFILES src/stlink-common.c src/stlink-usb.c src/stlink-sg.c src/uglylogging.c ) include_directories(${LIBUSB_INCLUDE_DIR}) include_directories(src) include_directories(mingw) add_library(${PROJECT_NAME} STATIC ${HFILES} # header files for ide projects generated by cmake ${CFILES}) target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARIES}) add_executable(st-flash flash/main.c) target_link_libraries(st-flash ${PROJECT_NAME}) add_executable(st-info src/st-info.c) target_link_libraries(st-info ${PROJECT_NAME}) add_executable(st-util gdbserver/gdb-remote.c gdbserver/gdb-remote.h gdbserver/gdb-server.c gdbserver/gdb-server.h) target_link_libraries(st-util ${PROJECT_NAME}) install(TARGETS ${PROJECT_NAME} st-flash st-util st-info RUNTIME DESTINATION bin ARCHIVE DESTINATION lib ) if(NOT MINGW) list(APPEND CFILES src/st-term.c) add_executable(st-term src/st-term.c) target_link_libraries(st-term ${PROJECT_NAME}) install(TARGETS st-term RUNTIME DESTINATION bin) endif() if(gtk_FOUND) include_directories(${gtk_INCLUDE_DIRS}) set(GUI_SOURCES gui/stlink-gui.c gui/stlink-gui.h) 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}) set(INSTALLED_UI_DIR ${CMAKE_INSTALL_PREFIX}/share) add_executable(stlink-gui ${GUI_SOURCES}) set_target_properties(stlink-gui PROPERTIES COMPILE_FLAGS -DSTLINK_UI_DIR=\\"${INSTALLED_UI_DIR}\\") target_link_libraries(stlink-gui stlink ${gtk_LDFLAGS}) install(TARGETS stlink-gui RUNTIME DESTINATION bin) install(FILES gui/stlink-gui.ui DESTINATION ${INSTALLED_UI_DIR}) endif()