-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
140 lines (114 loc) · 3.51 KB
/
Makefile
File metadata and controls
140 lines (114 loc) · 3.51 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
133
134
135
136
137
138
139
140
CXX = clang++
BUILD = build
APP = Monoko.app
APP_BIN = $(APP)/Contents/MacOS/Monoko
APP_LIB = $(APP)/Contents/Resources/default.metallib
APP_ICON = $(APP)/Contents/Resources/AppIcon.icns
APP_PLIST = $(APP)/Contents/Info.plist
IMGUI_DIR = vendor/imgui
IMGUI_BACKENDS = $(IMGUI_DIR)/backends
CPP_SRCS = \
$(IMGUI_DIR)/imgui.cpp \
$(IMGUI_DIR)/imgui_draw.cpp \
$(IMGUI_DIR)/imgui_tables.cpp \
$(IMGUI_DIR)/imgui_widgets.cpp
MM_SRCS = \
src/main.mm \
src/Renderer.mm \
src/ImageViewer.mm \
src/FolderBrowser.mm \
$(IMGUI_BACKENDS)/imgui_impl_metal.mm \
$(IMGUI_BACKENDS)/imgui_impl_osx.mm
METAL_SRCS = src/ImageShader.metal
OBJS = $(CPP_SRCS:%=$(BUILD)/%.o) $(MM_SRCS:%=$(BUILD)/%.o)
DEPS = $(OBJS:.o=.d)
AIRS = $(METAL_SRCS:%=$(BUILD)/%.air)
CXXFLAGS_COMMON = \
-std=c++23 \
-Isrc \
-I$(IMGUI_DIR) \
-I$(IMGUI_BACKENDS) \
-O2 \
-Wall -Wextra -Wno-unused-parameter \
-MMD -MP
CXXFLAGS_MM = $(CXXFLAGS_COMMON) -fobjc-arc
CXXFLAGS_CPP = $(CXXFLAGS_COMMON)
LDFLAGS = \
-framework Metal \
-framework MetalKit \
-framework Cocoa \
-framework QuartzCore \
-framework GameController \
-framework ImageIO \
-framework UniformTypeIdentifiers
METAL = xcrun -sdk macosx metal
METALLIB = xcrun -sdk macosx metallib
SWIFT = swift -module-cache-path $(BUILD)/swift-module-cache
ICONSET = $(BUILD)/AppIcon.iconset
ICNS = $(BUILD)/AppIcon.icns
ICON_PNG = $(BUILD)/AppIcon.png
ICON_PACKAGE = images/MonokoIcon.icon
ICON_ASSETS = $(ICON_PACKAGE)/icon.json \
$(ICON_PACKAGE)/Assets/bords.svg \
$(ICON_PACKAGE)/Assets/Vector\ 2.png
DMG = Monoko.dmg
VERSION = $(shell /usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" src/Info.plist)
.PHONY: all app run clean dmg
all: app
run: app
MTL_HUD_ENABLED=1 open $(APP)
app: $(APP_BIN) $(APP_LIB) $(APP_ICON) $(APP_PLIST)
@echo "Built $(APP)"
$(APP_BIN): $(OBJS)
@mkdir -p $(dir $@)
$(CXX) $(OBJS) $(LDFLAGS) -o $@
$(APP_LIB): $(BUILD)/default.metallib
@mkdir -p $(dir $@)
cp $< $@
$(APP_ICON): $(ICNS)
@mkdir -p $(dir $@)
cp $< $@
$(APP_PLIST): src/Info.plist
@mkdir -p $(dir $@)
cp $< $@
$(BUILD)/default.metallib: $(AIRS)
$(METALLIB) $^ -o $@
$(BUILD)/src/%.metal.air: src/%.metal
@mkdir -p $(dir $@)
$(METAL) -c $< -o $@
$(BUILD)/%.cpp.o: %.cpp
@mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS_CPP) -c $< -o $@
$(BUILD)/%.mm.o: %.mm
@mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS_MM) -c $< -o $@
$(ICON_PNG): scripts/render_icon.swift $(ICON_ASSETS)
@mkdir -p $(dir $@) $(BUILD)/swift-module-cache
$(SWIFT) $< $(ICON_PACKAGE) $@
$(ICNS): $(ICON_PNG)
rm -rf $(ICONSET)
@mkdir -p $(ICONSET)
sips -z 16 16 $< --out $(ICONSET)/icon_16x16.png > /dev/null
sips -z 32 32 $< --out $(ICONSET)/icon_16x16@2x.png > /dev/null
sips -z 32 32 $< --out $(ICONSET)/icon_32x32.png > /dev/null
sips -z 64 64 $< --out $(ICONSET)/icon_32x32@2x.png > /dev/null
sips -z 128 128 $< --out $(ICONSET)/icon_128x128.png > /dev/null
sips -z 256 256 $< --out $(ICONSET)/icon_128x128@2x.png > /dev/null
sips -z 256 256 $< --out $(ICONSET)/icon_256x256.png > /dev/null
sips -z 512 512 $< --out $(ICONSET)/icon_256x256@2x.png > /dev/null
sips -z 512 512 $< --out $(ICONSET)/icon_512x512.png > /dev/null
cp $< $(ICONSET)/icon_512x512@2x.png
iconutil -c icns $(ICONSET) -o $@
dmg: app
create-dmg \
--volname "Monoko" \
--window-size 500 320 \
--icon-size 128 \
--icon "Monoko.app" 125 150 \
--app-drop-link 375 150 \
"$(DMG)" \
"$(APP)"
@echo "Created $(DMG) (v$(VERSION))"
clean:
rm -rf $(APP) $(BUILD) $(DMG)
-include $(DEPS)