CXX      ?= g++
CXXFLAGS  = -std=c++17 -O3 -march=native -fPIC -shared
INCLUDES  = -Isrc
SRCS      = src/simdjson.cpp src/simd_wrapper.cpp
OUT_DIR   = lib/native

# Detect OS
UNAME := $(shell uname -s)
ARCH  := $(shell uname -m)

ifeq ($(UNAME), Darwin)
  LIB_EXT = dylib
  EXTRA_FLAGS = -dynamiclib
else ifeq ($(UNAME), Linux)
  LIB_EXT = so
  EXTRA_FLAGS =
else
  LIB_EXT = dll
  EXTRA_FLAGS =
endif

LIB_NAME = libsimd_wrapper.$(LIB_EXT)
OUT_PATH = $(OUT_DIR)/$(LIB_NAME)

.PHONY: all clean

all: $(OUT_DIR) $(OUT_PATH)

$(OUT_DIR):
	mkdir -p $(OUT_DIR)

$(OUT_PATH): $(SRCS)
	$(CXX) $(CXXFLAGS) $(EXTRA_FLAGS) $(INCLUDES) $(SRCS) -o $(OUT_PATH)
	@echo "Built: $(OUT_PATH)"

# Cross-compile for Linux x86_64 (from any host with cross toolchain)
linux-x64:
	mkdir -p $(OUT_DIR)
	x86_64-linux-gnu-g++ $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $(OUT_DIR)/libsimd_wrapper_linux_x64.so

# Cross-compile for Linux arm64
linux-arm64:
	mkdir -p $(OUT_DIR)
	aarch64-linux-gnu-g++ $(CXXFLAGS) -march=armv8-a $(INCLUDES) $(SRCS) -o $(OUT_DIR)/libsimd_wrapper_linux_arm64.so

# macOS universal binary (requires macOS host with Xcode)
macos-universal:
	mkdir -p $(OUT_DIR)
	$(CXX) -std=c++17 -O3 -fPIC -dynamiclib $(INCLUDES) $(SRCS) \
	  -target x86_64-apple-macos11 -o /tmp/libsimd_x64.dylib
	$(CXX) -std=c++17 -O3 -fPIC -dynamiclib $(INCLUDES) $(SRCS) \
	  -target arm64-apple-macos11 -o /tmp/libsimd_arm64.dylib
	lipo -create /tmp/libsimd_x64.dylib /tmp/libsimd_arm64.dylib \
	  -output $(OUT_DIR)/libsimd_wrapper.dylib
	@echo "Built universal macOS dylib: $(OUT_DIR)/libsimd_wrapper.dylib"

clean:
	rm -rf $(OUT_DIR)
