Добавление лишних предметов, которые еще не существуют - PullRequest
0 голосов
/ 04 мая 2020

В процессе решения этой сложной ситуации сборки я столкнулся с проблемой зависимости от пакета Cabal, который я сгенерировал сам (полный пакет, package.yaml и Setup.hs и исходный код и зависимые C библиотеки и все).

У меня есть stack.yaml и package.yaml, которые вместе описывают среду, в которой я могу запустить мой генератор кода, так что это работает:

  1. Настройте среду, убедитесь, что доступны все зависимости: stack build
  2. В этой среде я теперь могу выполнить скрипт сборки: stack runhaskell -- -iclash-shake/shake Shakefile.hs
  3. Запустить генератор кода на выходе скрипта сборки: clashilator clashilator -i _build/verilog/topEntity.manifest -o _build/verilator
  4. Сборка C части сгенерированного кода: make -f _build/verilator/csrc/Makefile

Все это оставляет мне идеально настроенную библиотеку Cabal в _build/verilator. Я хотел бы добавить исполняемый файл к моему внешнему package.yaml, который зависит от этой библиотеки. Конечно, этот исполняемый файл не будет доступен для сборки, пока не будут завершены все 4 шага, описанные выше.

Я могу скрыть исполняемый файл под флагом сборки, например:

executables:
  draw-toy-verilator:
    main: verilator.hs
    when:
    - condition: flag(verilator)
      then:
        dependencies:
          - clashilator-ffi
      else:
        buildable: false

Здесь, clashilator-ffi имя пакета Cabal, сгенерированного на шаге 3 и подготовленного для сборки на шаге 4. Поскольку draw-toy-verilator теперь находится за флагом, который по умолчанию равен false, то факт, что clashilator-ffi не существует на шаге 1, не является проблема с запуском stack build без флагов.

Однако после шага 4 я бы хотел сделать stack build --flag clash-draw-toy:verilator и заставить его работать. Однако это не так, потому что _build/verilator не знает, что такое Stack как дополнительная зависимость. И я не могу добавить extra-deps: _build/verilator к своему stack.yaml, потому что тогда шаг 1 завершится неудачно (каталог еще не существует).

Так что я думаю, что мне нужно, чтобы Stack смотрел extra-deps лениво, или ie передавал их флагу Cabal, или как-то располагал пакет в разделе исполняемого файла draw-toy-verilator в package.yaml вместо stack.yaml.

...