# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
.DEFAULT_GOAL := all

all: build

###################
## build targets ##
###################
build: compile_result

pre_compile:
	@echo "[make]: pre_compile"
	mkdir -p ${build_dir} && env | sort > ${build_dir}/env_vars
	mkdir -p ${tool_srcs_dir}
	-cp -Ru ${tool_srcs} ${tool_srcs_dir}

compile: pre_compile
	@echo "[make]: compile"
	# we check the status in the parse script below
	-cd ${build_dir} && ${build_cmd} ${build_opts} | tee ${build_log}

post_compile: compile
	@echo "[make]: post_compile"

# Parse out result
compile_result: post_compile
	@echo "[make]: compile_result"
	${report_cmd} ${report_opts}

clean:
	echo "[make]: clean"
	rm -rf ${scratch_root}/${dut}/*

.PHONY: build \
	run \
	pre_compile \
	compile \
	post_compile \
	compile_result
