IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Системы сборки, таки Scons :)
Гость_MrYuran_*
сообщение 12.3.2012, 6:44
Сообщение #1





Гости






Попробовал запустить Scons.
Установил, написал дефолтный сценарий Sconstruct
Цитата
Program('main/main.c')

Запустил.

Код
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\measure\hardware.h(34) : e
rror C2054: требуется "(" после "inline"
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\measure\hardware.h(35) : e
rror C2085: LmSensorPower: отсутствует в списке формальных параметров
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\measure\hardware.h(35) : e
rror C2143: синтаксическая ошибка: отсутствие ";" перед "{"
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\main\../measure/measure.h(
13) : fatal error C1083: Не удается открыть файл include: stdbool.h: No such fil
e or directory
scons: *** [main\main.obj] Error 2
scons: building terminated because of errors.


Н-да... У него собственное вИдение на си...
Курим дальше.

PS: проект полностью рабочий:
Код
Build project 9010U_430_01_00 - OK.
   text    data     bss     dec     hex filename
  14528      80     771   15379    3c13 9010U_430_01_00.elf
msp430-gcc (GCC) 3.2.3
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Это make all

Наверно, надо для начала компилятор ему указать.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 12.3.2012, 8:33
Сообщение #2





Гости






Ага, пошло!... по трубам...
Код
c:/mspgcc_new/bin/msp430-gcc /Fomain\main.obj /c main\main.c -O2
msp430-gcc: /Fomain\main.obj: No such file or directory
msp430-gcc: /c: No such file or directory
In file included from main\/../measure/measure.h:8:0,
                 from main\main.c:6:
c:\mspgcc_new\bin\../lib/gcc/msp430/4.5.3/../../../../msp430/include/io.h:1:2: w
arning: #warning <io.h> is deprecated, please include <msp430.h>
In file included from main\/../measure/measure.h:9:0,
                 from main\main.c:6:
main\/../measure/hardware.h: In function 'LmSensorPower':
main\/../measure/hardware.h:41:17: error: 'P6OUT' undeclared (first use in this
function)


Кажися, начал понимать понемногу. Вот бы ещё доку концентрированную, а не эти размазанные в пространстве хтмлки...
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 12.3.2012, 8:41
Сообщение #3


тот самый
Иконка группы

Группа: Мод
Сообщений: 13629
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



А как обойти такую вещь:
Хочу сабж исключительно на флешке, при установке сабака ругается на отсутствие стационарного питона - а он, шайтан, портабле, и тоже на флешке. alcoholic.gif
ЗЫ
Вот где нужен что-то типа visual make!
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 12.3.2012, 9:08
Сообщение #4





Гости






Цитата(_pasha @ 12.3.2012, 9:41) *
А как обойти такую вещь:
Хочу сабж исключительно на флешке, при установке сабака ругается на отсутствие стационарного питона - а он, шайтан, портабле, и тоже на флешке. alcoholic.gif

Ну так установить его стационарно, а потом на флешку вместе с пытоном.
Как я понял, он просто в папку Scripts добавляется.
Там всех делов на полметра.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 12.3.2012, 9:42
Сообщение #5


тот самый
Иконка группы

Группа: Мод
Сообщений: 13629
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Ага. Но странно, в инсталляхе не догадались до того, чтобы указать питоноПутю иммедиатедли.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 12.3.2012, 10:29
Сообщение #6





Гости






Вчера ещё пробовал по наводке с элха Clang, впечатлило, хоть и не пошло.
Чувствуется, что торжественная монополия GNU на свободные средства разработки заканчивается.
И это хорошо.
Перейти в начало страницы
 
+Цитировать сообщение
dxp
сообщение 12.3.2012, 10:52
Сообщение #7


Adept
***

Группа: Пользователи
Сообщений: 522
Регистрация: 20.4.2011
Из: Novosibirsk
Пользователь №: 346



Чессно сказать, дефолтный вариант сразу выкинул фтопку и написал полностью свой (не так там и много). Функционал automake мне не нужон, зато нада полную управляемость. Поэтому всё описал сам, начиная с конфигурационных переменных и заканчивая билдерами. Полёт отличный (уже лет пять, если не больше). О make вспоминаю, как страшном сне.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 12.3.2012, 10:57
Сообщение #8





Гости






Может, дока какая монолитная есть?
В виде pdf
Особенно на API
Перейти в начало страницы
 
+Цитировать сообщение
dxp
сообщение 12.3.2012, 14:47
Сообщение #9


Adept
***

Группа: Пользователи
Сообщений: 522
Регистрация: 20.4.2011
Из: Novosibirsk
Пользователь №: 346



Цитата(MrYuran @ 12.3.2012, 14:57) *
Может, дока какая монолитная есть?
В виде pdf
Особенно на API

Когда изучал это дело, там была пара HTML'ей - один, типа, user's guide, второй вроде reference manual. По ним всё достаточно успешно изучалось. Этот же контент находился и в pdf'никах, но они мне показались менее удобными.

А вот тут это раззи не оно? Тут и одним файлом, и пачкой, и html'и, и postscript'ы, и pdf'ы.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 12.3.2012, 14:56
Сообщение #10





Гости






Цитата(dxp @ 12.3.2012, 15:47) *
А вот тут это раззи не оно? Тут и одним файлом, и пачкой, и html'и, и postscript'ы, и pdf'ы.

Ага, слона-то, как всегда, и не приметил smile.gif
Просто pdf удобнее оффлайн на планшетке изучать.
Кстати, там у меня и питонодвижок стоит, осталось только GCC собрать под андроид smile.gif

От бумаги тоже отвык. Читая последний раз Пелевина с бумажного носителя, отметил, насколько удобнее 7" мобильный планшет.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 14.3.2012, 7:54
Сообщение #11


тот самый
Иконка группы

Группа: Мод
Сообщений: 13629
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Что-то я продолбоюбил.
Есть же обычный архив, нафига мне инсталлер.. Сегодня попробую, наконец-то
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 14.3.2012, 8:11
Сообщение #12





Гости






Цитата(_pasha @ 14.3.2012, 8:54) *
Сегодня попробую, наконец-то

А я так уже.
make all в настройках IDE заменил на scons

Потихоньку допиливаю Sconstruct, который вполне на makefile становится похож, за исключением закорючек в описаниях целей
Все зависимости находит сам, достаточно только центровой main обозначить.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 16.3.2012, 14:13
Сообщение #13





Гости






dxp, а как указать сконсу разные цели сборки?
Типа release и debug?

Идейка тут появилась, насчет экспресс-тестирования.
Например, прилепляю сбоку рабочего проекта набор тестов testMain.c и компиляю Program('testMain.c').
Ничего лишнего, а зависимости само установит.
Понятно, что есть специальные тестовые примочки, только надо все осваивать, а тут вроде все понятно и прозрачно.
Перейти в начало страницы
 
+Цитировать сообщение
dxp
сообщение 16.3.2012, 15:11
Сообщение #14


Adept
***

Группа: Пользователи
Сообщений: 522
Регистрация: 20.4.2011
Из: Novosibirsk
Пользователь №: 346



Цитата(MrYuran @ 16.3.2012, 18:13) *
dxp, а как указать сконсу разные цели сборки?
Типа release и debug?

Цели указывыются через env.Alias. Не знаю, как там у вас получится (не знаю, что у env у вас живёт, я его вычистил первым делом и написал всё своё), а у меня это выглядит примерно так:

Код
main     = env.Alias(ProjectName, ExeDir + '/' + ProjectName + '.' + DbgExt)


Это цель типа целевого файла - продукт сборки. Таких файлов может быть пачка (у меня их пять штук - главный (он показан), вспомогательные всякие (загрузчики, программаторы, хексы)

Код
clean_all = env.Alias('cln',      action = clean)
ld_prg    = env.Alias('load_prg', action = load_program)
prg_flash = env.Alias('prg',      action = program_flash)
vrf_flash = env.Alias('vrf',      action = verify_flash)
ic        = env.Alias('ic',       action = check_scmRTOS_cfg)


Это пример целей, который не целевые файлы, а функции, т.е. когда надо что-то сделать, выполнить действия. Аналог Phony targets у make.

Цели можно объединять в списки, чтобы сразу делать пакетную сборку.

Код
all = [main, rtinit, init, ldr, ic]


Ну, и финальные цели похожи на это:

Код
#-------------------------------------------------------------------------------
#
#    Final targets
#
env.Alias('all', all)
env.Alias('rebuild', [clean_all, all])
env.Alias('load',    [main, init, ic, ld_prg])
env.Alias('flash',   [all, fprg_drv, prg_flash])
env.Alias('verify',  [all, fprg_drv, vrf_flash])

env.AlwaysBuild('all', 'cln', 'load', 'load_prg', 'flash', 'prg', 'vrf', 'ic')

Вот эти имена, которые в финальных целях обозначены, и используются при задании цели при вызове скрипта. Например,

scons - собирается цель по умолчанию - all
scons rebuild - сперва чистятся продукты генерации, потом всё заново пересобирается.

С остальными целями ровно так же. Удобно то, что всё автоматизировано. Например, если сказать scons load (загрузить в проц новую программу), то сперва соберутся все нужные для этого процесса файлы, потом будет произведена загрузка.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 27.3.2012, 13:58
Сообщение #15





Гости






Что-то лыжи пока не едут...
Цитата
c:/mspgcc_new/bin/msp430-gcc /Fomain\main.obj /c main\main.c -O2 -mmcu=msp430x149
msp430-gcc: /Fomain\main.obj: No such file or directory
msp430-gcc: /c: No such file or directory
scons: *** [main\main.obj] Error 1

Самое интересное, ошибки синтаксиса распознаются.
Ведь компилятор же их распознает, не сконс?

Цитата
c:/mspgcc_new/bin/msp430-gcc /Fomain\main.obj /c main\main.c -O2 -mmcu=msp430x149
main\main.c: In function 'main':
main\main.c(15):13: error: expected ';' before numeric constant
msp430-gcc: /Fomain\main.obj: No such file or directory
msp430-gcc: /c: No such file or directory
scons: *** [main\main.obj] Error 1
Перейти в начало страницы
 
+Цитировать сообщение
dxp
сообщение 28.3.2012, 4:31
Сообщение #16


Adept
***

Группа: Пользователи
Сообщений: 522
Регистрация: 20.4.2011
Из: Novosibirsk
Пользователь №: 346



Цитата(MrYuran @ 27.3.2012, 17:58) *
Самое интересное, ошибки синтаксиса распознаются.
Ведь компилятор же их распознает, не сконс?

Значит, сконс передаёт компилятору команду. Надо посмотреть, что именно он передаёт. Я не знаю, как у вас сделано, у меня билдеры самописные, я в таких случаях просто вывожу на печать строку и смотрю, что там передаётся, после этого, как правило, сразу видно, где косяк. Выглядит это примерно так (это функция-билдер cpp файлов, для с и асма есть аналогичные; первый фрагмент кода - это украшательство, оно рисует строку из '*', чтобы отделить список компиляции от других действий, в данном случае на это можно не смотреть):
Код
#-------------------------------------------------------------------------------
#
#    Action functions
#
def compile_cpp(target, source, env):
    #------------------------------------------------
    #
    #   Check if the first source is compiling
    #
    if env['FIRST_ENTRY'] == False:
        env['FIRST_ENTRY'] = True
        print '*'*60

    #------------------------------------------------
    #
    #   Launch compiler
    #
    print 'Compile:  ' + str(source[0])
    cmd = env['CC'] + env['CFLAGS'] + ' -o' + str(target[0]) + ' ' + str(source[0])
    # print cmd # <----------- эту строку раскомментирую и смотрю, что пошло на запуск тула
    p = subprocess.Popen(cmd, universal_newlines = True,
                         stdin  = subprocess.PIPE,
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE )

    out, err = p.communicate()
    if out: print out
    if err: print err

    return p.returncode
#-------------------------------------------------------------------------------

Если используете штатный env, то как там это вывести, не знаю. Я его сразу зануляю и пишу всё своё, получается полностью всё в моих руках и управляемо.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 23.4.2012, 6:54
Сообщение #17





Гости






Цитата(dxp @ 20.2.2012, 13:15) *
Гораздо лучше тут сконс - это просто скрипт на питоне, вычислительный код пишется прямо по месту, синтаксис классический (а-ля матлаб), точность любая и широчайший набор средств. Эту же задачу можно универсально решать прямо в исходном коде с помощью COG. Это инструмент для автоматизированной кодогенерации, тут без разницы, одну (или пачку) константу объявить и проинициализировать или целую библиотеку фукнций. Способ универсальный, не зависит от языка и платформы (для каждого случая просто пишется свой код на питоне).

Попробовал Cog - куул!
Даже напейсал от радости статейко. Глядь, и пойдет идея в массы.

Кстати, по запросу "Cog" в гугле ловится нечто совсем другое.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 23.4.2012, 8:23
Сообщение #18


тот самый
Иконка группы

Группа: Мод
Сообщений: 13629
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



Понравилась идея упаковать таким образом файлы описания периферии МК.
И вообще - так можно реализовать вожделенную тройственность отображения (язык - блок-схема - UML)

Зы. Это надо перенести в тему "системы сборки"
ОК, перенес /MrYuran/
Перейти в начало страницы
 
+Цитировать сообщение
Гость_MrYuran_*
сообщение 23.4.2012, 13:10
Сообщение #19





Гости






Кажися, я понял, чего со сконсом не так. Я неправильно понимал термин "зависимости".
А недавно попробовал ключик -MD в GCC и понял.
Перейти в начало страницы
 
+Цитировать сообщение
_pasha
сообщение 30.9.2013, 21:35
Сообщение #20


тот самый
Иконка группы

Группа: Мод
Сообщений: 13629
Регистрация: 24.11.2009
Из: Харьковская обл., UA
Пользователь №: 25



случайно зацепился за waf и чегойто он показался мне гораздо прямее. Но по прежнему предпочтение отдаю расставлению галочек в визардах.
Перейти в начало страницы
 
+Цитировать сообщение

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.3.2024, 15:41