-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
198 lines (178 loc) · 7.93 KB
/
Copy pathCMakeLists.txt
File metadata and controls
198 lines (178 loc) · 7.93 KB
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
cmake_minimum_required(VERSION 3.18)
# Если не были переданы аргументы, то задаются стандартные значения
if(NOT DEFINED VERBOSE)
set(VERBOSE True)
endif()
if(NOT DEFINED MXSRCLIB_ARCH)
message(FATAL_ERROR "Необходимо выбрать архитектуру.")
endif()
if(NOT DEFINED MXSRCLIB_UTF8)
set(MXSRCLIB_UTF8 False)
endif()
if(NOT DEFINED CMAKE_CXX_COMPILER)
message(FATAL_ERROR "Необходимо выбрать компилятор.")
endif()
set(MXSRCLIB_DIR ${CMAKE_CURRENT_SOURCE_DIR})
# Проверка наличия файла irsconfig.h
if (NOT EXISTS "${MXSRCLIB_DIR}/irsconfig.h")
configure_file("${MXSRCLIB_DIR}/irsconfig0.h" "${MXSRCLIB_DIR}/irsconfig.h" COPYONLY)
endif()
# Подключение необходимых архитектур
set(RELATIVE_PATH_LIST_arch "arch")
if(MXSRCLIB_ARCH STREQUAL "arm")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
elseif(MXSRCLIB_ARCH STREQUAL "arm_st_hal")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
# Архитектуре arm_st_hal необходима архитектура arm
list(APPEND RELATIVE_PATH_LIST_arch "arch/arm")
list(APPEND ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/arch/arm")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch_2 "${MXSRCLIB_DIR}/arch/arm/*.h")
list(APPEND ORIGIN_HEADERS_FILES_LIST_arch ${ORIGIN_HEADERS_FILES_LIST_arch_2})
elseif(MXSRCLIB_ARCH STREQUAL "avr")
message(WARNING "Архитектура ${MXSRCLIB_ARCH} в библиотеке mxsrclib не была протестирована")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
elseif(MXSRCLIB_ARCH STREQUAL "cbuilder")
message(WARNING "Архитектура ${MXSRCLIB_ARCH} в библиотеке mxsrclib не была протестирована")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
elseif(MXSRCLIB_ARCH STREQUAL "dos32")
message(WARNING "Архитектура ${MXSRCLIB_ARCH} в библиотеке mxsrclib не была протестирована")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
elseif(MXSRCLIB_ARCH STREQUAL "linux")
message(WARNING "Архитектура ${MXSRCLIB_ARCH} в библиотеке mxsrclib не была протестирована")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
elseif(MXSRCLIB_ARCH STREQUAL "qt")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
elseif(MXSRCLIB_ARCH STREQUAL "visualcpp")
message(WARNING "Архитектура ${MXSRCLIB_ARCH} в библиотеке mxsrclib не была протестирована")
set(RELATIVE_PATH_LIST_arch "${RELATIVE_PATH_LIST_arch}/${MXSRCLIB_ARCH}")
set(ORIGIN_HEADERS_DIR_LIST_arch "${MXSRCLIB_DIR}/${RELATIVE_PATH_LIST_arch}")
file(GLOB_RECURSE ORIGIN_HEADERS_FILES_LIST_arch "${ORIGIN_HEADERS_DIR_LIST_arch}/*.h")
else()
message(FATAL_ERROR "Недопустимое значение переменной MXSRCLIB_ARCH")
endif()
if(${VERBOSE})
message(STATUS "Используемый компилятор: ${CMAKE_CXX_COMPILER}")
endif()
set(MXSRCLIB_SOURCES
correct_alg.cpp
csvwork.cpp
dbgprn.cpp
hardflowg.cpp
i2c.cpp
imp_filt.cpp
irs_chart_data.cpp
irsadc.cpp
irsalg.cpp
irscalc.cpp
irscpu.cpp
irsdbgutil.cpp
irsdcp.cpp
irsdev.cpp
irsdevices.cpp
irsdsp.cpp
irseeprom.cpp
irserror.cpp
irsexcept.cpp
irsfilter.cpp
irsfunnel.cpp
irsgpio.cpp
irshfftp.cpp
irsinit.cpp
irsint.cpp
irskbd.cpp
irslocale.cpp
irslwip.cpp
irsmath.cpp
irsmatrix.cpp
irsmbus.cpp
irsmcutil.cpp
irsmem.cpp
irsmenu.cpp
irsprop.cpp
irsstd.cpp
irsstring.cpp
irsstrm.cpp
irssysutils.cpp
irstcpip.cpp
irstime.cpp
irsvariant.cpp
measmul.cpp
meassup.cpp
mxdata.cpp
mxextbase.cpp
mxextchart.cpp
mxifar.cpp
mxnet.cpp
mxnetc.cpp
mxnetr.cpp
niusbgpib.cpp
niusbgpib_hardflow.cpp
timer.cpp
simple_ftp_server.cpp
simple_ftp_server.h
arch/${MXSRCLIB_ARCH}/mxifa.cpp
arch/${MXSRCLIB_ARCH}/counter.cpp
)
set(MXSRCLIB_HEADERS_DIR
.
${ORIGIN_HEADERS_DIR_LIST_arch}
)
project(mxsrclib)
add_library(mxsrclib STATIC ${MXSRCLIB_SOURCES})
target_include_directories(mxsrclib PRIVATE ${MXSRCLIB_HEADERS_DIR})
set_target_properties(mxsrclib PROPERTIES OUTPUT_NAME mxsrclib)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(COMPILER_OPTIONS
"-finput-charset=CP1251"
)
set(WARNING_OPTIONS
"-Werror"
"-Wextra"
"-Wall"
# Только потому что баг с GCC diagnostics ignored "-Wdeprecated" пофиксили только в gcc 13
# Проблемный варнинг возникает при подключении <strstream>
"-Wno-deprecated"
)
else()
message(FATAL_ERROR "Нужно дописать опции предупреждений для компилятора")
endif()
target_compile_options(mxsrclib PRIVATE "${COMPILER_OPTIONS}" "${WARNING_OPTIONS}")
# Добавление зависимостей
if(MXSRCLIB_ARCH STREQUAL "arm_st_hal")
if(TARGET ${MXSRCLIB_STM32CUBE_TARGET})
target_link_libraries(mxsrclib ${MXSRCLIB_STM32CUBE_TARGET})
else()
message(FATAL_ERROR "Не указан таргет с библиотекой STM32Cube.")
endif()
elseif (MXSRCLIB_ARCH STREQUAL "qt")
if (CMAKE_SYSTEM_NAME STREQUAL "CYGWIN" OR CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_link_libraries(mxsrclib -lpsapi -lws2_32 -static)
endif ()
endif()
# Подключение сконвертированных (если выбран режим конвертации) заголовков
if(${MXSRCLIB_UTF8})
add_subdirectory(utf8_headers)
add_dependencies(mxsrclib utf8_headers)
get_target_property(CONVERTED_MXSRCLIB_HEADERS_DIR utf8_headers CONVERTED_HEADERS_DIR)
set(CONVERTED_MXSRCLIB_HEADERS ${CONVERTED_MXSRCLIB_HEADERS_DIR})
foreach(RELATIVE_PATH_arch ${RELATIVE_PATH_LIST_arch})
list(APPEND CONVERTED_MXSRCLIB_HEADERS "${CONVERTED_MXSRCLIB_HEADERS_DIR}/${RELATIVE_PATH_arch}")
endforeach()
target_include_directories(mxsrclib INTERFACE ${CONVERTED_MXSRCLIB_HEADERS})
else()
target_include_directories(mxsrclib INTERFACE ${MXSRCLIB_HEADERS_DIR})
endif()