-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
109 lines (90 loc) · 2.64 KB
/
Makefile
File metadata and controls
109 lines (90 loc) · 2.64 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
BUILD_TYPE ?= debug
TARGET_PLATFORM ?= native
HOST_UNAME := $(shell uname -s)
ifeq ($(TARGET_PLATFORM),native)
ifeq ($(HOST_UNAME),Linux)
TARGET_PLATFORM = linux
endif
ifeq ($(HOST_UNAME),Darwin)
TARGET_PLATFORM = macos
endif
endif
ifeq ($(TARGET_PLATFORM),linux)
export CC = gcc
export CFLAGS = -w -std=gnu11 -D_DEFAULT_SOURCE
export LDFLAGS = -lpthread -lm -ldl
export AR = ar
export EXT =
export PLATFORM = linux
endif
ifeq ($(TARGET_PLATFORM),macos)
export CC = x86_64-apple-darwin25.2-clang
export CFLAGS = -w -std=gnu11 -D_DEFAULT_SOURCE
export LDFLAGS = -framework CoreFoundation
export AR = x86_64-apple-darwin25.2-ar
export EXT =
export PLATFORM = macos
endif
ifeq ($(TARGET_PLATFORM),macos-arm)
export CC = arm64-apple-darwin25.2-clang
export CFLAGS = -w -std=gnu11 -D_DEFAULT_SOURCE
export LDFLAGS = -framework CoreFoundation
export AR = arm64-apple-darwin25.2-ar
export EXT =
export PLATFORM = macos-arm
endif
ifeq ($(TARGET_PLATFORM),windows)
export CC = x86_64-w64-mingw32-gcc
export CFLAGS = -w -std=c11 -D_DEFAULT_SOURCE
export LDFLAGS = -lws2_32 -static
export AR = x86_64-w64-mingw32-ar
export EXT = .exe
export PLATFORM = windows
endif
ifeq ($(BUILD_TYPE),debug)
export CFLAGS += -g -O0 -DDEBUG
export CONFIG = debug
else
export CFLAGS += -O2 -DNDEBUG
export CONFIG = release
endif
export BUILD_DIR = build/$(PLATFORM)-$(CONFIG)
export OBJ_DIR = $(BUILD_DIR)/obj
export BIN_DIR = $(BUILD_DIR)/bin
export LIB_DIR = $(BUILD_DIR)/lib
export SRC_DIR = src
# Reset targets list
ALL_TARGETS :=
# Include module makefiles
include src/xen/Makefile
include src/xenc/Makefile
.PHONY: all clean dirs info all-platforms
all: dirs $(ALL_TARGETS)
dirs:
@mkdir -p $(OBJ_DIR) $(BIN_DIR) $(LIB_DIR)
clean:
rm -rf build/$(PLATFORM)-$(CONFIG)
clean-all:
rm -rf build
all-platforms:
$(MAKE) TARGET_PLATFORM=linux BUILD_TYPE=release
$(MAKE) TARGET_PLATFORM=linux BUILD_TYPE=debug
$(MAKE) TARGET_PLATFORM=windows BUILD_TYPE=release
$(MAKE) TARGET_PLATFORM=windows BUILD_TYPE=debug
$(MAKE) TARGET_PLATFORM=macos BUILD_TYPE=release
$(MAKE) TARGET_PLATFORM=macos BUILD_TYPE=debug
$(MAKE) TARGET_PLATFORM=macos-arm BUILD_TYPE=release
$(MAKE) TARGET_PLATFORM=macos-arm BUILD_TYPE=debug
info:
@echo "Target Platform: $(TARGET_PLATFORM)"
@echo "Host Platform: $(HOST_UNAME)"
@echo "Build Type: $(BUILD_TYPE)"
@echo "Compiler: $(CC)"
@echo "CFLAGS: $(CFLAGS)"
@echo "LDFLAGS: $(LDFLAGS)"
@echo "Build Dir: $(BUILD_DIR)"
@echo "Targets: $(ALL_TARGETS)"
run-xen:
./build/linux-debug/bin/xen
run-xenc:
./build/linux-debug/bin/xenc