Одесса: 6°С (вода 9°С)
Киев: 1°С
Львов: -1°С

Тема: Makefile

Ответить в теме
Показано с 1 по 3 из 3
  1. Вверх #1
    Посетитель
    Пол
    Мужской
    Сообщений
    488
    Репутация
    49

    По умолчанию Makefile

    Допустим, есть «глупая» команда foo, вызываемая
    Код:
    foo bar.src
    без каких-либо других параметров. Она создает файл в foo.bin текущей директории. Структура файлов следующая:
    Код:
    src/
    src/bar.src
    bin/
    makefile
    foo вызывается из makefile. Нужно, чтобы make поместил bar.bin в каталог bin/.
    Как сделать?


  2. Вверх #2
    Постоялец форума Аватар для Яр
    Пол
    Мужской
    Адрес
    Odessa.Ua
    Возраст
    30
    Сообщений
    2,952
    Репутация
    148
    Код:
    bin/bar.bin: src/bar.src
        foo src/bar.src
        mv bar.bin bin
    ~ Motivation is what gets you started. Habit is what keeps you going.

  3. Вверх #3
    Посетитель
    Пол
    Мужской
    Сообщений
    488
    Репутация
    49
    Яр
    Неужели так просто? Спасибо.

    Некая команда foo — это ghdl (грубо говоря gcc для vhdl). Проблема в том, что она создает файл со списком vhdl-файлов с таймстампами, который должен лежать вместе с объектными файлами. Так что если просто переместить объектные файлы без ведома ghdl, он их не находит при линковке. К счастью, оказалось, ghdl не «глупа» как foo, и у нее есть параметр указания workdir, куда она складывает объектные файлы. А исполнительный файл и и vcd-файл приходится перемещать вручную.

    Не знаю, кому может понадобится, но на всякий случай — makefile для анализа, синтеза, исполнения vhdl-проекта и отображения результата симуляции (посредством gtkwave).

    Код:
    BIN_DIR = bin
    SRC_DIR = src
    VPATH = $(SRC_DIR):$(BIN_DIR)
    
    SOURCES=cbr.vhd cm.vhd mux.vhd cu.vhd tb.vhd
    TOP_UNIT = tb
    SIM_TIME = 4400ns
    
    VCD_FILE = $(TOP_UNIT).vcd
    EXE_FILE = $(BIN_DIR)/$(TOP_UNIT)
    OBJECTS = $(SOURCES:.vhd=.o)
    
    $(BIN_DIR)/$(VCD_FILE):$(EXE_FILE)
    	$(BIN_DIR)/$(TOP_UNIT) --stop-time=$(SIM_TIME) --vcd=$(VCD_FILE)
    	mv $(VCD_FILE) $(BIN_DIR)
    
    $(EXE_FILE):$(OBJECTS)
    	ghdl -e --workdir=$(BIN_DIR) $(TOP_UNIT)
    	mv $(TOP_UNIT) $(EXE_FILE)
    
    %.o:%.vhd
    	ghdl -a --workdir=$(BIN_DIR) $^
    
    sim:
    	gtkwave $(BIN_DIR)/$(VCD_FILE)
    
    clean:
    	rm -f $(BIN_DIR)/*.o $(EXE_FILE) $(BIN_DIR)/$(VCD_FILE) $(BIN_DIR)/*.cf

Ответить в теме

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения