Petroglif

Инструментарий

В этой главе рассмотрены инструментальные средства разработки и сборки системы.

Языки программирования

Подавляющая часть проекта реализована на языке c++.

Стандарт языка c++

В проекте применяется подмножество языка c++, соответствующее стандарту ISO/IEC 14882:1998. Возможности, доступные в более поздних стандартах практически не используются.

Компилятор и среда разработки

Для работы собственно над ядром системы используется среда разработки Microsoft Visual Studio. В состав исходных кодов входят каталоги, содержащие файлы решений (solution) и проектов (project) для Visual Studio версий 7.10 (Visual Studio 2003), 14.0 (Visual Studio 2015) и 15.0 (Visual Studio 2017).

Проект одинаково успешно компилируется в каждой из указанных версий среды.

Дистрибутивы релизов собираются на Visual Studio 7.10. Связано это с тем, что при попытке сборки дистрибутивов на другой версии от некоторых пользователей поступали жалобы на аварийные завершения сеансов. Вероятно это связано с различными версиями Windows, но тем не менее мы пока не решаемся собирать дистрибутивы на иных версиях среды.

Опции компиляции и компоновки

Конфигурации решения (Solution Configurations)

Решение содержит 6 конфигураций для трех базовых вариантов сборки:

  • Пользовательский интерактивный модуль. Файл результата: ppw.exe.
  • Job-Server. Файл результата: ppws.exe. Запускается в виде системной службы.
  • Dll-модуль для использования внешними компонентами. Файл результата: ppwmt.dll.
  • Debug
    Конфигурация пользовательской интерактивной сборки с отладочной информацией.
    Release
    Конфигурация пользовательской интерактивной сборки в релиз-варианте.
    ServerDebug
    Конфигурация Job-Server'а с отладочной информацией.
    ServerRelease
    Конфигурация Job-Server'а в релиз-варианте.
    MtDllDebug
    Конфигурация dll-модуля для использования внешними компонентами посредством COM-интерфейсов. С отладочной информацией.
    MtDllRelease
    Конфигурация dll-модуля для использования внешними компонентами посредством COM-интерфейсов. Релиз-вариант.

    Каталоги для формирования промежуточных результатов сборки (Output и Intermediate directories)

    Головной каталог проекта обычно называется Papyrus, однако это может быть и любое иное имя, например OpenPapyrus.

    Visual Studio 2003

    (ProjectDir)../../__TEMP__/VC70/(ConfigurationName)/(ProjectName)/

    Visual Studio 2015

    (ProjectDir)../../__TEMP__/VC2015/(PlatformShortName)/(Configuration)/(ProjectName)/

    Visual Studio 2017

    (ProjectDir)../../__TEMP__/VC2017/(PlatformShortName)/(Configuration)/(ProjectName)/

    Обратите внимание, в шаблоне путей для Visual Studio 2015 и Visual Studio 2017 включены дополнительные подкаталоги для символа платформы.Такие шаблоны применяются ко всем проектам решения.

    Выравнивание структур данных (struct member alignment)

    Все проекты компилируются с отсутствием выравнивания структур данных (struct member alignment = 1 byte). Причиной для этого является потенциальная опасность несогласованности persistent-структур при сохранении или передачи их в потоках данных.При этом поля структур настоятельно рекомендуется выравнивать в ручную по границе 4 байт.

    Например:

    
    	// С этой структурой все в порядке: каждый элемент 
    	// занимает пространство кратное 4.
    	struct ABC {
    		int   A;
    		uint8 B[16];
    		int   C;
    	};
    	
    	// В этой структуре элемент B следует выровнять до 4-байтовой границы 
    	// фиктивным элементом (в данном случае это uint8 Reserve[3]). 
    	// К таким фиктивным элементам следует добавлять предопределенный 
    	// комментарий @alignment.
    	struct ABC2 {
    		int   A;
    		bool  B;
    		uint8 Reserve[3]; // @alignment
    		int   C;
    	};	
    

    Character Set

    Все проекты решения компилируются в режиме Unicode.

    Многопоточность

    Все проекты компилируются в многопоточном варианте.

    Run-time библиотеки

    При сборке всех модулей применяется статическая компоновка с run-time библиотеками (multithread-вариант).

    Precompiled headers

    Практически все проекты сборки используют предкомпиляцию заголовков. В роли инициирующего файла обычно выступает файл с именем aaa-pch.c(cpp) где aaa - краткая аббревиатура проекта. Например pp-pch.cpp для проекта Papyrus, slib-pch.cpp для проекта SLib, openssl-ssl-pch.cpp для одного из проектов openssl и так далее.

    Сторонние компоненты

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

    Далее перечисляются почти все компоненты, которые так или иначе были включены в общую инфраструктуру.

    asmlib of Agner Fog
    Великолепный набор ассемблерных процедур для улучшения производительности. https://www.agner.org
    zlib
    Версия 1.2.11. Библиотека сжатия данных. https://zlib.net
    cairo
    Версия 1.16.0. Библиотека векторной 2D-графики. https://www.cairographics.org
    pixman
    Версия 0.36.0. Низкоуровневая поддержка для cairo.
    freetype
    libjpeg
    libjpeg-turbo
    libpng
    giflib
    libxml
    BerkeleyDB
    gSOAP
    Scintilla
    cURL
    libzip
    openssl
    libssh2
    nginx
    pcre
    7zip
    lua
    Версия 5.3.4. В планах задействовать LUA в качестве внутреннего скриптового языка.
    libarchive

    OOO "Петроглиф"
    Copyright © 2019