Первые пробы запуска тулзов от кейла автономно (при помощи простого враппера) Я взял стандартный проект-пример 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,
)
- враппер для запуска кейловых утилит v.1.0 bialix(504 знак., 04.03.2006 16:17,