Code Monkey home page Code Monkey logo

Comments (9)

abusalimov avatar abusalimov commented on May 24, 2024

Итак, что предлагалось Антоном:

Есть папка ./projects (нынешняя ./templates), в ней папки, относящиеся к конкретной платформе/архитектуре. В них под-папками цели, содержащие уже конфиги, и еще глубже патчи к ним.
При конфигурировании указывается проект и цель. Конфигер накладывает патчи на базовый конфиг и создает в папке ./conf под-папки, соответствующие патчам. При сборке создаются образы для каждого пропатченного конфига.

Например:

./projects/
  sparc-ovk/
    release/  // Пример базового конфига без патчей (то, что есть сейчас)
      *.conf
    simulation/
      io_board/
        mods-tests.conf // Здесь включен единственный нужный тест
      mods.conf // включает mods-tests.conf, который будет взят из патча
      *.conf // Базовый конфиг (не считая mods.conf)
  microblaze/
    debug/
      *.conf
    compiler/
      shift-O0/
        mods-tests.conf
      *.conf


make config PROJECT=sparc-ovk TARGET=simulation

./conf/
  io_board/
    *.conf // Пропатченные конфиги
  // Вот тут непонятно, а если патчей как таковых нет (например для цели release)?
  // И нужно ли делать сборку для базового кофига?


make

./build/
  io_board/  // Внутри сегодняшняя структура
    bin/
      embox
      ...
    obj/
      ...
  // Аналогичный вопрос про сборку базового конфига. Куда его класть?

Поправьте, если я что-то не так понял.

Плюсы:

  • Мало изменений в системе сборки, дорабатывается только конфигер
  • Наглядные пропатченные конфиги в подпапках папки ./conf

Минусы:

  • На мой взгляд, не самое наглядное размещение итоговых образов
  • Для каждого конфига делается полная перекомпиляция проекта, что является необходимым далеко не всегда

from embox.

abusalimov avatar abusalimov commented on May 24, 2024

Что предлагал я:

В целесообразности такой глубины вложенности ./projects меня в целом убедили.

Про структуру ./conf мне нравится предложенный вариант, но, опять же, непонятно, как быть с базовым конфигом и что делать со скоростью сборки. Я ничего не могу предложить на тему того, как избавиться от лишней пересборки, при условии, что в подпапках ./conf лежат уже пропатченные конфиги (то есть по сути разные файлы с похожим содержимым).
Можно перенести процесс наложения патчей на стадию сборки, а в папке ./conf повторять структуру ./projects/<project>/<target> (то есть хранить файлы базового конфига и под-папки с патчами). В этом случае теряется наглядность в ./conf, но зато можно извернуться и обойтись без повторных перекомпиляций всего и всех.

Папка ./build в моем представлении должна выглядеть примерно так:

./build/
  bin/
    embox // Сборка для базового конфига
    embox-test_io_board // Для соответствующего патча
    ...
    // + куча файлов с такими же именами и расширениями .dis, .srec и т.д.
  obj/
    // куча говна, зависящего от подхода к решению задачи минимизации числа перекомпиляций проекта

По сложности реализации - примерно то же самое, что и в предыдущем случае + решение этой самой пресловутой задачи.

Сама задача - свести к минимум наложение патчей на файлы, от которых зависят все объектники. В нашем случае это build.conf и options.conf, а также файлы, включаемые в них через #include. Если же изменяются lds.conf или mods.conf, то требуется только повторная линковка, без перекомпиляции.

from embox.

abusalimov avatar abusalimov commented on May 24, 2024

Леха, напиши, что есть сейчас и что остается доделать.

from embox.

anton-bondarev avatar anton-bondarev commented on May 24, 2024

Ага собственно со всем согласен.
Мой вариант на мой взгляд было проще реализовать для человека который не писал макефайлы.
В будущем то что предлагает хочется то что предлагает Эльдар, там есть еще один плюс.
Легко делать сохранении цели из рабочей в темплейты

from embox.

afomin avatar afomin commented on May 24, 2024

Собственно, написано "как хотел Антон" за исключением того, что сейчас нормально не разбита папка с template, но это надо аккуратно сделать + сейчас нет переменной PROJECT, все запихивается в TARGET ( := sparc/release, например) Согласен, надо поправить... Тут, как говорится, надо было, чтобы работало=)
Так что человек, который не писал мэйкфайлы, сделал так.

from embox.

afomin avatar afomin commented on May 24, 2024

Да, посмотрел внимательно, что написал Эльдар. Там на самом деле "то, что есть сейчас" - это только из-за убогих template'ов... в конфигурилке уже написано нормально. Сегодня вопрос решу.

from embox.

afomin avatar afomin commented on May 24, 2024

Мне, кстати, кажется, что лучше mods.conf хранить в папке с "патчем", чтобы в общей части включать mods.conf, который у разных патчей может быть разным... Вдруг, например, какому-то тесту понадобится специфичный драйвер.

from embox.

abusalimov avatar abusalimov commented on May 24, 2024

Это уже вопросы соглашений, что тоже немаловажно, но к этому таску они отношения не имеют. Механизм наложения патчей будет работать во всех случаях.

from embox.

afomin avatar afomin commented on May 24, 2024

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

Assigned to @afomin
Closed with status Fixed

from embox.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.