Компиляция SQLite без объединения - PullRequest
0 голосов
/ 13 марта 2020

В настоящее время я пытаюсь добавить изменения в способ выполнения кода виртуальной машиной SQLite. Для этого я редактирую файл vdbe.c из источника SQLite.

Проблема заключается в том, что компиляция SQLite заключается в создании двух огромных файлов реализации и заголовочных файлов (sqlite3.c и sqlite3.h) путем объединения нескольких меньших файлов после анализа некоторых из них для создания кода и документации.

К сожалению, процесс объединения занимает относительно много времени (около 15 секунд). Мне было интересно, будет ли несколько простой способ не компилировать все каждый раз, как в настоящее время, и, возможно, сэкономить много времени на компиляцию.

Основная трудность связана с тем, что исходные файлы сами по себе недопустимы (они могут компилироваться только после объединения, так что некоторые типы уже были определены ранее в объединенном файле). После нескольких попыток с помощью простого написанного от руки сценария Python (который просто извлекал бы код выполнения виртуальной машины из объединения и оставлял все остальное вместе), я пришел к выводу, что есть два крайних случая, чтобы сделать это таким образом , Я действительно не знаю, как поступить.

Любые предложения приветствуются.

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Я бы сказал: зарегистрируйте объединение в вашем хранилище исходного кода, рассматривайте его как свой собственный артефакт и работайте над ним. Всякий раз, когда вы будете sh обновлять объединение, используйте git, чтобы помочь вам.

  1. Создайте две ветви sqlite-upstream и sqlite-local.

  2. Проверьте объединение в восходящем направлении "v1" в sqlite upstream, затем объедините это на sqlite-local и делайте все необходимые локальные изменения в этой ветке.

  3. Когда вышестоящий релиз выпускает "v2", передайте это sqlite-upstream.

  4. Слияние или перебазирование - возможно, вам придется разрешить некоторые конфликты, но с ними будет гораздо легче справиться, чем с отслеживанием изменений вручную.

    • Слияние sqlite-upstream в sqlite-local, или

    • Дублируйте sqlite-local в sqlite-local-v2, затем измените его на sqlite-upstream, затем используйте sqlite из этой ветви в зависимом коде.

0 голосов
/ 14 марта 2020

Итак, если кому-то понадобится ответ в будущем, вот как я это сделал. Вы можете найти всю дискуссию на форумах SQLite .

После получения источника:

  • У меня есть первый проход, где я не изменяю файл (для компиляции лимона, возможно, среди прочих):
make -f Makefile.linux-gcc
  • Затем я редактирую Makefile.linux-gcc и заменяю все вхождения gcc на gcc -x none
  • Я изменяю main.mk и изменяю целевой объект, добавляя в конце -lstdc++:
sqlite3$(EXE):  shell.c libsqlite3.a sqlite3.h
    $(TCCX) $(READLINE_FLAGS) -o sqlite3$(EXE) $(SHELL_OPT) \
        shell.c libsqlite3.a $(LIBREADLINE) $(TLIBS) $(THREADLIB) -lstdc++
  • Я снова запускаю make, используя make -f Makefile.linux-gcc, и получаю свой sqlite3 исполняемый файл, как и ожидалось.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...