about summary refs log tree commit diff stats
path: root/CMakeLists.txt
blob: 54e2441bfc21e25bbc48f84bafa358709a72755f (plain) (blame)
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
cmake_minimum_required(VERSION 3.18)

project(wifi DESCRIPTION "802.11 Parsing / Generation library" VERSION 0.1)

execute_process(COMMAND git rev-parse --abbrev-ref HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GITBRANCH)
execute_process(COMMAND git log -1 --pretty=format:%h OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GITHASH)
execute_process(COMMAND date OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE BUILDTIME)
set(LIBWIFI_VERSION "0.0.8")


set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu17")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wformat=2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong -D_FORTIFY_SOURCE=2 ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes -Wstrict-prototypes")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")

if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Walloca -Wformat-security -Wnull-dereference -Wstack-protector")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wvla -Warray-bounds -Warray-bounds-pointer-arithmetic -Wassign-enum -Wbad-function-cast")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconditional-uninitialized -Wfloat-equal -Wformat-type-confusion -Widiomatic-parentheses")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-fallthrough -Wloop-analysis -Wpointer-arith")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wswitch-enum -Wtautological-constant-in-range-compare -Wunreachable-code-aggressive -Wcomma")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
else()
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat-overflow=2 -Wformat-truncation=2 -Wformat-security -Wnull-dereference -Wstack-protector")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wtrampolines -Walloca -Wvla -Warray-bounds=2 -Wimplicit-fallthrough=3 -Wtraditional-conversion")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshift-overflow=2 -Wcast-qual -Wstringop-overflow=4 -Wconversion -Wlogical-op")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wduplicated-cond -Wduplicated-branches -Wformat-signedness -Wshadow -Wstrict-overflow=4 -Wundef")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wstack-usage=1000000 -Wcast-align=strict")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-clash-protection -fPIE -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wl,-z,separate-code")
endif(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")



set(CMAKE_MACOSX_RPATH 1)

message(" ")
message(" _  _  _                _   __  _   ")
message("| |(_)| |              (_) / _|(_)  ")
message("| | _ | |__  __      __ _ | |_  _   ")
message("| || || '_ \\ \\ \\ /\\ / /| ||  _|| |  ")
message("| || || |_| | \\ V  V / | || |  | |  ")
message("|_||_||_.__/   \\_/\\_/  |_||_|  |_|  ")
message("-----------------------------------")
message("802.11 Parsing / Generation Library")
message("Version: ${LIBWIFI_VERSION}, Git: ${GITBRANCH} (${GITHASH}), Time: ${BUILDTIME}")
message("Compiler: ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    message("Building for Debug")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ggdb -O0")
    add_compile_definitions(LIBWIFI_VERSION="dev-${GITBRANCH}-${GITHASH}")
else()
    message("Building for Release")
    add_compile_definitions(LIBWIFI_VERSION="${LIBWIFI_VERSION}")
endif(CMAKE_BUILD_TYPE STREQUAL "Debug")

message(" ")

file(GLOB_RECURSE libwifi_src
    "src/libwifi/*.h"
    "src/libwifi/*.c"
)

add_library(wifi SHARED ${libwifi_src})
set_target_properties(wifi PROPERTIES LINKER_LANGUAGE C)
set_target_properties(wifi PROPERTIES VERSION ${LIBWIFI_VERSION})
set_target_properties(wifi PROPERTIES SOVERSION 0)
set_target_properties(wifi PROPERTIES PUBLIC_HEADER src/libwifi.h)

add_library(wifi_static STATIC ${libwifi_src})
set_target_properties(wifi_static PROPERTIES LINKER_LANGUAGE C)
set_target_properties(wifi_static PROPERTIES VERSION ${LIBWIFI_VERSION})
set_target_properties(wifi_static PROPERTIES PUBLIC_HEADER src/libwifi.h)
set_target_properties(wifi_static PROPERTIES OUTPUT_NAME wifi)

install(DIRECTORY src/libwifi/core/ DESTINATION /usr/local/include/libwifi/core FILES_MATCHING PATTERN "*.h")
install(DIRECTORY src/libwifi/parse/ DESTINATION /usr/local/include/libwifi/parse FILES_MATCHING PATTERN "*.h")
install(DIRECTORY src/libwifi/gen/ DESTINATION /usr/local/include/libwifi/gen FILES_MATCHING PATTERN "*.h")
install(TARGETS wifi LIBRARY DESTINATION /usr/local/lib PUBLIC_HEADER DESTINATION /usr/local/include)

add_custom_target(uninstall COMMAND rm -rf /usr/local/include/libwifi; rm -rf /usr/local/include/libwifi.h; rm -rf /usr/local/lib/libwifi*)