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

# directory paths
# _ROOT are paths indicating a 'starting point'
# _PATH paths are intermediate paths leading to a _DIR
# _LOC are directory names without the hierarchy
# _DIR paths are final paths used in make rules
# All these variables can be overridden from the command line
# Test Makefile needs to set DV_DIR, DUT_TOP, TB_TOP, FUSESOC_CORE, COMPILE_KEY and TEST_NAME
# at minimum

export SHELL      := /bin/bash
TIMESTAMP         ?= $(shell date +%m.%d.%y_%H.%M.%S)
MAKE_ROOT         := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
export PROJ_ROOT  := ${MAKE_ROOT}/../../..
export PRJ_DIR    := ${PROJ_ROOT}
export CURR_DIR   := $(shell pwd)
SCRATCH_ROOT      ?= ${DV_DIR}/scratch

SCRATCH_LOC       ?= ${DUT_TOP}
BUILD_LOC         ?= ${COMPILE_KEY}
RUN_LOC           ?= ${TIMESTAMP}

SCRATCH_PATH      ?= ${SCRATCH_ROOT}/${SCRATCH_LOC}
BUILD_DIR         := ${SCRATCH_PATH}/${BUILD_LOC}
RUN_PATH          ?= ${SCRATCH_PATH}/${TEST_NAME}
RUN_DIR           := ${RUN_PATH}/${RUN_LOC}

SW_DIR            := ${PRJ_DIR}/sw



# limit run directories upto a limit specified below
RUN_DIR_LIMIT     ?= 5

# global simulation specific variables (but simulator independent)
SEED              ?= $(shell od -vAn -N4 -tu < /dev/random | xargs)
BUILD_LOG         ?= ${BUILD_DIR}/build.log
RUN_LOG           ?= ${RUN_DIR}/run.log
UVM_VERBOSITY     ?= UVM_LOW
BUILD_OPTS        +=
# command line version of BUILD_OPTS - CL_BUILD_OPTS - it should be empty here
CL_BUILD_OPTS     +=
RUN_OPTS          += +UVM_NO_RELNOTES
# command line version of RUN_OPTS - CL_RUN_OPTS - it should be empty here
CL_RUN_OPTS       +=
CAPP_BUILD_OPTS   ?=

# default project-wide bus widths
TL_AW             ?= 32
TL_DW             ?= 32
TL_DBW            ?= 4

# add auxiliary / helper mk files
# set simulator to vcs by default
SIMULATOR ?= vcs

# tool to generate ral
include ${MAKE_ROOT}/ral_gen.mk

# tool to generate file list
include ${MAKE_ROOT}/fusesoc.mk

# modes / switches (option groups) that can be turned on easily
include ${MAKE_ROOT}/modes.mk

# add tool specific mk file
ifeq (${SIMULATOR},vcs)
  include ${VCS_PRIV_DIR}/vcs.mk
else ifeq (${SIMULATOR},incisive)
  include ${INCISIVE_PRIV_DIR}/incisive.mk
else ifeq (${SIMULATOR},xcelium)
  include ${XCELIUM_PRIV_DIR}/xcelium.mk
# else add other tool specific mk files
endif

# generic rules to sequence build and run flows
include ${MAKE_ROOT}/rules.mk
