########################################################################
# Cross-platform Makefile (macOS + Linux)
########################################################################

UNAME_S := $(shell uname -s)

########################################################################
# Defaults
########################################################################

ifeq ($(UNAME_S),Darwin)

########################################################################
# macOS (Homebrew + Apple Clang)
########################################################################

SDKROOT := $(shell xcrun --show-sdk-path)

CXX := clang++

ROOTCFLAGS := $(shell root-config --cflags | sed 's/-stdlib=libc++//g')
ROOTLIBS   := $(shell root-config --libs   | sed 's/-stdlib=libc++//g')

CXXFLAGS := -g -O0 -Wall -std=c++17 -fPIC
CXXFLAGS += $(ROOTCFLAGS)
CXXFLAGS += -isysroot $(SDKROOT)
CXXFLAGS += -I$(SDKROOT)/usr/include/c++/v1

LDFLAGS := $(shell root-config --glibs) -lGeom -lEve -lGui

else

########################################################################
# Linux (system g++)
########################################################################

CXX := g++

COPTS := -fPIC -DLINUX -g -O0 -Wall -std=c++17 -pthread

ROOTCFLAGS := $(shell root-config --cflags)
ROOTLIBS   := $(shell root-config --libs)

CXXFLAGS := $(COPTS) $(ROOTCFLAGS)
LDFLAGS := $(ROOTLIBS) -lGeom -lEve -lGui

endif

########################################################################
# Targets
########################################################################

ALL = Mapper EventBuilder AnasenMS

all: $(ALL)

clean:
	/bin/rm -f $(ALL)

########################################################################
# Build rules
########################################################################

Mapper: Mapper.cpp ../mapping.h ClassDet.h
	@echo "--------- making Mapper"
	$(CXX) $(CXXFLAGS) Mapper.cpp -o Mapper $(LDFLAGS)

EventBuilder: EventBuilder.cpp ClassData.h fsuReader.h Hit.h
	@echo "--------- making EventBuilder"
	$(CXX) $(CXXFLAGS) EventBuilder.cpp -o EventBuilder $(LDFLAGS)

AnasenMS: anasenMS.cpp constant.h Isotope.h ClassTransfer.h ClassSX3.h ClassPW.h ClassAnasen.h
	@echo "--------- making ANASEN Monte Carlo"
	$(CXX) $(CXXFLAGS) anasenMS.cpp -o AnasenMS $(LDFLAGS)