74f74de59c40891b8f4ea9af77366e8cfc772363
[freedom-sifive.git] / common.mk
1 # See LICENSE for license details.
2
3 # Required variables:
4 # - MODEL
5 # - PROJECT
6 # - CONFIG_PROJECT
7 # - CONFIG
8 # - BUILD_DIR
9 # - FPGA_DIR
10
11 # Optional variables:
12 # - EXTRA_FPGA_VSRCS
13
14 EXTRA_FPGA_VSRCS ?=
15 PATCHVERILOG ?= ""
16
17 base_dir := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
18 rocketchip_dir := $(base_dir)/rocket-chip
19 SBT ?= java -jar $(rocketchip_dir)/sbt-launch.jar
20
21 # Build firrtl.jar and put it where chisel3 can find it.
22 FIRRTL_JAR ?= $(rocketchip_dir)/firrtl/utils/bin/firrtl.jar
23 FIRRTL ?= java -Xmx2G -Xss8M -XX:MaxPermSize=256M -cp $(FIRRTL_JAR) firrtl.Driver
24
25 $(FIRRTL_JAR): $(shell find $(rocketchip_dir)/firrtl/src/main/scala -iname "*.scala")
26 $(MAKE) -C $(rocketchip_dir)/firrtl SBT="$(SBT)" root_dir=$(rocketchip_dir)/firrtl build-scala
27 touch $(FIRRTL_JAR)
28 mkdir -p $(rocketchip_dir)/chisel3/lib
29 cp -p $(FIRRTL_JAR) $(rocketchip_dir)/chisel3/lib
30
31 # Build .fir
32 firrtl := $(BUILD_DIR)/$(CONFIG_PROJECT).$(CONFIG).fir
33 firrtl_prm := $(BUILD_DIR)/$(CONFIG_PROJECT).$(CONFIG).prm
34 $(firrtl) $(firrtl_prm): $(shell find $(base_dir)/src/main/scala -name '*.scala') $(FIRRTL_JAR)
35 mkdir -p $(dir $@)
36 $(SBT) "run-main rocketchip.Generator $(BUILD_DIR) $(PROJECT) $(MODEL) $(CONFIG_PROJECT) $(CONFIG)"
37
38 .PHONY: firrtl
39 firrtl: $(firrtl)
40
41 # Build .v
42 verilog := $(BUILD_DIR)/$(CONFIG_PROJECT).$(CONFIG).v
43 $(verilog): $(firrtl) $(FIRRTL_JAR)
44 $(FIRRTL) -i $(firrtl) -o $@ -X verilog
45 ifneq ($(PATCHVERILOG),"")
46 $(PATCHVERILOG)
47 endif
48
49
50 .PHONY: verilog
51 verilog: $(verilog)
52
53 # Build .mcs
54 mcs := $(BUILD_DIR)/$(CONFIG_PROJECT).$(CONFIG).mcs
55 $(mcs): $(verilog)
56 VSRC_TOP=$(verilog) EXTRA_VSRCS="$(EXTRA_FPGA_VSRCS)" $(MAKE) -C $(FPGA_DIR) mcs
57 cp $(FPGA_DIR)/obj/system.mcs $@
58
59 .PHONY: mcs
60 mcs: $(mcs)
61
62 # Clean
63 .PHONY: clean
64 clean:
65 $(MAKE) -C $(FPGA_DIR) clean
66 rm -rf $(BUILD_DIR)