Чего я хочу достичь:
У меня есть 3 или более тестов, которые должны быть скомпилированы с отдельным флагом [т.е. первый тест должен быть с -ewp, а остальные должны быть -c] компилятором ptxas через ту же цель.
например. В приведенном ниже вызове div_sc, т.е. $ 1 - это имя исполняемого файла, которое зависит от $ 2 (div_sc div_sc1 div_sc). $ 2 может иметь несколько имен тестов с пробелом
$ (вызов ADD_PTXTEST_EWP, div_sc, div_sc div_sc1 div_sc2)
Что я сделал:
Я попробовал следующий подход, но только последнее значение переменной EWP_SC_SETTER берется, и foreach терпит неудачу после первого сканирования $ 2
Makefile1:
ADD_PTXTEST_EWP = $(eval $(call _ADD_PTXTEST_EWP,$(strip $1),$(strip $2)))
Запуск foreach для каждого элемента в $ 2.Если первый элемент в $ 2 равен $ 1, тогда я устанавливаю переменную EWP_SC_SETTER = -ewp else EWP_SC_SETTER = -c для цели $ (1). $ (ARCHREV) .cubin, которая определена в Makefile 2
define _ADD_PTXTEST_EWP
$(foreach ptx, $(2), $(if $(filter $1,$(ptx)), $(1).$(ARCHREV).cubin:
EWP_SC_SETTER = -ewp $(1).$(ARCHREV).cubin:
$(ptx).$(ARCHREV).$(RELOC_CUBIN_EXTN)$(NEWLINE), $(1).$(ARCHREV).cubin:
EWP_SC_SETTER = -c $(1).$(ARCHREV).cubin:
$(ptx).$(ARCHREV).$(RELOC_CUBIN_EXTIN)$(NEWLINE)))
endef
Выше один не помог, поэтому попробовал другой подход. К сожалению, это также не работает
define _ADD_PTXTEST_EWP
PTXTESTS += $(1)
$(info 1 is $(1))
$(foreach ptx, $(2), $(eval $(call _ADD_PTXTEST_EWP_IMP,$(ptx))))
endef
define _ADD_PTXTEST_EWP_IMP
$(info ptx is $(ptx))
ifeq ($(ptx),div_sc)
$(1).$(ARCHREV).cubin: EWP_SC_SETTER := -ewp
$(info in ptx)
else
$(1).$(ARCHREV).cubin: EWP_SC_SETTER := -c
$(info out ptx)
endif
$(1).$(ARCHREV).cubin: $(ptx).$(ARCHREV).$(RELOC_CUBIN_EXTN)$(NEWLINE)
endef
Этот make-файл имеет определение target%. $ (ARCHREV) .cubin
Makefile 2:
%.$(ARCHREV).reloc.cubin: %.$(ARCHREV).ptx
$(call TOOLS_HEADER_DUMP_LOG,PTXAS,cubin)
$(EXE_PREFIX) $(PTXAS) $(call FILE_PTXAS_FLAGS,$*) $(call MAXREG,$*) -arch=sm_$(ARCHREV) **$(EWP_SC_SETTER)** $(G_FLAG) $(patsubst %.reloc.cubin, %.ptx, $@) -o $@ $(call IGNORE_COMPILE_ERR,$*) $(call TOOLS_DUMP_REDIRECT2,2,cubin) $(call PERFTIME_DUMP_REDIRECT, $*.perf.txt)
%.$(ARCHREV).cubin: %.$(ARCHREV)$(RELOC_CUBIN_EXTN)
$(call TOOLS_HEADER_DUMP_LOG,NVLINK,cubin)
$(EXE_PREFIX) $(NVLINK) $(NVLINK_FLAGS) $(call CNPLIBRARY) $(call FILE_NVLINKFLAGS,$*) $(call MAXREG,$*) -arch=sm_$(ARCHREV) $^ -o $@ $(call IGNORE_LINK_ERR,$*) $(call TOOLS_DUMP_REDIRECT,2,cubin)
Любая помощь приветствуется