#===-- Makefile ----------------------------------------------------------===##
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
#===----------------------------------------------------------------------===##

#------------------------------------------------------------------------------
# Define rules for making the Parallel STL library.
#------------------------------------------------------------------------------


proj_root ?= $(CURDIR)/..

include $(proj_root)/build/Makefile.common
CPLUS := $(compiler) $(COMPILER_NOLOGO_KEY) $(USE_SHARED_CPPRUNTIME_KEY)

.SECONDARY:
.PHONY: clean clean_all clean_pstl bench

VPATH = $(proj_root)/test

CPLUS_FLAGS += -I$(proj_root)

PSTL_MAKEFILE = $(proj_root)/build/Makefile.pstl
BENCH_MAKEFILE = $(proj_root)/build/Makefile.bench


test_hdr = $(wildcard $(proj_root)/test/*.h)
test_src = $(wildcard $(proj_root)/test/test_*.cpp)
test_bin = $(notdir $(test_src:.cpp=.exe))


all: $(test_bin)

test_%.offload.exe: test_%.offload$(OBJ_SFX) exception_list.offload$(OBJ_SFX)
	$(CPLUS) $(CPLUS_FLAGS) $^ $(FKEY)o$@ $(LDFLAGS)

$(PSTL_LIB_NAME):
	$(MAKE) -f $(PSTL_MAKEFILE) backend=$(backend) cfg=$(cfg)

test_%.exe: test_%$(OBJ_SFX) $(PSTL_LIB_NAME)
	$(LD) $< $(LD_OUT_KEY)$@ $(LDFLAGS) $(DYN_LDFLAGS) $(PSTL_LIB_LINK)

test_%: test_%.exe
	$(run_cmd) $(RUN_CMD)test_$*.exe

test_%$(OBJ_SFX): test_%.cpp $(test_hdr) $(proj_root)/build/Makefile
	$(CPLUS) $(CPLUS_FLAGS) -c $< $(FKEY)o$@

# This definition intentionally consists of two blank lines
define eol


endef

test: $(test_bin)
	$(foreach test, $(test_bin), $(run_cmd) $(RUN_CMD)$(test) $(args) $(eol))

%.s: %.cpp $(proj_root)/build/Makefile
	$(CPLUS) $(CPLUS_FLAGS) -S $< $(FKEY)o$@

%.E: %.cpp
	$(CPLUS) $(CPLUS_FLAGS) -E $< >$@

TEMPLATE_FILES=$(wildcard $(proj_root)/bench/*.*tmpl)
BENCH_COMMON_FILES=$(wildcard $(proj_root)/bench/*.h) $(wildcard $(proj_root)/bench/*.cpp)

$(BENCH_MAKEFILE): $(proj_root)/bench/algorithm.json $(proj_root)/bench/gen.py  $(TEMPLATE_FILES)
	$(PYTHON) $(proj_root)/bench/gen.py $(proj_root)/bench/algorithm.json

bench : $(BENCH_MAKEFILE) $(BENCH_COMMON_FILES) $(PSTL_LIB_NAME)
	@echo     TEMPLATE_FILES=$(TEMPLATE_FILES)
	@echo     proj_root=$(proj_root)
	ls -la      $(proj_root)/bench/gen.py
	$(MAKE) -f $(BENCH_MAKEFILE)

clean_bench:
	$(DEL_CMD) $(BENCH_MAKEFILE)
	$(DEL_CMD) batch.py
	$(DEL_CMD) $(proj_root)/build/bench/*.*

clean:
	$(DEL_CMD) *$(OBJ_SFX) *.exe *.E *.s *.asm *.d *.pdb *.pdb *.suo *.ilk

clean_pstl:
	$(MAKE) -f $(PSTL_MAKEFILE) clean

clean_all: clean clean_pstl clean_bench

info:
	@echo OS = $(os_name)
	@echo proj_root = "$(proj_root)"
	@echo $(CURDIR)
	@echo VPATH = $(VPATH)
	@echo LIBRARY_PATH = $(LIBRARY_PATH)
	@echo backend = $(backend)
	@echo compiler = $(compiler)

-include *.d
