-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
135 lines (116 loc) · 3.84 KB
/
CMakeLists.txt
File metadata and controls
135 lines (116 loc) · 3.84 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
cmake_minimum_required(VERSION 3.10)
project(seftool VERSION 1.05 LANGUAGES C)
set(CMAKE_C_STANDARD 99)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
# Source files
file(GLOB_RECURSE SEFTOOL_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.c"
)
# Executable
add_executable(seftool ${SEFTOOL_SOURCES})
# Include directories
target_include_directories(seftool PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/core
${CMAKE_CURRENT_SOURCE_DIR}/src/utils
${CMAKE_CURRENT_SOURCE_DIR}/src/emp/common
${CMAKE_CURRENT_SOURCE_DIR}/src/eric/common
)
# --- Set static libs ---
set(BUILD_SHARED_LIBS OFF)
set(ENABLE_COMMONCRYPTO OFF)
set(ZLIB_USE_STATIC_LIBS ON)
if (WIN32)
# --- Helper to find static libraries (Windows only) ---
function(find_static_library LIB_NAME OUT_VAR)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".a")
find_library(${OUT_VAR} NAMES ${LIB_NAME})
if (NOT ${OUT_VAR})
message(FATAL_ERROR "Static library '${LIB_NAME}' not found.")
else()
message(STATUS "Found static library: ${${OUT_VAR}}")
endif()
endfunction()
# --- Dependencies for Windows ---
find_static_library(serialport SERIALPORT_LIB)
find_static_library(z ZLIB_LIB)
find_static_library(bz2 BZIP2_LIB)
find_static_library(minizip MINIZIP_LIB)
target_link_libraries(seftool PRIVATE
${SERIALPORT_LIB}
${MINIZIP_LIB}
${ZLIB_LIB}
${BZIP2_LIB}
setupapi
cfgmgr32
advapi32
)
else()
# --- Dependencies for Linux / macOS ---
# libserialport
find_path(SERIALPORT_INCLUDE_DIR libserialport.h)
find_library(SERIALPORT_LIB serialport)
if (NOT SERIALPORT_LIB)
message(FATAL_ERROR "libserialport not found.")
endif()
# zlib
find_package(ZLIB REQUIRED)
# bzip2 (optional)
find_package(BZip2)
if (BZIP2_FOUND)
target_link_libraries(seftool PRIVATE BZip2::BZip2)
endif()
# minizip
find_path(MINIZIP_INCLUDE_DIR minizip/zip.h)
find_library(MINIZIP_LIB minizip)
if (NOT MINIZIP_LIB)
message(FATAL_ERROR "minizip not found.")
endif()
# --- Link all ---
target_include_directories(seftool PRIVATE
${SERIALPORT_INCLUDE_DIR}
${MINIZIP_INCLUDE_DIR}
)
target_link_libraries(seftool PRIVATE
${SERIALPORT_LIB}
${MINIZIP_LIB}
ZLIB::ZLIB
)
endif()
# --- libusb & libftdi
# find_package(PkgConfig REQUIRED)
# pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0)
# target_link_libraries(seftool PRIVATE PkgConfig::libusb)
# pkg_check_modules(libftdi1 REQUIRED IMPORTED_TARGET libftdi1)
# find_package(libftdi1 REQUIRED)
# target_link_libraries(seftool PRIVATE PkgConfig::libftdi1)
# --- Compiler / linker flags ---
if (MSVC)
target_compile_definitions(seftool PRIVATE _CRT_SECURE_NO_WARNINGS)
else()
if (BUILD_STATIC AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
# careful: full -static on Linux often breaks
target_link_options(seftool PRIVATE -static -static-libgcc)
elseif (MINGW)
# Windows portable EXE
target_link_options(seftool PRIVATE -static -static-libgcc)
endif()
if (CMAKE_BUILD_TYPE MATCHES "Release")
target_link_options(seftool PRIVATE -s)
endif()
target_compile_options(seftool PRIVATE -Wall -Wextra -O2 -Wno-missing-braces)
endif()
set(RESOURCE_DIRS loader rest break49 anycid)
foreach(DIR ${RESOURCE_DIRS})
if (WIN32)
add_custom_command(TARGET seftool POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/${DIR}
${CMAKE_BINARY_DIR}/${DIR})
else()
add_custom_command(TARGET seftool POST_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_SOURCE_DIR}/${DIR}
${CMAKE_BINARY_DIR}/${DIR})
endif()
endforeach()