-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
65 lines (54 loc) · 2.19 KB
/
Copy pathMakefile
File metadata and controls
65 lines (54 loc) · 2.19 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
SDKROOT?= $(shell xcrun --sdk macosx --show-sdk-path)
KERNEL_FW= $(SDKROOT)/System/Library/Frameworks/Kernel.framework
KERNEL_HEADERS= $(KERNEL_FW)/Headers
USR_HEADERS= $(SDKROOT)/usr/include
CC = $(shell xcrun -find -sdk $(SDKROOT) cc)
AR ?= $(shell xcrun -find -sdk $(SDKROOT) ar)
RM ?= rm -f
ARCHFLAGS?= -arch arm64e
TARGET_TRIPLE?= arm64e-apple-macos12.0
CFLAGS?= -target $(TARGET_TRIPLE) \
-std=gnu99 \
-ffunction-sections \
-fdata-sections \
-Bstatic \
-x c \
-nostdinc \
-fno-builtin \
-fno-common \
-mkernel \
-fno-stack-check \
-fno-stack-protector \
$(ARCHFLAGS) \
-Wall -Wextra -Wno-unused-function
ifeq ($(findstring arm64,$(TARGET_TRIPLE)),arm64)
CFLAGS+= -Iinclude \
-Iinclude/libkernx \
-isystem $(KERNEL_HEADERS)/arm64 \
-isystem $(KERNEL_HEADERS)/arm
else
CFLAGS+= -Iinclude
endif
CFLAGS+= -isystem $(KERNEL_HEADERS) \
-isystem $(USR_HEADERS)
# Compile the vendored XNU headers in their kernel-private configuration,
# matching the kext build (see kext/Makefile).
CFLAGS+= -DKERNEL -DPRIVATE -DKERNEL_PRIVATE -DXNU_KERNEL_PRIVATE \
-DBSD_KERNEL_PRIVATE -DMACH_KERNEL_PRIVATE -D__APPLE_API_PRIVATE \
-D_DARWIN_C_SOURCE -DMACH_BSD -DXNU_TARGET_OS_OSX -DXNU_PLATFORM_MacOSX
EXT = a
LIB = libkernx.$(EXT)
SRCS = $(wildcard src/*.c)
LIB_OBJS = $(patsubst src/%.c,%.o,$(sort $(SRCS)))
INC = -Iinclude
all: $(LIB)
clean:
@$(RM) $(LIB_OBJS) $(LIB)
@echo "$(LIB_OBJS)" | xargs -n1 | sed 's|^|clean |'
$(LIB): $(LIB_OBJS)
@$(AR) rcs $@ $^
@echo "$^" | xargs -n1 | sed 's|^|AR |'
@echo "AR $@"
%.o: src/%.c
@$(CC) -o $@ $(CFLAGS) -c $< $(INC)
@echo "$@" | xargs -n1 | sed 's|^|CC |'