Current section
Files
Jump to
Current section
Files
Makefile
# Elixir Metal UI Engine Makefile
# Compiler flags
CFLAGS = -O3 -std=c++17 -Wall -Wextra -fobjc-arc
# Detect Homebrew prefix (Apple Silicon: /opt/homebrew, Intel: /usr/local)
BREW_PREFIX ?= $(shell brew --prefix 2>/dev/null)
ifeq ($(BREW_PREFIX),)
BREW_PREFIX := $(if $(wildcard /opt/homebrew),/opt/homebrew,/usr/local)
endif
# Linker flags
LDFLAGS = \
-L$(BREW_PREFIX)/lib \
-lglfw \
-framework Cocoa \
-framework Metal \
-framework MetalKit \
-framework QuartzCore
# Includes
INCLUDES = \
-I$(BREW_PREFIX)/include
# Sources
SRC = c_src/main.mm
# Metal shader
SHADER_SRC = c_src/Shaders.metal
SHADER_AIR = priv/Shaders.air
SHADER_LIB = priv/default.metallib
# Output
TARGET = priv/mac_ui_engine
.PHONY: all clean
all: $(TARGET)
# Build executable
$(TARGET): $(SRC) $(SHADER_LIB)
mkdir -p priv
clang++ \
-x objective-c++ \
$(CFLAGS) \
$(INCLUDES) \
$(SRC) \
-o $(TARGET) \
$(LDFLAGS)
# Compile Metal shaders
$(SHADER_LIB): $(SHADER_SRC)
mkdir -p priv
xcrun -sdk macosx metal \
-c \
-target air64-apple-macosx15.0 \
$(SHADER_SRC) \
-o $(SHADER_AIR)
xcrun -sdk macosx metallib \
$(SHADER_AIR) \
-o $(SHADER_LIB)
clean:
rm -f $(TARGET)
rm -f $(SHADER_AIR)
rm -f $(SHADER_LIB)