# 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)