nextpnr-ecp5.mk (2483B)
1 ## Copyright 2020 Brian Swetland <swetland@frotz.net> 2 ## 3 ## Licensed under the Apache License, Version 2.0 4 ## http://www.apache.org/licenses/LICENSE-2.0 5 6 PROJECT_OBJDIR := out/-nextpnr-/$(PROJECT_NAME) 7 8 PROJECT_CONFIG := $(PROJECT_OBJDIR)/$(PROJECT_NAME)_out.config 9 PROJECT_LINT := $(PROJECT_OBJDIR)/$(PROJECT_NAME).lint 10 PROJECT_JSON := $(PROJECT_OBJDIR)/$(PROJECT_NAME).json 11 PROJECT_YS := $(PROJECT_OBJDIR)/$(PROJECT_NAME).ys 12 PROJECT_BIT := out/$(PROJECT_NAME).bit 13 PROJECT_SVF := out/$(PROJECT_NAME).svf 14 15 PROJECT_VLG_SRCS := $(filter %.v %.sv,$(PROJECT_SRCS)) 16 PROJECT_LPF_SRCS := $(filter %.lpf,$(PROJECT_SRCS)) 17 18 $(PROJECT_YS): _SRCS := $(PROJECT_VLG_SRCS) 19 $(PROJECT_YS): _JSON := $(PROJECT_JSON) 20 $(PROJECT_YS): _DEFS := $(PROJECT_VERILOG_DEFS) 21 $(PROJECT_YS): $(PROJECT_SRCS) $(PROJECT_DEF) build/nextpnr-ecp5.mk 22 @mkdir -p $(dir $@) 23 @echo GENERATING: $@ 24 @echo verilog_defines -DHEX_PATHS -DYOSYS > $@ 25 @for def in $(_DEFS); do echo verilog_defines -D$$def; done >> $@ 26 @for src in $(_SRCS); do echo read_verilog -sv $$src; done >> $@ 27 @echo synth_ecp5 -top top -json $(_JSON) >> $@ 28 29 $(PROJECT_LINT): _SRCS := $(PROJECT_VLG_SRCS) 30 $(PROJECT_LINT): $(PROJECT_SRCS) 31 @mkdir -p $(dir $@) 32 @echo LINTING: $@ 33 @$(VERILATOR) --top-module top --lint-only $(_SRCS) 34 @touch $@ 35 36 $(PROJECT_JSON): _LOG := $(PROJECT_OBJDIR)/$(PROJECT_NAME).yosys.log 37 $(PROJECT_JSON): $(PROJECT_YS) $(PROJECT_LINT) 38 @mkdir -p $(dir $@) 39 @echo SYNTHESIZING: $@ 40 @$(YOSYS) -s $< 2>&1 | tee $(_LOG) 41 42 $(PROJECT_CONFIG): _OPTS := $(PROJECT_NEXTPNR_OPTS) 43 $(PROJECT_CONFIG): _LPF := $(foreach lpf,$(PROJECT_LPF_SRCS),--lpf $(lpf)) 44 $(PROJECT_CONFIG): _LOG := $(PROJECT_OBJDIR)/$(PROJECT_NAME).nextpnr.log 45 $(PROJECT_CONFIG): _JSON := $(PROJECT_JSON) 46 $(PROJECT_CONFIG): $(PROJECT_JSON) $(PROJECT_LPF_SRCS) 47 @mkdir -p $(dir $@) 48 @echo PLACING-AND-ROUTING: $@ 49 $(NEXTPNR_ECP5) --json $(_JSON) --textcfg $@ $(_OPTS) $(_LPF) 2>&1 | tee $(_LOG) 50 51 $(PROJECT_BIT): _CONFIG := $(PROJECT_CONFIG) 52 $(PROJECT_BIT): _BIT := $(PROJECT_BIT) 53 $(PROJECT_BIT): $(PROJECT_CONFIG) 54 @mkdir -p $(dir $@) 55 @echo GENERATING: $@ 56 @$(ECPPACK) $(_CONFIG) $(_BIT) --compress 57 58 $(PROJECT_SVF): _CONFIG := $(PROJECT_CONFIG) 59 $(PROJECT_SVF): _SVF := $(PROJECT_SVF) 60 $(PROJECT_SVF): $(PROJECT_CONFIG) 61 @mkdir -p $(dir $@) 62 @echo GENERATING: $@ 63 @$(ECPPACK) --svf $(_SVF) $(_CONFIG) --compress 64 65 $(PROJECT_NAME): $(PROJECT_BIT) 66 67 ALL_TARGETS += $(PROJECT_NAME) 68 ALL_BUILDS += $(PROJECT_NAME) 69 70 TARGET_$(PROJECT_NAME)_DESC := build ecp5 bitfile: $(PROJECT_BIT) 71