Ponowna kompilacja z ServBay
ServBay oferuje użytkownikom macOS potężne i kompletne lokalne środowisko programistyczne Web, wyposażone w bogaty zestaw pakietów i narzędzi. Oprócz domyślnie instalowanych pakietów, programiści mogą potrzebować dokonać ponownej kompilacji, aby:
- Włączyć specjalne opcje kompilacji dla wybranego pakietu.
- Dodać moduły lub rozszerzenia, których domyślnie nie zawiera ServBay (np. nowe rozszerzenia PHP lub moduły PostgreSQL).
- Skorzystać ze specyficznych wersji bibliotek, innych niż domyślne w ServBay.
- Wprowadzić własne modyfikacje do dostarczanych przez ServBay pakietów.
ServBay dostarcza kompletne środowisko i łańcuch narzędzi, dzięki czemu realizacja takich zadań kompilacyjnych jest prosta i wygodna.
Aby bezproblemowo przeprowadzić ponowną kompilację, użytkownik powinien znać podstawowe procesy kompilacji oprogramowania w środowisku Unix/Linux (takie jak configure
, make
, make install
).
Wymagania wstępne
Przed rozpoczęciem ponownej kompilacji upewnij się, że spełniasz następujące warunki:
Zainstaluj ServBay Development Library: To podstawowa zależność do ponownej kompilacji. Pakiet ten zawiera wszystkie niezbędne pliki bibliotek (
.so
,.a
) i pliki nagłówkowe (.h
) dla środowiska ServBay. Możesz ją zainstalować z poziomu panelu Pakiety w interfejsie aplikacji ServBay.Zainstaluj Xcode Command Line Tools: To podstawowy zestaw narzędzi programistycznych macOS, zawierający kompilator (Clang), linker i inne kluczowe narzędzia. Otwórz Terminal i użyj poniższej komendy, by rozpocząć instalację:
bashxcode-select --install
1Jeśli narzędzia są już zainstalowane, system Cię o tym poinformuje.
Zainstaluj dodatkowe narzędzia kompilacyjne: Do kompilacji większości oprogramowania open source potrzebne są także narzędzia takie jak
autoconf
,automake
,libtool
itd. Najwygodniej zainstalować je przez menedżera pakietów Homebrew:bashbrew install autoconf automake libtool cmake
1Jeśli nie masz jeszcze Homebrew, odwiedź oficjalną stronę Homebrew, aby poznać instrukcje instalacji.
Konfiguracja środowiska kompilacji
Po instalacji ServBay Development Library i innych niezbędnych narzędzi, należy przygotować terminal, ustawiając odpowiednie zmienne środowiskowe, takie jak PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
. Dzięki temu kompilator i system budowania będą wiedziały, gdzie szukać bibliotek, plików nagłówkowych oraz plików wykonywalnych ServBay i poprawnie je powiążą.
Środowisko ServBay jest dostosowane zarówno do komputerów z procesorem Intel (x86_64), jak i Apple Silicon (Arm64). Należy wybrać właściwe polecenia inicjujące środowisko odpowiednie do aktualnej architektury ServBay Runtime.
Jak sprawdzić architekturę CPU ServBay Runtime
Aby to ustalić, sprawdź architekturę dowolnego pliku wykonywalnego w katalogu bin
ServBay, np. bison
:
bash
# Wpisz w terminalu, by sprawdzić architekturę
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# Wpisz w terminalu, by sprawdzić architekturę
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
Gdy już znasz architekturę, wybierz odpowiedni skrypt inicjujący środowisko.
Inicjowanie zmiennych środowiskowych dla kompilacji
Otwórz nowe okno terminala, a następnie skopiuj i wklej poniższy skrypt właściwy dla Twojej architektury procesora. Skrypty te ustalą wszystkie niezbędne dla środowiska ServBay ścieżki i flagi.
bash
# Ustaw liczbę rdzeni CPU, do kompilacji równoległej
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Lokalizacja bazowa instalacji ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nazwa katalogu z pakietami
SERVBAY_PACKAGE_DIR_NAME="package"
# Ścieżka do pakietów
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Ścieżki do plików binarnych
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Ścieżka do plików konfiguracyjnych
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Ścieżka do danych zmiennych
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Ścieżka instalacji ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Ścieżka nagłówków Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Ścieżka bibliotek 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"
# Bieżący katalog budowy
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informacje o wersji OpenSSL
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Minimalna wersja macOS do budowy
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey lub nowszy
# Flaga architektury CPU
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Dla Arm64 zwykle niepotrzebne
# Flagi kompilatora C: poziom optymalizacji, minimalny macOS, architektura
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Flagi linkera: rpath, -L, minimalny macOS, architektura
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}"
# Flagi preprocesora C i CXX: ścieżka do nagłówków
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Flagi kompilatora C++: jak CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# PATH: najpierw bin/sbin ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Ścieżka pkg-config: dla info o bibliotekach
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Ścieżka do narzędzia pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Katalog pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Systemowe i Homebrew PATH na końcu
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # domyślna lokalizacja Homebrew
# Dodaj OpenSSL do LDFLAGS i 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}"
# Dodaj ścieżkę 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"
# Po ustawieniu zmiennych środowiskowych można kompilować w tym oknie terminala
echo "Środowisko kompilacji ServBay Arm64 zostało skonfigurowane."
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
# Ustaw liczbę rdzeni CPU, do kompilacji równoległej
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Lokalizacja bazowa instalacji ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nazwa katalogu z pakietami
SERVBAY_PACKAGE_DIR_NAME="package"
# Ścieżka do pakietów
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Ścieżki do plików binarnych
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Ścieżka do plików konfiguracyjnych
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Ścieżka do danych zmiennych
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Ścieżka instalacji ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Ścieżka nagłówków Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Ścieżka bibliotek 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"
# Bieżący katalog budowy
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informacje o wersji OpenSSL
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Minimalna wersja macOS do budowy
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey lub nowszy
# Flaga architektury CPU
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Flaga docelowej platformy (Intel zwykle wymaga podania)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# Flagi kompilatora C: poziom optymalizacji, minimalny macOS, architektura, docelowa platforma
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Flagi linkera: rpath, -L, minimalny macOS, architektura, docelowa platforma
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}"
# Flagi preprocesora C i CXX: ścieżka do nagłówków
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Flagi kompilatora C++: jak CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# PATH: najpierw bin/sbin ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Ścieżka pkg-config: dla info o bibliotekach
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Ścieżka do narzędzia pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Katalog pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Systemowe i Homebrew PATH na końcu
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # domyślna lokalizacja Homebrew
# Dodaj OpenSSL do LDFLAGS i 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}"
# Dodaj ścieżkę 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"
# Po ustawieniu zmiennych środowiskowych można kompilować w tym oknie terminala
echo "Środowisko kompilacji ServBay x86_64 zostało skonfigurowane."
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
Ważne: Te zmienne środowiskowe są aktywne tylko dla bieżącej sesji terminala. Po zamknięciu terminala lub otwarciu nowego okna trzeba ponownie je ustawić, uruchamiając powyższy skrypt.
Przykładowa kompilacja
Po ustawieniu środowiska, możesz pobrać kod źródłowy i skompilować wybrane pakiety. Oto kilka popularnych przykładów:
Kompilacja ImageMagick
ImageMagick to zaawansowana biblioteka do obróbki obrazów, będąca zależnością rozszerzenia PHP imagick
. ServBay domyślnie instalują ten pakiet, więc nie ma zwykle potrzeby ręcznej kompilacji. Poniższy przykład pokazuje ogólne zasady kompilowania typowego projektu Autotools (configure/make) w środowisku ServBay.
Pobierz źródła ImageMagick i rozpakuj:
bash# W razie potrzeby wstaw najnowszą wersję 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
4Uruchom skrypt
./configure
: Posługując się ustawionymi wcześniej zmiennymi środowiskowymi, uruchom configure ze wskazaniem ścieżek docelowych ServBay Development Library (${SERVBAY_COMMON_PATH}
i podkatalogów). Dzięki temu inne aplikacje ServBay (np. rozszerzenie PHPimagick
) poprawnie odnajdą zainstalowane biblioteki i nagłówki. Pozostałe opcje konfiguracyjne zależą od preferencji dotyczących 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
30Wykonaj
make
imake install
: Poleceniemake
buduje pliki wykonywalne i biblioteki wedle konfiguracji. Argument-j ${CPU_NUMBER}
pozwala na szybszą budowę na wielu rdzeniach. Poleceniemake install
zainstaluje pakiet do katalogu wskazanego w--prefix
.bashmake -j ${CPU_NUMBER} make install
1
2
Kompilacja pakietów z użyciem cmake
Jeśli używasz systemu budowania opartego o cmake
(np. library protobuf
), proces wygląda nieco inaczej. Poniżej przykład dla Protocol Buffers.
Pobierz źródła protobuf i przejdź do katalogu z kodem.
Skonfiguruj projekt z użyciem
cmake
:-S .
oznacza katalog źródłowy,-B builddir
katalog docelowy z plikami budowy. Opcja-DCMAKE_INSTALL_PREFIX
(i podobne) wskazuje katalogi ServBay Development Library. Inne opcje-D*
służą specyficznym konfiguracjom protobuf. Parametry dotyczące RPATH (-DCMAKE_MACOSX_RPATH=1
itd.) zapewniają, że zbudowana biblioteka będzie poprawnie odnajdywać zależności w środowisku ServBay.bash# Zakładamy, że jesteś już w katalogu źródłowym 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
21Budowanie oraz instalacja: Polecenie
cmake --build builddir
uruchamia proces kompilacji, natomiastcmake --install builddir
instaluje pakiety do katalogów wskazanych w konfiguracji.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Kompilacja modułów PHP
Aby zbudować dodatkowe rozszerzenia PHP (np. swoole
, redis
, mongodb
), dedykowana dokumentacja dostępna jest tutaj:
Kompilacja modułów PostgreSQL
Informacje o kompilacji dodatkowych modułów PostgreSQL dla wybranej wersji dostępne są tutaj:
Jak kompilować moduły PostgreSQL
Podsumowanie
Dzięki ServBay Development Library i kompleksowej konfiguracji środowiska, programiści mogą bez trudu ponownie kompilować i dostosowywać pakiety na macOS. Zapewnia to elastyczność przy realizacji specyficznych wymagań projektowych lub podczas korzystania z najnowszych wersji bibliotek. Przed kompilacją, warto szczegółowo zapoznać się z oficjalną dokumentacją wybranego pakietu oraz odpowiednio dostosować opcje i kroki instalacji.