summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile60
1 files changed, 53 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 7c50323..597ecdc 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,7 @@
CC := clang
-INCLUDES := -I./include -Ideps/glfw-3.3.8/include/GLFW
-CFLAGS := -Wall -Wextra -O2 $(INCLUDES)
+INCLUDES := -I./include -Ideps/glfw-3.3.8/include/GLFW -Ideps/stb_image
+CFLAGS := -Wall -Wextra -O2 -fPIC $(INCLUDES)
+# TODO(low prio): split static object files and shared object files so we can remove -fPIC from static lib builds
LDFLAGS := -lglfw
# Detect OS
@@ -18,12 +19,23 @@ EXAMPLES_DIR := examples
SRCS := $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/**/*.c)
OBJS := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS))
+# Format-able files
+FORMAT_FILES := include/celeritas.h $(SRC_DIR)/*.c $(EXAMPLES_DIR)/*.c
+
+# Shader files
+METAL_SHADERS := $(wildcard $(SHADER_DIR)/*.metal)
+METAL_AIR_FILES := $(patsubst $(SHADER_DIR)/%.metal,$(SHADER_OUT_DIR)/%.air,$(METAL_SHADERS))
+METAL_LIB := $(SHADER_OUT_DIR)/default.metallib
+
# Library outputs
STATIC_LIB := $(BUILD_DIR)/libceleritas.a
+SHARED_FLAGS := -fPIC
ifeq ($(UNAME_S),Darwin)
SHARED_LIB := $(BUILD_DIR)/libceleritas.dylib
SHARED_FLAGS := -dynamiclib
- LDFLAGS += -framework Foundation -framework CoreFoundation -framework CoreGraphics -framework AppKit
+ LDFLAGS += -framework Foundation -framework CoreFoundation -framework CoreGraphics -framework AppKit -framework QuartzCore -framework Metal -framework MetalKit
+ SRCS += $(SRC_DIR)/backend_mtl.m
+ OBJS += $(OBJ_DIR)/backend_mtl.o
else
SHARED_LIB := $(BUILD_DIR)/libceleritas.so
SHARED_FLAGS := -shared
@@ -34,7 +46,12 @@ endif
# $^ - prerequisites of current rule separated by spaces
# $< - first prerequisite file only
-$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
+$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c include/celeritas.h
+ @mkdir -p $(OBJ_DIR)
+ $(CC) $(CFLAGS) -c $< -o $@
+
+# Objective C
+$(OBJ_DIR)/%.o: $(SRC_DIR)/%.m
@mkdir -p $(OBJ_DIR)
$(CC) $(CFLAGS) -c $< -o $@
@@ -50,15 +67,44 @@ shared: $(SHARED_LIB)
static: $(STATIC_LIB)
+# Shaders
+$(SHADER_OUT_DIR)/%.air: $(SHADER_DIR)/%.metal
+ @mkdir -p $(SHADER_OUT_DIR)
+ xcrun -sdk macosx metal -c $< -o $@
+
+$(METAL_LIB): $(METAL_AIR_FILES)
+ xcrun -sdk macosx metallib $^ -o $(SHADER_OUT_DIR)/default.metallib
+
.PHONY: all
all: shared static
.PHONY: triangle
-triangle: build/triangle.bin
+triangle: $(EXAMPLES_DIR)/triangle.c $(SHARED_LIB) $(SHADER_OUT_DIR)/triangle.air $(METAL_LIB)
+ @mkdir -p $(BUILD_DIR)
+ $(CC) $(CFLAGS) $(EXAMPLES_DIR)/triangle.c -L$(BUILD_DIR) -lceleritas $(LDFLAGS) -o $(BUILD_DIR)/triangle.bin
+ MTL_DEBUG_LAYER=1 build/triangle.bin
-build/triangle.bin: $(EXAMPLES_DIR)/triangle.c $(STATIC_LIB)
+.PHONY: cube
+cube: $(EXAMPLES_DIR)/cube.c $(SHARED_LIB) $(SHADER_OUT_DIR)/cube.air $(METAL_LIB)
@mkdir -p $(BUILD_DIR)
- $(CC) $(CFLAGS) $< -o $@ -L$(BUILD_DIR) -lceleritas $(LDFLAGS)
+ $(CC) $(CFLAGS) $(EXAMPLES_DIR)/cube.c -L$(BUILD_DIR) -lceleritas $(LDFLAGS) -o $(BUILD_DIR)/cube.bin
+ MTL_DEBUG_LAYER=1 build/cube.bin
+
+.PHONY: format
+format:
+ clang-format -i $(FORMAT_FILES)
+
+.PHONY: format-check
+format-check:
+ clang-format --dry-run -Werror $(FORMAT_FILES)
+
+.PHONY: tidy-fix
+tidy:
+ clang-tidy -fix $(SRCS) $(EXAMPLES_DIR)/*.c -- $(CFLAGS)
+
+.PHONY: tidy-check
+tidy-check:
+ clang-tidy $(SRCS) $(EXAMPLES_DIR)/*.c -- $(CFLAGS)
.PHONY: clean
clean: