Вторичная компиляция с помощью ServBay
ServBay предоставляет мощную и полноценную локальную веб-среду разработки для пользователей macOS, оснащённую широким набором пакетов и инструментов. Помимо предустановленных версий пакетов ServBay, разработчикам иногда требуется провести вторичную компиляцию под свои нужды, например:
- Включить специальные параметры компиляции для определённого пакета.
- Добавить модули или расширения, отсутствующие по умолчанию в ServBay (например, новые PHP-расширения или модули PostgreSQL).
- Использовать другие версии библиотек, отличные от стандартных в ServBay, при сборке.
- Внести индивидуальные изменения в предоставляемые ServBay пакеты.
ServBay предоставляет все необходимые инструменты и среду компиляции, чтобы упростить эти задачи.
Для успешного выполнения вторичной компиляции рекомендуется базовое знание процесса сборки ПО в Unix/Linux (например, configure
, make
, make install
).
Предварительные требования
Перед началом повторной компиляции убедитесь, что выполнены следующие условия:
Установлена ServBay Development Library: Это ключевая зависимость для вторичной компиляции. Этот пакет содержит все необходимые библиотеки (
.so
,.a
), заголовочные файлы (.h
) и другие ресурсы для сборки в среде ServBay. Найдите и установите его через панель Пакеты в интерфейсе приложения ServBay.Установка Xcode Command Line Tools: Это основной набор инструментов разработчика для macOS, включающий компилятор Clang и линковщик. Откройте терминал и выполните команду для установки:
bashxcode-select --install
1Если инструменты уже установлены, система выдаст соответствующее сообщение.
Установка дополнительных инструментов для сборки: Для компиляции большинства open-source пакетов понадобятся также
autoconf
,automake
,libtool
и др. Обычно их устанавливают с помощью менеджера пакетов Homebrew:bashbrew install autoconf automake libtool cmake
1Если Homebrew не установлен, ознакомьтесь с инструкциями на официальном сайте Homebrew для его установки.
Настройка среды компиляции
После установки ServBay Development Library и остальных необходимых инструментов, потребуется инициализировать переменные среды для терминала. Это необходимо для корректного определения путей к библиотекам, заголовочным файлам и исполняемым файлам ServBay для компилятора и системы сборки (например, переменные PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
).
Рабочая среда ServBay различается для процессоров Intel (x86_64) и Apple Silicon (Arm64) на Mac. Необходимо выбрать правильную команду инициализации среды, соответствующую архитектуре текущей среды выполнения ServBay.
Определение архитектуры CPU среды ServBay Runtime
Архитектуру можно определить, проверив один из исполняемых файлов в папке bin
ServBay. Например, выполнив команду для bison
:
# Выполните следующую команду в терминале для проверки
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
2
3
# Выполните следующую команду в терминале для проверки
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
2
3
Определив архитектуру, используйте соответствующий скрипт для инициализации среды.
Инициализация переменных среды для компиляции
Откройте новое окно терминала, скопируйте и выполните соответствующий вашему процессору скрипт. Эти команды установят нужные переменные среды, пути и параметры для полноценной работы компилятора в среде ServBay.
# Установить число ядер процессора для параллельной компиляции
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Базовый путь установки ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Название каталога с пакетами
SERVBAY_PACKAGE_DIR_NAME="package"
# Полный путь к пакетам
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Пути к бинарным файлам ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Пути к конфигам ServBay
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Пути к переменным данным ServBay
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Путь к установленной ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Пути к заголовкам и библиотекам ServBay Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# Текущий каталог сборки
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Версии OpenSSL
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Минимальная версия ОС для сборки
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey или новее
# Флаги архитектуры CPU
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Для Arm64 обычно -target не требуется
# Установить флаги C-компилятора: уровень оптимизации, версия macOS, архитектура
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Установить флаги линковщика: rpath, пути к библиотекам, версия macOS, архитектура
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Установить флаги препроцессора и компилятора C++
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Приоритет ServBay bin/sbin в PATH
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Пути поиска для pkg-config
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # стандартный путь Homebrew
# Добавить пути к библиотекам и заголовкам OpenSSL
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# pkgconfig для OpenSSL
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# После установки переменных среды можно приступать к компиляции
echo "ServBay Arm64 среда компиляции настроена."
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Установить число ядер процессора для параллельной компиляции
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Базовый путь установки ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Название каталога с пакетами
SERVBAY_PACKAGE_DIR_NAME="package"
# Полный путь к пакетам
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Пути к бинарным файлам ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Пути к конфигам ServBay
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Пути к переменным данным ServBay
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Путь к установленной ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Пути к заголовкам и библиотекам ServBay Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# Текущий каталог сборки
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Версии OpenSSL
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Минимальная версия ОС для сборки
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey или новее
# Флаги архитектуры CPU
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# -target необходим для Intel
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# Установить флаги C-компилятора: уровень оптимизации, версия macOS, архитектура, целевая платформа
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Установить флаги линковщика: rpath, пути к библиотекам, версия macOS, архитектура, целевая платформа
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Установить флаги препроцессора и компилятора C++
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Приоритет ServBay bin/sbin в PATH
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Пути поиска для pkg-config
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # стандартный путь Homebrew
# Добавить пути к библиотекам и заголовкам OpenSSL
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# pkgconfig для OpenSSL
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# После установки переменных среды можно приступать к компиляции
echo "ServBay x86_64 среда компиляции настроена."
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Важное замечание: Эти переменные среды действуют только в текущей сессии терминала. Если вы закроете окно терминала или откроете новое, потребуется повторно выполнить соответствующий скрипт для настройки среды компиляции.
Примеры компиляции
После настройки среды в терминале, можно приступать к загрузке исходного кода и сборке. Ниже приведены примеры для наиболее популярных задач.
Компиляция ImageMagick
ImageMagick — мощная библиотека для обработки изображений, используемая как зависимость PHP-расширения imagick
. ImageMagick уже включён в стандартную установку ServBay, поэтому отдельная сборка обычно не нужна. Пример ниже демонстрирует процесс сборки типичного проекта Autotools (configure/make) в среде ServBay.
Скачать исходный код ImageMagick и распаковать его:
bash# При необходимости укажите актуальную версию wget https://imagemagick.org/archive/releases/ImageMagick-7.1.1-33.tar.gz tar zxvf ImageMagick-7.1.1-33.tar.gz cd ImageMagick-7.1.1-33
1
2
3
4Запустить скрипт
./configure
: Запустите configure с ранее установленными переменными среды. Опции--prefix
,--libdir
,--includedir
и др. указывают путь установки в директории ServBay Development Library. Такое размещение позволяет другим программам в среде ServBay (например, расширению PHPimagick
) находить эти библиотеки и заголовки. Остальные параметры подберите в соответствии с нуждами ImageMagick.bash./configure \ --prefix=${SERVBAY_COMMON_PATH} \ --libdir=${SERVBAY_COMMON_LIB_PATH} \ --includedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --oldincludedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --bindir=${SERVBAY_BIN_PATH} \ --sbindir=${SERVBAY_SBIN_PATH} \ --sysconfdir=${SERVBAY_ETC_PATH} \ --datarootdir=${SERVBAY_COMMON_SHARE_PATH} \ --enable-osx-universal-binary=no \ --disable-silent-rules \ --disable-opencl \ --enable-shared \ --enable-static \ --with-freetype=yes \ --with-gvc=no \ --with-modules \ --with-webp=yes \ --with-heic=no \ --without-gslib \ --with-fpx=no \ --without-openexexr \ --with-raw=yes \ --without-lqr \ --without-djvu \ --without-fftw \ --without-pango \ --without-wmf \ --without-x \ --with-gs-font-dir=${SERVBAY_COMMON_SHARE_PATH}/ghostscript/10.02.1/Resource/Font
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Выполнить
make
иmake install
: Командаmake
соберёт исполняемые и библиотечные файлы. Ключ-j ${CPU_NUMBER}
запускет параллельную сборку. Командаmake install
установит собранные файлы в директории, определённые флагом--prefix
.bashmake -j ${CPU_NUMBER} make install
1
2
Сборка пакета с использованием cmake
Для пакетов, использующих систему сборки cmake
, процесс чуть отличается. Ниже рассмотрим пример сборки protobuf
(Protocol Buffers).
Загрузите исходники protobuf и перейдите в каталог.
Запустите конфигурацию через
cmake
: Ключ-S .
указывает на текущий каталог с исходниками,-B builddir
— на каталог, куда сложатся файлы сборки. Опции с префиксом-D
задают соответствующие директории для установки, аналогично Autotools. Некоторые параметры специфичны для protobuf. Для корректного поиска других библиотек в среде ServBay используются переменные-DCMAKE_MACOSX_RPATH=1
и-DCMAKE_INSTALL_RPATH
.bash# Находимся в каталоге с исходниками protobuf cmake -S . -B builddir \ -DCMAKE_INSTALL_PREFIX=${SERVBAY_COMMON_PATH} \ -DCMAKE_INSTALL_LIBDIR=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_INSTALL_INCLUDEDIR=${SERVBAY_COMMON_INCLUDE_PATH} \ -DCMAKE_INSTALL_BINDIR=${SERVBAY_BIN_PATH} \ -DCMAKE_INSTALL_SBINDIR=${SERVBAY_SBIN_PATH} \ -DCMAKE_INSTALL_SYSCONFDIR=${SERVBAY_ETC_PATH} \ -DCMAKE_INSTALL_DATAROOTDIR=${SERVBAY_COMMON_SHARE_PATH} \ -DCMAKE_MACOSX_RPATH=1 \ -DCMAKE_INSTALL_RPATH=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \ -DCMAKE_PREFIX_PATH=${SERVBAY_COMMON_PATH} \ -DBUILD_SHARED_LIBS=ON \ -Dprotobuf_BUILD_LIBPROTOC=ON \ -Dprotobuf_BUILD_SHARED_LIBS=ON \ -Dprotobuf_INSTALL_EXAMPLES=OFF \ -Dprotobuf_BUILD_TESTS=OFF \ -Dprotobuf_ABSL_PROVIDER=package \ -Dprotobuf_JSONCPP_PROVIDER=module \ -DCMAKE_CXX_STANDARD=17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Выполнить сборку и установку: Используйте
cmake --build builddir
для компиляции иcmake --install builddir
для установки файлов в директории, указанные параметром-DCMAKE_INSTALL_PREFIX
.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Сборка PHP-модуля
Если вам нужно собрать дополнительное расширение для конкретной версии PHP в ServBay (например, swoole
, redis
, mongodb
и др.), обратитесь к специальной инструкции:
Сборка модуля PostgreSQL
Если вам необходимо собрать модуль для определённой версии PostgreSQL, установленной в ServBay, воспользуйтесь специализированным руководством:
Заключение
Благодаря ServBay Development Library и правильно настроенным переменным среды, разработчик может легко выполнять вторичную компиляцию и кастомизацию пакетов на macOS. Это даёт большую гибкость — можно удовлетворить уникальные проектные задачи или использовать самые свежие версии библиотек. Перед компиляцией обязательно внимательно изучите официальную документацию по сборке выбранного пакета и скорректируйте параметры и порядок действий соответственно.