-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
120 lines (99 loc) · 3.2 KB
/
Makefile
File metadata and controls
120 lines (99 loc) · 3.2 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
# ---- COMPILERS ----
CC = gcc
MUSL_CC = musl-gcc
WIN_CC = x86_64-w64-mingw32-gcc
# ---- COMMON FLAGS ----
CFLAGS_BASE = -Wall -Wextra -g
TLS_OPENSSL = -DMG_TLS=MG_TLS_OPENSSL
TLS_NONE = -DMG_TLS=MG_TLS_NONE
# ---- DIRECTORIES ----
BIN_DIR = bin
OBJ_DIR = $(BIN_DIR)/obj
# ---- SOURCES ----
SRC = mongoose.c ghost.c util.c ghost-server.c ghost-client.c
OBJ = $(SRC:%.c=$(OBJ_DIR)/%.o)
# ---- MUSL OPENSSL ----
MUSL_OPENSSL_DIR = /opt/musl-openssl
MUSL_CFLAGS = -I$(MUSL_OPENSSL_DIR)/include
MUSL_LDFLAGS = -L$(MUSL_OPENSSL_DIR)/lib64 -lssl -lcrypto
# ---- BIN NAMES ----
LINUX_BIN = $(BIN_DIR)/ghost-linux-amd64
STATIC_BIN = $(BIN_DIR)/ghost-linux-amd64-static
MUSL_BIN = $(BIN_DIR)/ghost-linux-amd64
WIN_BIN = $(BIN_DIR)/ghost-win-amd64.exe
# =========================================================
# DEFAULT TARGET (Linux dynamic)
# =========================================================
all:
$(MAKE) build \
CC=$(CC) \
BIN=$(LINUX_BIN) \
CFLAGS="$(CFLAGS_BASE) $(TLS_OPENSSL)" \
LDFLAGS="-lssl -lcrypto"
# =========================================================
# STATIC (glibc)
# =========================================================
static:
$(MAKE) build \
CC=$(CC) \
BIN=$(STATIC_BIN) \
CFLAGS="$(CFLAGS_BASE) $(TLS_OPENSSL) -static" \
LDFLAGS="-lssl -lcrypto -static"
# =========================================================
# MUSL (portable static)
# =========================================================
musl:
$(MAKE) build \
CC=$(MUSL_CC) \
BIN=$(MUSL_BIN) \
CFLAGS="$(CFLAGS_BASE) $(TLS_OPENSSL) -static $(MUSL_CFLAGS)" \
LDFLAGS="$(MUSL_LDFLAGS) -static"
# =========================================================
# MACOS (ARM64 - Apple Silicon)
# =========================================================
MAC_CC = clang
MAC_OPENSSL_DIR = /opt/homebrew/opt/openssl@3
MAC_CFLAGS = $(CFLAGS_BASE) $(TLS_OPENSSL) -I$(MAC_OPENSSL_DIR)/include
MAC_LDFLAGS = $(MAC_OPENSSL_DIR)/lib/libssl.a \
$(MAC_OPENSSL_DIR)/lib/libcrypto.a \
-ldl -lpthread
MAC_BIN = $(BIN_DIR)/ghost-macos-arm64
mac:
$(MAKE) build \
CC=$(MAC_CC) \
BIN=$(MAC_BIN) \
CFLAGS="$(MAC_CFLAGS)" \
LDFLAGS="$(MAC_LDFLAGS)"
# =========================================================
# WINDOWS (make win) or (make win tls=1) in this case you will need openssl compiler static libs for x86_64-w64-mingw32
# =========================================================
win:
$(MAKE) build \
CC=$(WIN_CC) \
BIN=$(WIN_BIN) \
CFLAGS="$(CFLAGS_BASE) $(if $(tls),$(TLS_OPENSSL),$(TLS_NONE))" \
LDFLAGS="$(if $(tls),-lssl -lcrypto -lws2_32 -lcrypt32,-lws2_32) -static -static-libgcc"
# =========================================================
# BUILD CORE
# =========================================================
build: clean $(BIN)
# ---- Directories ----
$(BIN_DIR):
mkdir -p $(BIN_DIR)
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
# ---- Compile ----
$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR)
$(CC) $(CFLAGS) -c $< -o $@
# ---- Link ----
$(BIN): $(OBJ) | $(BIN_DIR)
$(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@
# =========================================================
# CLEAN
# =========================================================
clean:
rm -rf $(BIN_DIR)
rebuild:
$(MAKE) clean
$(MAKE) all
.PHONY: all static musl win build clean rebuild