Четвёртый час, а архив все еще старый:
Code: Select all
latest-iso.7z 2014-Dec-06 09:40:04 14.6M application/octet-stream
Надеюсь, я ничего не сломал?
Вопрос про зависимости (
обновление: проблему решил, но вопрос остался). Делаю поддержку нескольких языков, по аналогии с асм-примерами пишу
Code: Select all
tup.rule("echo \"#define LANG_" .. ((tup.getconfig("LANG") == "") and "en" or tup.getconfig("LANG")) .. "\" > lang.h", {"lang.h"})
Получаю
tup error: Missing input dependency - a file was read from, and was not specified as an input link for the command. This is an issue because the file was created from another command, ...
Погуглил, суть проблемы понял. Надо указать явную зависимость исходников от только что сгенерированного файла lang.h, чтобы его генерирование выполнилось раньше. На сайте tup есть пример, но он не для Lua, попытка адаптировать для Lua ни к чему не привела.
В use_gcc.lua увидел следующее:
Code: Select all
function compile_gcc(input, output)
if not output then output = '%B.o' end
tup.append_table(OBJS,
tup.foreach_rule(input, "kos32-gcc -c " .. CFLAGS .. "$(CFLAGS_%e) " .. INCLUDES .. " -o %o %f", output)
)
end
function link_gcc(input, output)
if not output then input,output = OBJS,input end
if STARTUP then
table.insert(LIBDEPS, STARTUP)
LDFLAGS = LDFLAGS .. " " .. STARTUP
end
if tup.getconfig("HELPERDIR") == "" and #LIBDEPS then
if type(input) == "string" then input = {input} end -- <===
if not input.extra_inputs then input.extra_inputs = {} end
tup.append_table(input.extra_inputs, LIBDEPS)
end
if type(output) == "string" then output = {output} end
if not output.extra_outputs then output.extra_outputs = {} end
table.insert(output.extra_outputs, output[1] .. ".map")
tup.rule(input,
"kos32-ld " .. LDFLAGS .. " -o %o %f -Map %o.map " .. LIBS .. " && kos32-objcopy %o -O binary " .. tup.getconfig("KPACK_CMD"),
output)
end
extra_inputs - это оно? Указание на зависимость? Но оно мне нужно не в компоновщике ld, а в компиляторе gcc, но в функции compile_gcc() не реализована возможность передать в input объект, содержащий extra_inputs. Я правильно понимаю, что её надо там реализовать и это решит проблему? Или я малость намудрил?
P.S. Естественно, перемудрил. В шашках отличный пример.
Code: Select all
if tup.getconfig("LANG") == "ru"
then C_LANG = "LANG_RU"
else C_LANG = "LANG_EN" -- this includes default case without config
end
CFLAGS = CFLAGS .. " -DRS_KOLIBRI -D" .. C_LANG .. " "
Проблемы у меня больше нет, но хочется знать, верно ли то, что я написал выше. Про зависимости gcc от сгенерированных tup'ом файлов, если таковые вдруг когда-нибудь появятся.