GHC = ghc GHCFLAGS = -Wall -O3 -threaded CXX = g++ CXXFLAGS = -Wall -Wextra -std=c++17 -O2 OBJDIR = obj HASKELL_AUX := Input.hs IntCode.hs SmallIntSet.hs CPP_AUX := HASKELL_SRC := $(filter-out $(HASKELL_AUX),$(wildcard *.hs)) CPP_SRC := $(filter-out $(CPP_AUX),$(wildcard *.cpp)) HASKELL_BIN := $(HASKELL_SRC:.hs=) CPP_BIN := $(CPP_SRC:.cpp=) BINARIES := $(HASKELL_BIN) $(CPP_BIN) .PHONY: all clean all: $(BINARIES) clean: rm -f $(BINARIES) .depend_hs rm -rf $(OBJDIR) $(HASKELL_BIN): %: %.hs | $(OBJDIR)/% $(GHC) $(GHCFLAGS) -odir $(OBJDIR)/$* -hidir $(OBJDIR)/$* -o $@ $< $(CPP_BIN): %: %.cpp $(CPP_AUX) | $(OBJDIR) $(CXX) $(CXXFLAGS) -o $@ $< $(OBJDIR)/%: mkdir -p $@ .depend_hs: $(HASKELL_SRC) $(HASKELL_AUX) ghc -dep-suffix '' -dep-makefile $@ -M $(HASKELL_SRC) rm -f .depend_hs.bak sed 's/\.o *:/:/; s/\.hi$$/.hs/g; s/\.hi[ \t]/.hs/g' <$@ >$@.tmp mv $@.tmp $@ -include .depend_hs