Первые пробы запуска тулзов от кейла автономно (при помощи простого враппера) Я взял стандартный проект-пример HELLO из комплекта поставки кейла. Сгенерил
батник для сборки проекта. Потом для эксперимента ввел одну неопределенную
функцию и при помощи простой обвертки позапускал компилятор c51 и линкер bl51.
Вот что выдает сам кейл при компиляции:
компилятор:
compiling HELLO.C... HELLO.C(41): warning C206: 'func': missing function-prototype HELLO.C - 0 Error(s), 1 Warning(s).линкер:
linking... *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: FUNC MODULE: HELLO.obj (HELLO) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: FUNC MODULE: HELLO.obj (HELLO) ADDRESS: 0422H Program Size: data=30.1 xdata=0 code=1099А вот, что можно увидеть, если мои враппером запустить компилятор и линкер отдельно: компилятор:
Return code: 1 *** Stdout: C51 COMPILER V7.05 - SN: xxxxx-xxxxxx COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2003 *** WARNING C206 IN LINE 41 OF HELLO.C: 'func': missing function-prototype C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S) *** Stderr:линкер:
Return code: 1 *** Stdout: BL51 BANKED LINKER/LOCATER V5.03 - SN: xxxxx-xxxxxx COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2002 "HELLO.obj" TO "HELLO" RAMSIZE(256) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: FUNC MODULE: HELLO.obj (HELLO) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: FUNC MODULE: HELLO.obj (HELLO) ADDRESS: 0422H Program Size: data=30.1 xdata=0 code=1099 LINK/LOCATE RUN COMPLETE. 2 WARNING(S), 0 ERROR(S) *** Stderr:А вот и сам текст скрипта-враппера:
#!/usr/bin/python2.4 # (c) Alexander Belchenko, 2006 """Wrapper for launching C51 Keil's compiler""" from subprocess import Popen, PIPE import sys if __name__ == "__main__": q = Popen(sys.argv[1:], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) output = q.stdout.read() error = q.stderr.read() status = q.wait() if status >= 0: print "Return code:", status print "*** Stdout:" print output print "*** Stderr:" print error else: raise Exception("Command failed: %s" % error)Как видно из приведенной информации, враппер необходим. Он же может использоваться для преобразования возвращаемого кода к виду 0/1 на основе задаваемого порога. Хотя как по мне, так и делать stop on warnings -- не самый худший вариант. Хотя бывают казусы, когда трудно добиться от кейла компиляции без предупреждений. Но надо стремиться! Вобщем-то главное назвачение враппера -- это преобразование выходной информации от кейловых тулзов в более удобный и привычный вид (то, что нам подсовывает микровижн). Далее -- делаем конвертор батника в SConstruct файл. Следующий этап -- разработка простого синтаксиса для указания опций компиляции-линковки. У меня есть некоторые идеи на этот счет. Но готов услышать мнения со стороны.
-
- враппер для запуска кейловых утилит v.1.0 bialix(504 знак., 04.03.2006 16:17, )