Sam Elliott | 45fb1c6 | 2020-06-02 18:18:54 +0100 | [diff] [blame] | 1 | # Copyright lowRISC contributors. |
| 2 | # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| 3 | # SPDX-License-Identifier: Apache-2.0 |
| 4 | |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 5 | CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) |
| 6 | PRJ_DIR := $(realpath ${CUR_DIR}/../) |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 7 | |
Srikrishna Iyer | 6c870cb | 2019-10-30 02:08:12 -0700 | [diff] [blame] | 8 | REG_OUTPUT_DIR ?= ${PRJ_DIR}/build/regs-generated |
| 9 | REG_OUTPUT_DV_DIR ?= ${REG_OUTPUT_DIR}/dv |
| 10 | REG_OUTPUT_SW_DIR ?= ${REG_OUTPUT_DIR}/sw |
| 11 | |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 12 | IPS ?= aes \ |
Eric Shiu | 5f1d304 | 2021-03-17 17:24:11 -0700 | [diff] [blame] | 13 | adc_ctrl \ |
Timothy Chen | 2b8ef76 | 2021-02-16 14:44:55 -0800 | [diff] [blame] | 14 | aon_timer \ |
Timothy Chen | 3525aa8 | 2020-04-23 23:23:18 -0700 | [diff] [blame] | 15 | clkmgr \ |
Cindy Chen | dec0771 | 2020-10-27 17:16:12 -0700 | [diff] [blame] | 16 | entropy_src \ |
Mark Branstad | a069bb0 | 2020-12-02 11:59:34 -0800 | [diff] [blame] | 17 | csrng \ |
| 18 | edn \ |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 19 | flash_ctrl \ |
| 20 | gpio \ |
| 21 | hmac \ |
Eunchan Kim | 1a95905 | 2020-09-18 15:10:22 -0700 | [diff] [blame] | 22 | kmac \ |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 23 | i2c \ |
Timothy Chen | 15adeee | 2020-09-09 15:44:35 -0700 | [diff] [blame] | 24 | keymgr \ |
Michael Schaffner | e81ab75 | 2020-09-30 18:57:29 -0700 | [diff] [blame] | 25 | lc_ctrl \ |
Michael Schaffner | 41319c2 | 2020-04-12 15:40:24 -0700 | [diff] [blame] | 26 | otp_ctrl \ |
Timothy Chen | d12569f | 2021-02-12 15:28:12 -0800 | [diff] [blame] | 27 | pattgen \ |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 28 | pinmux \ |
Michael Schaffner | fd39dc4 | 2021-06-22 19:28:07 -0700 | [diff] [blame] | 29 | pwm \ |
Timothy Chen | bc16a17 | 2020-04-07 23:45:23 -0700 | [diff] [blame] | 30 | pwrmgr \ |
Rupert Swarbrick | 9855d4b | 2020-12-02 08:41:35 +0000 | [diff] [blame] | 31 | rom_ctrl \ |
Timothy Chen | 612901b | 2020-03-05 17:03:13 -0800 | [diff] [blame] | 32 | rstmgr \ |
Timothy Chen | 1d8b960 | 2021-07-08 19:58:08 -0700 | [diff] [blame] | 33 | rv_core_ibex \ |
Michael Schaffner | 690d732 | 2021-06-24 14:37:22 -0700 | [diff] [blame] | 34 | rv_dm \ |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 35 | rv_timer \ |
Timothy Chen | 1e6db37 | 2020-05-19 20:52:45 -0700 | [diff] [blame] | 36 | sensor_ctrl \ |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 37 | spi_device \ |
Michael Schaffner | 8e04df3 | 2021-02-09 19:52:24 -0800 | [diff] [blame] | 38 | spi_host \ |
Michael Schaffner | 86c0e32 | 2020-10-07 19:56:32 -0700 | [diff] [blame] | 39 | sram_ctrl \ |
Eric Shiu | 33ad532 | 2021-03-11 19:23:00 -0800 | [diff] [blame] | 40 | sysrst_ctrl \ |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 41 | trial1 \ |
Philipp Wagner | 5c2d294 | 2020-06-22 11:34:00 +0100 | [diff] [blame] | 42 | otbn \ |
Michael Schaffner | 24984fc | 2020-01-17 17:42:57 -0800 | [diff] [blame] | 43 | uart \ |
Michael Schaffner | 6b43466 | 2022-04-14 20:16:57 -0700 | [diff] [blame] | 44 | usbdev |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 45 | |
Eunchan Kim | 49634d7 | 2019-09-05 14:39:57 -0700 | [diff] [blame] | 46 | TOPS ?= top_earlgrey |
| 47 | |
Timothy Chen | 3193b00 | 2019-10-04 16:56:05 -0700 | [diff] [blame] | 48 | # conditional flags |
| 49 | VERBOSE ?= 0 |
| 50 | toolflags ?= |
| 51 | ifeq ($(VERBOSE),1) |
| 52 | toolflags += -v |
| 53 | endif |
| 54 | |
Tobias Wölfel | 4c5fbec | 2019-10-23 12:43:17 +0200 | [diff] [blame] | 55 | dir_hjson = data |
Timothy Chen | 3193b00 | 2019-10-04 16:56:05 -0700 | [diff] [blame] | 56 | |
Rupert Swarbrick | bf7fe81 | 2021-08-27 16:59:56 +0100 | [diff] [blame] | 57 | hjson_for_ip = ${PRJ_DIR}/hw/ip/$(1)/$(dir_hjson)/$(1).hjson |
Eunchan Kim | 53e3b3b | 2019-11-13 12:33:49 -0800 | [diff] [blame] | 58 | |
Rupert Swarbrick | bf7fe81 | 2021-08-27 16:59:56 +0100 | [diff] [blame] | 59 | # IPs that have a directory in hw/ip |
| 60 | local_ips := \ |
| 61 | $(foreach i,$(IPS),$(if $(wildcard $(call hjson_for_ip,$(i))),$(i))) |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 62 | |
Rupert Swarbrick | bf7fe81 | 2021-08-27 16:59:56 +0100 | [diff] [blame] | 63 | # Per-IP targets (all phonies) |
| 64 | ips_reg = $(addsuffix _reg, $(local_ips)) |
| 65 | ips_reg_header = $(addsuffix _reg_header, $(local_ips)) |
Rupert Swarbrick | ed64f3b | 2021-08-31 16:51:11 +0100 | [diff] [blame] | 66 | ips_reg_rust = $(foreach ip,$(local_ips),$(REG_OUTPUT_SW_DIR)/$(ip)_reg_constants.rs) |
Tobias Wölfel | ce06a24 | 2019-10-23 13:54:46 +0200 | [diff] [blame] | 67 | |
Rupert Swarbrick | bf7fe81 | 2021-08-27 16:59:56 +0100 | [diff] [blame] | 68 | # Per-top targets (all phonies) |
Eunchan Kim | 49634d7 | 2019-09-05 14:39:57 -0700 | [diff] [blame] | 69 | tops_gen = $(addsuffix _gen,$(TOPS)) |
Srikrishna Iyer | 6c870cb | 2019-10-30 02:08:12 -0700 | [diff] [blame] | 70 | tops_reg = $(addsuffix _reg,$(TOPS)) |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 71 | |
Rupert Swarbrick | ed64f3b | 2021-08-31 16:51:11 +0100 | [diff] [blame] | 72 | # Targets for installing files into TOCK_ROOT (empty if TOCK_ROOT is not defined) |
| 73 | ifneq ($(TOCK_ROOT),) |
| 74 | tock_rust_destdir := $(TOCK_ROOT)/chips/lowrisc/src/reg_constants |
| 75 | ips_reg_rust_install := $(addprefix $(tock_rust_destdir)/,$(notdir $(ips_reg_rust))) |
| 76 | |
| 77 | $(tock_rust_destdir): |
| 78 | mkdir -p $@ |
| 79 | endif |
| 80 | |
Rupert Swarbrick | bf7fe81 | 2021-08-27 16:59:56 +0100 | [diff] [blame] | 81 | .PHONY: $(ips_reg) $(ips_reg_header) $(ips_reg_rust) $(tops_gen) $(tops_reg) |
| 82 | |
Rupert Swarbrick | 8d44b37 | 2021-08-31 16:59:40 +0100 | [diff] [blame] | 83 | all: $(ips_reg) $(tops_gen) $(tops_reg) |
Srikrishna Iyer | 6c870cb | 2019-10-30 02:08:12 -0700 | [diff] [blame] | 84 | |
Rupert Swarbrick | 8d44b37 | 2021-08-31 16:59:40 +0100 | [diff] [blame] | 85 | regs: $(ips_reg) $(tops_reg) |
Srikrishna Iyer | 6c870cb | 2019-10-30 02:08:12 -0700 | [diff] [blame] | 86 | |
Rupert Swarbrick | dd2a2cc | 2021-08-31 16:55:50 +0100 | [diff] [blame] | 87 | $(REG_OUTPUT_DV_DIR) $(REG_OUTPUT_SW_DIR): %: |
| 88 | mkdir -p $@ |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 89 | |
Rupert Swarbrick | bf7fe81 | 2021-08-27 16:59:56 +0100 | [diff] [blame] | 90 | blk-gen-script = $(PRJ_DIR)/hw/ip/$*/util/$*_gen.py |
| 91 | blk-hjson = $(PRJ_DIR)/hw/ip/$*/$(dir_hjson)/$*.hjson |
| 92 | |
| 93 | # If the ip has a local generation script, run it first. This will |
| 94 | # require all blocks to use a consistent naming. This should be hooked |
| 95 | # into ipgen (see #5636) for completeness. |
Rupert Swarbrick | 50b364a | 2021-08-31 17:13:26 +0100 | [diff] [blame] | 96 | $(ips_reg): %_reg: | $(REG_OUTPUT_DV_DIR) |
Rupert Swarbrick | bf7fe81 | 2021-08-27 16:59:56 +0100 | [diff] [blame] | 97 | $(if $(wildcard $(blk-gen-script)),$(blk-gen-script)) |
| 98 | ${PRJ_DIR}/util/regtool.py ${toolflags} -r $(blk-hjson) |
Srikrishna Iyer | a463e17 | 2022-02-02 12:09:39 -0800 | [diff] [blame] | 99 | ${PRJ_DIR}/util/regtool.py --sec-cm-testplan $(blk-hjson) |
Rupert Swarbrick | dd2a2cc | 2021-08-31 16:55:50 +0100 | [diff] [blame] | 100 | ${PRJ_DIR}/util/regtool.py -s -t $(REG_OUTPUT_DV_DIR) $(blk-hjson) |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 101 | |
Rupert Swarbrick | 8dbaba4 | 2021-08-31 17:06:46 +0100 | [diff] [blame] | 102 | # Register generation for otp_ctrl also depends on running gen-otp-mmap.py |
| 103 | .PHONY: otp-mmap |
| 104 | $(filter otp_ctrl_reg,$(ips_reg)): otp-mmap |
Michael Schaffner | f6a7900 | 2020-10-27 10:00:13 -0700 | [diff] [blame] | 105 | otp-mmap: |
Michael Schaffner | 1fff985 | 2021-01-08 14:06:35 -0800 | [diff] [blame] | 106 | cd ${PRJ_DIR} && ./util/design/gen-otp-mmap.py |
Michael Schaffner | f6a7900 | 2020-10-27 10:00:13 -0700 | [diff] [blame] | 107 | |
Rupert Swarbrick | 50b364a | 2021-08-31 17:13:26 +0100 | [diff] [blame] | 108 | # Register generation for lc_ctrl also depends on running gen-lc-state-enc.py |
| 109 | .PHONY: lc-state-enc |
| 110 | $(filter lc_ctrl_reg,$(ips_reg)): lc-state-enc |
Michael Schaffner | 6db11f2 | 2021-01-25 18:24:20 -0800 | [diff] [blame] | 111 | lc-state-enc: |
| 112 | cd ${PRJ_DIR} && ./util/design/gen-lc-state-enc.py |
| 113 | |
Rupert Swarbrick | 8d44b37 | 2021-08-31 16:59:40 +0100 | [diff] [blame] | 114 | regs-header: $(ips_reg_header) |
Srikrishna Iyer | 6c870cb | 2019-10-30 02:08:12 -0700 | [diff] [blame] | 115 | |
Rupert Swarbrick | dd2a2cc | 2021-08-31 16:55:50 +0100 | [diff] [blame] | 116 | $(ips_reg_header): %_reg_header: | $(REG_OUTPUT_SW_DIR) |
| 117 | ${PRJ_DIR}/util/regtool.py -D -o $(REG_OUTPUT_SW_DIR)/$*_reg_headers.h $(blk-hjson) |
Tobias Wölfel | ce06a24 | 2019-10-23 13:54:46 +0200 | [diff] [blame] | 118 | |
Rupert Swarbrick | 8d44b37 | 2021-08-31 16:59:40 +0100 | [diff] [blame] | 119 | regs-rust: $(ips_reg_rust_install) $(ips_reg_rust) |
Chia-Chi Teng | a038790 | 2021-08-10 10:39:22 -0600 | [diff] [blame] | 120 | |
Rupert Swarbrick | dd2a2cc | 2021-08-31 16:55:50 +0100 | [diff] [blame] | 121 | $(ips_reg_rust): $(REG_OUTPUT_SW_DIR)/%_reg_constants.rs: | $(REG_OUTPUT_SW_DIR) |
Rupert Swarbrick | ed64f3b | 2021-08-31 16:51:11 +0100 | [diff] [blame] | 122 | ${PRJ_DIR}/util/regtool.py -R -o $@ $(blk-hjson) |
| 123 | |
| 124 | $(ips_reg_rust_install): $(tock_rust_destdir)/%: $(REG_OUTPUT_SW_DIR)/% | $(tock_rust_destdir) |
| 125 | cp $< $@ |
Chia-Chi Teng | a038790 | 2021-08-10 10:39:22 -0600 | [diff] [blame] | 126 | |
Tobias Wölfel | ce06a24 | 2019-10-23 13:54:46 +0200 | [diff] [blame] | 127 | clean-regs-header: |
Srikrishna Iyer | 6c870cb | 2019-10-30 02:08:12 -0700 | [diff] [blame] | 128 | rm -r -f ${REG_OUTPUT_SW_DIR} |
Tobias Wölfel | ce06a24 | 2019-10-23 13:54:46 +0200 | [diff] [blame] | 129 | |
Rupert Swarbrick | 08b5421 | 2021-08-31 17:21:53 +0100 | [diff] [blame] | 130 | top-hjson = $(PRJ_DIR)/hw/$*/data/$*.hjson |
Eunchan Kim | 49634d7 | 2019-09-05 14:39:57 -0700 | [diff] [blame] | 131 | |
Rupert Swarbrick | 08b5421 | 2021-08-31 17:21:53 +0100 | [diff] [blame] | 132 | top: $(tops_gen) $(tops_reg) |
| 133 | $(tops_gen): %_gen: |
| 134 | ${PRJ_DIR}/util/topgen.py -t $(top-hjson) -o ${PRJ_DIR}/hw/$*/ ${toolflags} |
| 135 | |
| 136 | $(tops_reg): %_reg: |
| 137 | mkdir -p ${REG_OUTPUT_DV_DIR}/$* |
| 138 | ${PRJ_DIR}/util/topgen.py -t $(top-hjson) -r -o ${REG_OUTPUT_DV_DIR}/$* ${toolflags} |
Srikrishna Iyer | 6c870cb | 2019-10-30 02:08:12 -0700 | [diff] [blame] | 139 | |
| 140 | |
Rupert Swarbrick | 50b364a | 2021-08-31 17:13:26 +0100 | [diff] [blame] | 141 | .PHONY: all |