J'ai une variable contenant une liste de fichiers. Ils seront transmis à mon environnement de simulation.

VHDL_SOURCES += $(PWD)/common/ip/file1.vhd \
                $(PWD)/common/ip/file2.vhd \
                $(PWD)/common/ip/file3.vhd \
                $(PWD)/common/ip/file4.vhd \

L'une des cibles crée un tas de nouveaux fichiers et ils doivent être ajoutés à la liste.

# sim target: Add requirement filelist.txt 
.PHONY: sim
sim: add_xilip_sources


# all other definitions are defined in the common makefile
include $(PWD)/scripts/cocotb/common_makefile/Makefile

.PHONY: add_xilip_sources
add_xilip_sources: $(BUILD_PWD)/filelist.txt
    XILIP_FILES = $(shell cat $<) # read the filelist into an variable
    # prepend the new filelist to the VHDL_SOURCES list. 

$(BUILD_PWD)/filelist.txt: $(SCRIPT_PWD)/make_switch_ip.tcl
    vivado -mode tcl -source $(SCRIPT_PWD)/make_switch_ip.tcl

Comment puis-je modifier la variable dans ma cible ?

0
Botnic 16 nov. 2020 à 12:03

1 réponse

Meilleure réponse

Vous ne pouvez pas. Make est déclaratif, ou en deux étapes ; en spécifiant d'abord l'environnement de construction, puis en exécutant. Vous ne pouvez pas modifier l'environnement de construction tel que les variables lors de son exécution, ou du moins pas entre différentes recettes.

Ce que vous pouvez faire, c'est utiliser des fichiers au lieu de variables :

# vhdl_sources.txt containing VHDL_SOURCES
# vhdl_sources.txt.full containing VHDL_SOURCES plus generated filelist.txt content
vhdl_sources.txt.full: $(BUILD_PWD)/filelist.txt vhdl_sources.txt
    cat $^ > $@
1
Andreas 16 nov. 2020 à 10:27