blob: df433c40128f36232ac16f5978dee24586157a81 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
PRJ_DIR := $(realpath ${CUR_DIR}/../)
export PRJ_DIR
REG_OUTPUT_DIR ?= ${PRJ_DIR}/build/regs-generated
REG_OUTPUT_DV_DIR ?= ${REG_OUTPUT_DIR}/dv
REG_OUTPUT_SW_DIR ?= ${REG_OUTPUT_DIR}/sw
IPS ?= aes \
alert_handler \
clkmgr \
entropy_src \
flash_ctrl \
gpio \
hmac \
kmac \
i2c \
keymgr \
lc_ctrl \
nmi_gen \
otp_ctrl \
padctrl \
pinmux \
pwrmgr \
rstmgr \
rv_plic \
rv_timer \
sensor_ctrl \
spi_device \
sram_ctrl \
trial1 \
otbn \
uart \
usbdev \
usbuart
TOPS ?= top_earlgrey
# conditional flags
VERBOSE ?= 0
toolflags ?=
ifeq ($(VERBOSE),1)
toolflags += -v
endif
dir_hjson = data
dynips_reg = $(addsuffix _reg, $(IPS))
ips_reg = $(addsuffix _reg, $(IPS))
ips_reg_header = $(addsuffix _reg_header, $(IPS))
tops_gen = $(addsuffix _gen,$(TOPS))
tops_reg = $(addsuffix _reg,$(TOPS))
all: $(dynips_reg) $(tops_gen) $(tops_reg) banner otp-mmap
banner:
@echo "############################################"
@echo "Note: Regs for DV & SW are now generated at:"
@echo "${REG_OUTPUT_DIR}"
@echo "############################################"
regs: $(dynips_reg) $(tops_reg) banner
pre_reg:
mkdir -p ${REG_OUTPUT_DIR}
mkdir -p ${REG_OUTPUT_DV_DIR}
mkdir -p ${REG_OUTPUT_SW_DIR}
$(ips_reg): pre_reg
if [ -f ${PRJ_DIR}/hw/ip/$(subst _reg,,$@)/$(dir_hjson)/$(subst _reg,,$@).hjson ]; then \
${PRJ_DIR}/util/regtool.py ${toolflags} -r ${PRJ_DIR}/hw/ip/$(subst _reg,,$@)/$(dir_hjson)/$(subst _reg,,$@).hjson; \
${PRJ_DIR}/util/regtool.py -s -t ${REG_OUTPUT_DV_DIR} \
${PRJ_DIR}/hw/ip/$(subst _reg,,$@)/$(dir_hjson)/$(subst _reg,,$@).hjson; \
fi
otp-mmap:
cd ${PRJ_DIR}/hw/ip/otp_ctrl/util && ./translate-mmap.py
regs-header: $(ips_reg_header) banner
$(ips_reg_header): pre_reg
if [ -f ${PRJ_DIR}/hw/ip/$(subst _reg_header,,$@)/$(dir_hjson)/$(subst _reg_header,,$@).hjson ]; then \
${PRJ_DIR}/util/regtool.py -D -o ${REG_OUTPUT_SW_DIR}/$(subst _reg_header,_reg_headers,$@).h\
${PRJ_DIR}/hw/ip/$(subst _reg_header,,$@)/$(dir_hjson)/$(subst _reg_header,,$@).hjson; \
fi
clean-regs-header:
rm -r -f ${REG_OUTPUT_SW_DIR}
top: $(tops_gen) $(tops_reg)
$(tops_gen):
$(eval $@_TOP := $(strip $(foreach top,$(TOPS),$(findstring $(top),$@))))
${PRJ_DIR}/util/topgen.py -t ${PRJ_DIR}/hw/$($@_TOP)/data/$($@_TOP).hjson \
--tpl ${PRJ_DIR}/hw/$($@_TOP)/data/ \
-o ${PRJ_DIR}/hw/$($@_TOP)/ ${toolflags}
$(tops_reg): pre_reg
$(eval $@_TOP := $(strip $(foreach top,$(TOPS),$(findstring $(top),$@))))
mkdir -p ${REG_OUTPUT_DV_DIR}/$($@_TOP)
${PRJ_DIR}/util/topgen.py -t ${PRJ_DIR}/hw/$($@_TOP)/data/$($@_TOP).hjson \
-r -o ${REG_OUTPUT_DV_DIR}/$($@_TOP) ${toolflags}
.PHONY: all banner $(ips_reg) $(tops_gen) $(ips_reg_header)