-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathCMakeLists.txt
113 lines (91 loc) · 2.91 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
cmake_minimum_required(VERSION 3.10)
# set the project name and version
project(fujprog VERSION 4.8)
# control where the static and shared libraries are built so that on windows
# we don't need to tinker with the path to run the executable
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
option(BUILD_STATIC "Build completely static binary" OFF)
option(BUILD_STATICLIB "Build binary with non default static binaries" OFF)
if (BUILD_STATIC)
set(CMAKE_EXE_LINKER_FLAGS "-static")
set(BUILD_SHARED_LIBS OFF)
endif()
if (BUILD_STATICLIB)
find_library(LIBFTDISTATIC libftdi1.a REQUIRED)
find_library(LIBUSBSTATIC libusb-1.0.a REQUIRED)
endif()
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework CoreFoundation -framework IOKit")
endif()
set(FUJPROG_HEADERS
fujprog.h
)
set(FUJPROG_SOURCE
fujprog.c
)
if (MSVC)
set(FUJPROG_SOURCE "${FUJPROG_SOURCE}" "getopt.c")
add_compile_options(
$<$<CONFIG:>:/MT> #---------|
$<$<CONFIG:Debug>:/MTd> #---|-- Statically link the runtime libraries
$<$<CONFIG:Release>:/MT> #--|
)
else()
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBFTDI REQUIRED libftdi1)
pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
link_directories(${LIBUSB_LIBRARY_DIRS} ${LIBFTDI_LIBRARY_DIRS})
endif()
set(fujprog_git_version "unknown")
find_package(Git)
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY "${local_dir}"
OUTPUT_VARIABLE fujprog_git_version
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message( STATUS "GIT hash: ${fujprog_git_version}")
else()
message(STATUS "GIT not found")
endif()
string(TIMESTAMP _time_stamp)
add_executable(fujprog
${FUJPROG_SOURCE}
${FUJPROG_HEADERS}
)
if (WIN32)
link_directories(${PROJECT_SOURCE_DIR})
add_definitions(-DFTD2XX_STATIC=1)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
find_library(LIBFTDISTATIC ftd2xx.lib PATHS ${CMAKE_CURRENT_SOURCE_DIR} REQUIRED)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(fujprog PUBLIC ${LIBFTDISTATIC})
else()
if (BUILD_STATICLIB)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
set_target_properties(fujprog PROPERTIES LINK_SEARCH_START_STATIC 1)
set_target_properties(fujprog PROPERTIES LINK_SEARCH_END_STATIC 1)
target_link_libraries(fujprog PUBLIC ${LIBFTDISTATIC} ${LIBUSBSTATIC})
else()
target_link_libraries(fujprog
${LIBUSB_LIBRARIES}
${LIBFTDI_LIBRARIES}
)
endif()
endif()
# configure a header file to pass the version number only
configure_file(fujprog.h.in fujprog.h)
include_directories(
${LIBUSB_INCLUDE_DIRS}
${LIBFTDI_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
)
if (BUILD_STATIC)
set_target_properties(fujprog PROPERTIES LINK_SEARCH_END_STATIC 1)
endif()
# install
install(TARGETS fujprog DESTINATION bin)