Вторинна компіляція з ServBay
ServBay пропонує потужне та повноцінне локальне веб-середовище розробки для користувачів macOS із великим набором попередньо встановлених пакетів і інструментів. Окрім стандартних версій пакетів, що входять до складу ServBay, іноді розробникам потрібно здійснити вторинну компіляцію для досягнення спеціальних цілей, зокрема:
- Увімкнення певних опцій компіляції для обраного пакету.
- Додавання модулів чи розширень, які не включені за замовчуванням у ServBay (наприклад, нові розширення PHP чи модулі PostgreSQL).
- Використання специфічних бібліотек відмінних від стандартних версій у ServBay.
- Персоналізація або модифікація програмних пакетів, що входять до ServBay.
ServBay забезпечує всі необхідні інструменти та середовище для компіляції, що дозволяє легко виконувати подібні завдання.
Для успішної вторинної компіляції бажано мати базові знання щодо процесу складання програм у середовищі Unix/Linux (configure
, make
, make install
).
Передумови
Перед тим, як почати перекомпіляцію, переконайтеся, що виконані наступні умови:
Встановлення ServBay Development Library: Це ключова залежність для перекомпіляції. Бібліотека містить усі необхідні файли для компіляції у середовищі ServBay: бібліотеки (
.so
,.a
), заголовки (.h
) та додаткові інструменти. Ви можете знайти та встановити пакет у розділі Пакети додатку 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 та інших утиліт потрібно ініціалізувати змінні середовища у терміналі. Це налаштовує змінні (PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
), які вказують компілятору та будівельній системі, де знаходяться необхідні бібліотеки, заголовки та виконувані файли ServBay.
ServBay розрізняє архітектури процесорів вашого Mac: Intel (x86_64) та Apple Silicon (Arm64). Виберіть відповідну команду ініціалізації середовища відповідно до архітектури поточного запуску ServBay.
Перевірка архітектури CPU для середовища ServBay Runtime
Ви можете перевірити архітектуру, переглянувши один із виконуваних файлів у каталозі bin
ServBay. Наприклад, для bison
:
bash
# Виконайте цю команду у терміналі
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# Виконайте цю команду у терміналі
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
Визначивши архітектуру, виберіть відповідний скрипт для ініціалізації середовища.
Ініціалізація змінних середовища для компіляції
Відкрийте нове вікно терміналу, скопіюйте один із наведених нижче скриптів відповідно до архітектури CPU та вставте для виконання. Скрипти задають необхідні шляхи та параметри для компіляції у ServBay.
bash
# Встановити кількість ядер для паралельної компіляції
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"
# Шлях до заголовочних файлів Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Шлях до бібліотек Development Library
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"
# Мінімальна версія macOS для складання
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, шляхи бібліотек (-L), мінімальна версія 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}"
# Прапори для препроцесора та компілятора CXX: шляхи заголовків (-I)
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Прапори для компілятора C++: як для CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Шлях до виконуваних файлів: пріоритет ServBay bin/sbin
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"
# Шлях до інструменту pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Каталог бібліотек для pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Додати системні та Homebrew bin/sbin у PATH як резерв
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # типовий шлях Homebrew
# Додати шляхи OpenSSL до LDFLAGS та CPPFLAGS
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 налаштовано."
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
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
64
65
66
67
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
64
65
66
67
bash
# Встановити кількість ядер для паралельної компіляції
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"
# Шлях до заголовочних файлів Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Шлях до бібліотек Development Library
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"
# Мінімальна версія macOS для складання
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey або новіше
# Прапор архітектури CPU
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Прапор цільової платформи (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, шляхи бібліотек (-L), мінімальна версія 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}"
# Прапори для препроцесора та компілятора CXX: шляхи заголовків (-I)
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Прапори для компілятора C++: як для CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Шлях до виконуваних файлів: пріоритет ServBay bin/sbin
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"
# Шлях до інструменту pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Каталог бібліотек для pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Додати системні та Homebrew bin/sbin у PATH як резерв
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # типовий шлях Homebrew
# Додати шляхи OpenSSL до LDFLAGS та CPPFLAGS
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 налаштовано."
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
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
64
65
66
67
68
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
64
65
66
67
68
Важливо: ці змінні середовища діють лише для поточної сесії терміналу. При його закритті чи відкритті нового вікна необхідно повторно виконати скрипт для налаштування середовища компіляції.
Приклади компіляції
У налаштованому середовищі компіляції можна завантажувати та збирати вихідний код. Нижче наведено кілька типових прикладів.
Компіляція ImageMagick
ImageMagick — потужна бібліотека для обробки зображень, необхідна для розширення PHP imagick
. 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_COMMON_PATH}
та похідні), аби ними могли скористатися інші компоненти середовища (наприклад, розширення 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
встановлює зібрані файли у вказану директорію ServBay Development Library.bashmake -j ${CPU_NUMBER} make install
1
2
Компіляція програм із використанням cmake
Для проектів, що використовують систему складання cmake
, процес трохи інший. Розглянемо на прикладі protobuf
(Protocol Buffers):
Завантажте код protobuf і перейдіть у його директорію.
Налаштуйте проект за допомогою
cmake
: Параметр-S .
— поточна директорія з вихідними файлами,-B builddir
— каталог для збірки. Опції-DCMAKE_INSTALL_PREFIX
тощо відповідають за встановлення у потрібні каталоги ServBay Development Library. Додаткові параметри-D
стосуються специфіки складання protobuf. Опції-DCMAKE_MACOSX_RPATH=1
та-DCMAKE_INSTALL_RPATH
потрібні, щоб бібліотеки після компіляції правильно знаходили інші бібліотеки у середовищі ServBay.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
таcmake --install
:cmake --build builddir
здійснює збірку в директорії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 також передбачена окрема інструкція:
Як компілювати модулі PostgreSQL
Висновок
Завдяки Development Library від ServBay і гнучкому налаштуванню змінних середовища розробник може без труднощів здійснювати вторинну компіляцію та персоналізацію програмних пакетів на macOS. Це відкриває широкі можливості для адаптації під специфічні вимоги проекту чи використання найновіших версій бібліотек. Перед компіляцією обов'язково ознайомтесь із офіційною документацією пакетів і коригуйте налаштування згідно з їхніми вимогами.