forked from tai/fxload-win32
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
139 lines (102 loc) · 4.08 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
cmake_minimum_required(VERSION 3.8)
cmake_policy(VERSION 3.8)
project(fxload VERSION 2.1)
# set compile flags and options
# ----------------------------------------------------------
# default to release build type
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Allowed build types." FORCE)
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "Type of build. Controls debugging information and optimizations." FORCE)
endif()
option(USE_WERROR "If set to true, convert compiler warnings into compiler errors. Mainly intended for CI." FALSE)
# compile flags
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_C_FLAGS_RELEASE "-O3")
set(CMAKE_C_FLAGS_DEBUG "-g3 -O0")
string(APPEND CMAKE_C_FLAGS " -Wall")
if(USE_WERROR)
string(APPEND CMAKE_C_FLAGS " -Werror")
endif()
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
set(CMAKE_C_FLAGS_RELEASE "/O2 /MD")
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3") # Use reasonable warning flags
# Suppress warning about zero sized arrays used by libusb
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4200")
if(USE_WERROR)
string(APPEND CMAKE_C_FLAGS " /WX")
endif()
# disable verbose security warnings
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_C_COMPILER_ID} STREQUAL "AppleClang")
set(CMAKE_C_FLAGS_RELEASE "-O3")
set(CMAKE_C_FLAGS_DEBUG "-g3 -O0")
string(APPEND CMAKE_C_FLAGS " -Wall")
if(USE_WERROR)
string(APPEND CMAKE_C_FLAGS " -Werror")
endif()
else()
message(WARNING "Unknown compiler, don't know how to set CXXFLAGS")
endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS_DEBUG "-g3 -O0")
string(APPEND CMAKE_CXX_FLAGS " -Wall")
if(USE_WERROR)
string(APPEND CMAKE_CXX_FLAGS " -Werror")
endif()
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS_RELEASE "/O2 /MD")
set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") # Use reasonable warning flags
# Suppress warning about zero sized arrays used by libusb
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4200")
if(USE_WERROR)
string(APPEND CMAKE_CXX_FLAGS " /WX")
endif()
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS_DEBUG "-g3 -O0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
if(USE_WERROR)
string(APPEND CMAKE_CXX_FLAGS " -Werror")
endif()
else()
message(WARNING "Unknown compiler, don't know how to set CXXFLAGS")
endif()
# use C99 and C++17, with extensions
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_EXTENSIONS TRUE)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS TRUE)
# Find dependencies
# ----------------------------------------------------------
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
find_package(USB1 REQUIRED)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CLI11/LICENSE")
message(FATAL_ERROR "CLI11 submodule missing, please run 'git submodule update --init'")
endif()
# CLI11 is a header only library
add_library(CLI11 INTERFACE)
target_include_directories(CLI11 INTERFACE CLI11/include)
# Add subdirs
# ----------------------------------------------------------
add_subdirectory(src)
add_subdirectory(resources)
# Set up packaging (on windows)
# ----------------------------------------------------------
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
# General CPack options
set(CPACK_PACKAGE_NAME "FXLoad")
set(CPACK_PACKAGE_VENDOR "Mbed CE")
set(CPACK_PACKAGE_DESCRIPTION "FXLoad is a tool for flashing firmware to the EZ-USB series of USB interface microcontrollers.")
set(CPACK_PACKAGE_VERSION ${fxload_VERSION})
set(CPACK_PACKAGE_INSTALL_DIRECTORY "FXLoad")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/mbed-ce/fxload")
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/copying.txt)
# NSIS specific options
set(CPACK_GENERATOR NSIS)
# Make sure the installer provides an option to add fxload to the path
set(CPACK_NSIS_MODIFY_PATH TRUE)
include(CPack)
endif()