| # 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}/../) | |
| 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 \ | |
| adc_ctrl \ | |
| aon_timer \ | |
| clkmgr \ | |
| entropy_src \ | |
| csrng \ | |
| edn \ | |
| flash_ctrl \ | |
| gpio \ | |
| hmac \ | |
| kmac \ | |
| i2c \ | |
| keymgr \ | |
| lc_ctrl \ | |
| otp_ctrl \ | |
| pattgen \ | |
| pinmux \ | |
| pwm \ | |
| pwrmgr \ | |
| rom_ctrl \ | |
| rstmgr \ | |
| rv_core_ibex \ | |
| rv_dm \ | |
| rv_timer \ | |
| sensor_ctrl \ | |
| spi_device \ | |
| spi_host \ | |
| sram_ctrl \ | |
| sysrst_ctrl \ | |
| trial1 \ | |
| otbn \ | |
| uart \ | |
| usbdev | |
| TOPS ?= top_earlgrey | |
| # conditional flags | |
| VERBOSE ?= 0 | |
| toolflags ?= | |
| ifeq ($(VERBOSE),1) | |
| toolflags += -v | |
| endif | |
| dir_hjson = data | |
| hjson_for_ip = ${PRJ_DIR}/hw/ip/$(1)/$(dir_hjson)/$(1).hjson | |
| # IPs that have a directory in hw/ip | |
| local_ips := \ | |
| $(foreach i,$(IPS),$(if $(wildcard $(call hjson_for_ip,$(i))),$(i))) | |
| # Per-IP targets (all phonies) | |
| ips_reg = $(addsuffix _reg, $(local_ips)) | |
| ips_reg_header = $(addsuffix _reg_header, $(local_ips)) | |
| ips_reg_rust = $(foreach ip,$(local_ips),$(REG_OUTPUT_SW_DIR)/$(ip)_reg_constants.rs) | |
| # Per-top targets (all phonies) | |
| tops_gen = $(addsuffix _gen,$(TOPS)) | |
| tops_reg = $(addsuffix _reg,$(TOPS)) | |
| # Targets for installing files into TOCK_ROOT (empty if TOCK_ROOT is not defined) | |
| ifneq ($(TOCK_ROOT),) | |
| tock_rust_destdir := $(TOCK_ROOT)/chips/lowrisc/src/reg_constants | |
| ips_reg_rust_install := $(addprefix $(tock_rust_destdir)/,$(notdir $(ips_reg_rust))) | |
| $(tock_rust_destdir): | |
| mkdir -p $@ | |
| endif | |
| .PHONY: $(ips_reg) $(ips_reg_header) $(ips_reg_rust) $(tops_gen) $(tops_reg) | |
| all: $(ips_reg) $(tops_gen) $(tops_reg) | |
| regs: $(ips_reg) $(tops_reg) | |
| $(REG_OUTPUT_DV_DIR) $(REG_OUTPUT_SW_DIR): %: | |
| mkdir -p $@ | |
| blk-gen-script = $(PRJ_DIR)/hw/ip/$*/util/$*_gen.py | |
| blk-hjson = $(PRJ_DIR)/hw/ip/$*/$(dir_hjson)/$*.hjson | |
| # If the ip has a local generation script, run it first. This will | |
| # require all blocks to use a consistent naming. This should be hooked | |
| # into ipgen (see #5636) for completeness. | |
| $(ips_reg): %_reg: | $(REG_OUTPUT_DV_DIR) | |
| $(if $(wildcard $(blk-gen-script)),$(blk-gen-script)) | |
| ${PRJ_DIR}/util/regtool.py ${toolflags} -r $(blk-hjson) | |
| ${PRJ_DIR}/util/regtool.py --sec-cm-testplan $(blk-hjson) | |
| ${PRJ_DIR}/util/regtool.py -s -t $(REG_OUTPUT_DV_DIR) $(blk-hjson) | |
| # Register generation for otp_ctrl also depends on running gen-otp-mmap.py | |
| .PHONY: otp-mmap | |
| $(filter otp_ctrl_reg,$(ips_reg)): otp-mmap | |
| otp-mmap: | |
| cd ${PRJ_DIR} && ./util/design/gen-otp-mmap.py | |
| # Register generation for lc_ctrl also depends on running gen-lc-state-enc.py | |
| .PHONY: lc-state-enc | |
| $(filter lc_ctrl_reg,$(ips_reg)): lc-state-enc | |
| lc-state-enc: | |
| cd ${PRJ_DIR} && ./util/design/gen-lc-state-enc.py | |
| regs-header: $(ips_reg_header) | |
| $(ips_reg_header): %_reg_header: | $(REG_OUTPUT_SW_DIR) | |
| ${PRJ_DIR}/util/regtool.py -D -o $(REG_OUTPUT_SW_DIR)/$*_reg_headers.h $(blk-hjson) | |
| regs-rust: $(ips_reg_rust_install) $(ips_reg_rust) | |
| $(ips_reg_rust): $(REG_OUTPUT_SW_DIR)/%_reg_constants.rs: | $(REG_OUTPUT_SW_DIR) | |
| ${PRJ_DIR}/util/regtool.py -R -o $@ $(blk-hjson) | |
| $(ips_reg_rust_install): $(tock_rust_destdir)/%: $(REG_OUTPUT_SW_DIR)/% | $(tock_rust_destdir) | |
| cp $< $@ | |
| clean-regs-header: | |
| rm -r -f ${REG_OUTPUT_SW_DIR} | |
| top-hjson = $(PRJ_DIR)/hw/$*/data/$*.hjson | |
| top: $(tops_gen) $(tops_reg) | |
| $(tops_gen): %_gen: | |
| ${PRJ_DIR}/util/topgen.py -t $(top-hjson) -o ${PRJ_DIR}/hw/$*/ ${toolflags} | |
| $(tops_reg): %_reg: | |
| mkdir -p ${REG_OUTPUT_DV_DIR}/$* | |
| ${PRJ_DIR}/util/topgen.py -t $(top-hjson) -r -o ${REG_OUTPUT_DV_DIR}/$* ${toolflags} | |
| .PHONY: all |