forked from hdlx/AltAppSwitcher
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
132 lines (107 loc) · 4.24 KB
/
Makefile
File metadata and controls
132 lines (107 loc) · 4.24 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
ARCH = x86_64
CONF = Debug
# Argument check
ifeq ($(CONF), Debug)
else ifeq ($(CONF), Release)
else
$(error Bad CONF argument)
endif
ifeq ($(ARCH), x86_64)
else ifeq ($(ARCH), aarch64)
else
$(error Bad ARCH argument)
endif
# Directories
ROOTDIR = $(CURDIR)
OUTPUTDIR = $(ROOTDIR)/Output
BUILDDIR = $(OUTPUTDIR)/$(CONF)_$(ARCH)
SOURCEDIR = $(ROOTDIR)/Sources
OBJDIR = $(BUILDDIR)/Objects
AASBUILDDIR = $(BUILDDIR)/AAS
INSTALLERBUILDDIR = $(BUILDDIR)/Installer
SDKDIR = $(ROOTDIR)/SDK/Headers
LIBDIR = $(ROOTDIR)/SDK/Libs/$(ARCH)
INCLUDEDIR = $(ROOTDIR)/Sources
# Common var
CC = $(ARCH)-w64-mingw32-clang
CFLAGS = -I $(ROOTDIR)/SDK/Headers -I $(ROOTDIR)/Sources -I $(ROOTDIR)/SDK/Sources
LDIRS = -L $(LIBDIR) -L $(LIBDIR)/curl
LFLAGS = -static -static-libgcc -Werror
CFLAGS += -Wall -D ARCH_$(ARCH)=1 -D NTDDI_VERSION=NTDDI_WIN10 -target $(ARCH)-w64-mingw32 -Werror -std=c11
ifeq ($(CONF), Debug)
CFLAGS += -g3 -fsanitize=address,undefined
LFLAGS += -fsanitize=address,undefined
else
CFLAGS += -O3
LFLAGS += -mwindows
LFLAGS += -s
endif
# All .h, for dependency recompilation. No granularity.
ALLH = $(wildcard $(ROOTDIR)/*/*.h $(ROOTDIR)/*/*/*.h $(ROOTDIR)/*/*/*/*.h)
# Objects:
# All, for compilation.
ALLC = $(wildcard $(ROOTDIR)/*/*.c $(ROOTDIR)/*/*/*.c $(ROOTDIR)/*/*/*/*.c)
ALLOBJECTS = $(patsubst $(ROOTDIR)/%.c, $(OBJDIR)/%.o, $(ALLC))
# Subsets, for link.
AASOBJECTS = $(filter $(OBJDIR)/Sources/AltAppSwitcher/%, $(ALLOBJECTS))
CONFIGOBJECTS = $(filter $(OBJDIR)/Sources/Config/%, $(ALLOBJECTS))
SETTINGSOBJECTS = $(filter $(OBJDIR)/Sources/Settings/%, $(ALLOBJECTS))
UPDATEROBJECTS = $(filter $(OBJDIR)/Sources/Updater/%, $(ALLOBJECTS))
ERROROBJECTS = $(filter $(OBJDIR)/Sources/Utils/Error%, $(ALLOBJECTS))
FILEOBJECTS = $(filter $(OBJDIR)/Sources/Utils/File%, $(ALLOBJECTS))
MSGOBJECTS = $(filter $(OBJDIR)/Sources/Utils/Message%, $(ALLOBJECTS))
GUIOBJECTS = $(filter $(OBJDIR)/Sources/Utils/GUI%, $(ALLOBJECTS))
SDKOBJECTS = $(filter $(OBJDIR)/SDK%, $(ALLOBJECTS))
COMMONOBJECTS = $(ERROROBJECTS) $(FILEOBJECTS) $(MSGOBJECTS) $(SDKOBJECTS)
AASLIBS = -l dwmapi -l User32 -l Gdi32 -l Gdiplus -l shlwapi -l pthread -l Ole32 -l Comctl32
SETTINGSLIB = -l Comctl32 -l Gdi32
UPDATERLIBS = -l zip -l zlibstatic -l bcrypt -l curl -l curl.dll
AASASSETS = $(patsubst $(ROOTDIR)/Assets/AAS/%, $(AASBUILDDIR)/%, $(wildcard $(ROOTDIR)/Assets/AAS/*))
DLL = $(patsubst $(ROOTDIR)/SDK/Dll/$(ARCH)/%, $(AASBUILDDIR)/%, $(wildcard $(ROOTDIR)/SDK/Dll/$(ARCH)/*))
# Do not make a non phony target depend on phony one, otherwise
# the target will rebuild every time.
.PHONY: default clean directories deploy
ALLAAS = $(AASBUILDDIR)/AltAppSwitcher.exe
ALLAAS += $(AASBUILDDIR)/Settings.exe
ALLAAS += $(AASBUILDDIR)/Updater.exe
ALLAAS += $(AASASSETS)
ALLAAS += $(DLL)
AASARCHIVE = $(OUTPUTDIR)/Deploy/AltAppSwitcher_$(ARCH).zip
COMPILECOMMANDS = $(SOURCEDIR)/compile_commands.json
default: directories $(ALLAAS) $(COMPILECOMMANDS)
deploy: default $(AASARCHIVE)
# Directory targets:
directories:
python ./AAS.py MakeDirs $(CONF) $(ARCH)
# Deploy targets:
$(AASARCHIVE): $(ALLAAS)
python ./AAS.py MakeArchive $(BUILDDIR)/AAS $@
# Compile object targets:
# see 4.12.1 Syntax of Static Pattern Rules
clang_tidy_disable_if_dbg =
ifeq ($(CONF), Debug)
clang_tidy_disable_if_dbg = --checks=-*
endif
$(ALLOBJECTS): $(OBJDIR)/%.o: $(ROOTDIR)/%.c $(ALLH)
clang-format $< --dry-run --Werror
clang-tidy $< --warnings-as-errors=* --allow-no-checks $(clang_tidy_disable_if_dbg) -- $(CFLAGS)
$(CC) $(CFLAGS) -MJ $@.json -c $< -o $@
# Build exe targets (link):
$(AASBUILDDIR)/AltAppSwitcher.exe: $(AASOBJECTS) $(CONFIGOBJECTS) $(COMMONOBJECTS)
$(CC) $(LFLAGS) $(LDIRS) $(AASLIBS) $^ -o $@
$(AASBUILDDIR)/Settings.exe: $(SETTINGSOBJECTS) $(CONFIGOBJECTS) $(COMMONOBJECTS) $(GUIOBJECTS)
$(CC) $(LFLAGS) $(LDIRS) $(SETTINGSLIB) $^ -o $@
$(AASBUILDDIR)/Updater.exe: $(UPDATEROBJECTS) $(COMMONOBJECTS)
$(CC) $(LFLAGS) $(LDIRS) $(UPDATERLIBS) $^ -o $@
# Assets:
$(AASASSETS): $(AASBUILDDIR)/%: $(ROOTDIR)/Assets/AAS/%
python ./AAS.py Copy "$<" "$@"
# Dll:
$(DLL): $(AASBUILDDIR)/%: $(ROOTDIR)/SDK/Dll/$(ARCH)/%
python ./AAS.py Copy "$<" "$@"
# Make compile_command.json (clangd)
$(SOURCEDIR)/compile_commands.json: $(ALLOBJECTS)
python ./AAS.py MakeCompileCommands $@ $(subst .o,.o.json, $^)
# Other targets:
clean:
python ./AAS.py Clean