Opnieuw compileren met ServBay
ServBay biedt macOS-gebruikers een krachtige en complete lokale webontwikkelomgeving, inclusief een rijk aanbod aan softwarepakketten en tools. Naast de vooraf geïnstalleerde softwareversies van ServBay kan het nodig zijn voor ontwikkelaars om voor specifieke doeleinden een pakket opnieuw te compileren, bijvoorbeeld:
- Specifieke compileeropties inschakelen voor een bepaald pakket.
- Modules of extensies toevoegen die standaard niet door ServBay worden meegeleverd (zoals nieuwe PHP-extensies of PostgreSQL-modules).
- Compileren met een specifieke libraryversie die anders is dan de standaardversie van ServBay.
- Softwarepakketten van ServBay aanpassen op maat.
ServBay biedt hiervoor de benodigde compileeromgeving en toolchain, zodat gebruikers deze recompilatie-taken eenvoudig kunnen uitvoeren.
Voor een soepel verloop van het hercompileren is het noodzakelijk dat gebruikers de basisprincipes van het compileren van software in een Unix/Linux-omgeving kennen (zoals configure
, make
, make install
).
Vereisten
Voordat je begint met recompileren, zorg ervoor dat je aan de volgende voorwaarden voldoet:
ServBay Development Library installeren: Deze bibliotheek is de kern voor het opnieuw compileren en bevat alle benodigde library-bestanden (
.so
,.a
), header-files (.h
) en andere ontwikkelmiddelen voor de ServBay-omgeving. Je vindt en installeert deze via het Softwarepakket-paneel in de ServBay-app.Xcode Command Line Tools installeren: Dit is de basis set van ontwikkeltools voor macOS, inclusief de compiler (Clang), linker en andere essentiële hulpmiddelen. Open de terminal en voer het volgende commando uit om te installeren:
bashxcode-select --install
1Als de tools al geïnstalleerd zijn zal het systeem dit melden.
Extra build tools installeren: Om de meeste open-source software te kunnen compileren heb je ook
autoconf
,automake
,libtool
en andere tools nodig. Meestal installeer je deze eenvoudig met Homebrew package manager:bashbrew install autoconf automake libtool cmake
1Indien Homebrew nog niet is geïnstalleerd, volg dan de instructies op de officiële Homebrew-website.
Compileeromgeving instellen
Na het installeren van de ServBay Development Library en de benodigde tools, dien je het terminalcompileermilieu te initialiseren. Hierbij worden omgevingsvariabelen (zoals PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
) ingesteld zodat de compiler en het build-systeem weten waar de libraries, headerbestanden en uitvoerbare bestanden van ServBay staan, en om afhankelijkheden correct te kunnen linken.
De runtimeomgeving van ServBay verschilt per CPU-architectuur van je Mac: Intel-chip (x86_64) of Apple Silicon-chip (Arm64). Kies het juiste initialisatiescript volgens de ServBay Runtime-architectuur.
De CPU-architectuur van ServBay Runtime controleren
Je kan de architectuur controleren door te kijken naar een willekeurig uitvoerbaar bestand in de bin
-map van ServBay, bijvoorbeeld bison
:
bash
# Voer in de terminal het volgende commando uit ter controle
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# Voer in de terminal het volgende commando uit ter controle
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
Na het controleren van de architectuur kies je het bijbehorende initialisatiescript voor het compileermilieu.
Compileeromgeving variabelen initialiseren
Open een nieuw terminalvenster en kopieer en plak het script dat past bij jouw CPU-architectuur hieronder. Deze scripts zetten alle benodigde paden en flags voor de ServBay compileeromgeving.
bash
# Aantal CPU-kernen bepalen, voor parallelle compilatie
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Basispad van de ServBay-installatie
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Naam van de pakketmap
SERVBAY_PACKAGE_DIR_NAME="package"
# Volledig pakketpad
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Paden naar ServBay-binaries
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Paden naar configuratiebestanden
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Pad naar variabele data
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Installatiepad van de ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Pad naar de header-files van de ServBay Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Pad naar de library-bestanden
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"
# Huidige build-directory
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL versie-informatie
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Minimale doelversie voor het OS
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey of hoger
# Architectuurflags
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64 vereist meestal geen -target flag
# C compilerflags instellen: optimalisatie, minimale macOS-versie, architectuur
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Linkerflags: rpath, library-paden, minimale versie, architectuur
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 preprocessor en CXX flags: header-bestanden
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++ compilerflags
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Uitvoerbare zoekpaden, ServBay krijgt prioriteit
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config paden
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"
# Systeem- en Homebrew paden toevoegen als alternatieven
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Standaard Homebrew-pad
# OpenSSL library- en header-pad toevoegen aan LDFLAGS en 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}"
# OpenSSL pkgconfig pad toevoegen
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"
# Je kunt nu binnen deze terminal compileren
echo "ServBay Arm64 compileeromgeving ingesteld."
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
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
bash
# Aantal CPU-kernen bepalen, voor parallelle compilatie
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Basispad van de ServBay-installatie
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Naam van de pakketmap
SERVBAY_PACKAGE_DIR_NAME="package"
# Volledig pakketpad
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Paden naar ServBay-binaries
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Paden naar configuratiebestanden
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Pad naar variabele data
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Installatiepad van de ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Pad naar de header-files van de ServBay Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Pad naar de library-bestanden
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"
# Huidige build-directory
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL versie-informatie
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Minimale doelversie voor het OS
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey of hoger
# Architectuurflags
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Target platform flag (Intel vereist meestal -target)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# C compilerflags instellen: optimalisatie, minimale macOS-versie, architectuur, target
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Linkerflags: rpath, library-paden, minimale versie, architectuur, target
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 preprocessor en CXX flags: header-bestanden
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++ compilerflags
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Uitvoerbare zoekpaden, ServBay krijgt prioriteit
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config paden
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"
# Systeem- en Homebrew paden toevoegen als alternatieven
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Standaard Homebrew-pad
# OpenSSL library- en header-pad toevoegen aan LDFLAGS en 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}"
# OpenSSL pkgconfig pad toevoegen
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"
# Je kunt nu binnen deze terminal compileren
echo "ServBay x86_64 compileeromgeving ingesteld."
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
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
Belangrijk: Deze omgevingsvariabelen zijn alleen geldig in de huidige terminalsessie. Als je het terminalvenster sluit of een nieuwe opent, dien je het juiste script opnieuw uit te voeren om de compileeromgeving weer in te stellen.
Voorbeelden van compilatie
Met de ingestelde compileeromgeving kun je nu broncode downloaden en compileren. Hieronder volgen enkele veelvoorkomende compilatievoorbeelden.
ImageMagick compileren
ImageMagick is een krachtige beeldverwerkingsbibliotheek en een vereiste voor de PHP imagick
-extensie. ImageMagick is standaard meegeleverd met ServBay, waardoor handmatig compileren meestal niet nodig is. Dit voorbeeld is slechts ter illustratie van het gebruik van de ServBay-omgeving met een typisch Autotools (configure/make) project.
Download de ImageMagick-broncode en pak deze uit:
bash# Vervang dit desgewenst door het nieuwste versienummer 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
4Voer het
./configure
script uit: Gebruik de eerder ingestelde omgevingsvariabelen bij het uitvoeren van het configure-script. Opties zoals--prefix
,--libdir
,--includedir
bepalen het installatiepad, en worden hier ingesteld op het publieke pad${SERVBAY_COMMON_PATH}
van de ServBay Development Library en bijhorende submappen. Zo kunnen andere pakketten in ServBay (zoals de PHPimagick
-extensie) de libraries en header-bestanden vinden. Overige opties zijn project-specifiek.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
30Voer
make
enmake install
uit: Hetmake
-commando compileert de benodigde binaries en libraries. De flag-j ${CPU_NUMBER}
benut alle CPU-kernen voor sneller compileren. Metmake install
installeer je in het (via--prefix
opgegeven) ServBay Development Library-pad.bashmake -j ${CPU_NUMBER} make install
1
2
Compileren van software met cmake
Voor pakketten die cmake
als build-systeem gebruiken, werkt de workflow iets anders. Onderstaand een voorbeeld met protobuf
(Protocol Buffers).
Download de protobuf-broncode en ga naar de map.
Project configureren met
cmake
:-S .
geeft aan dat de source directory de huidige directory is,-B builddir
betekent dat de buildbestanden inbuilddir
komen.-DCMAKE_INSTALL_PREFIX
en andere opties zijn vergelijkbaar met--prefix
uit Autotools: het installatiepad wordt ingesteld op de ServBay Development Library. De-D
-opties zijn specifiek voor de configuratie van protobuf.-DCMAKE_MACOSX_RPATH=1
en-DCMAKE_INSTALL_RPATH
zorgen ervoor dat gelinkte libraries gevonden worden.bash# Ga uit van de protobuf source-directory 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
21Bouw en installeer met
cmake --build
encmake --install
:cmake --build builddir
compileert in de mapbuilddir
.cmake --install builddir
installeert de bestanden naar het ingestelde-DCMAKE_INSTALL_PREFIX
pad.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
PHP-modules compileren
Wil je extra PHP-extensies (zoals swoole
, redis
, mongodb
, enz.) toevoegen aan een PHP-versie in ServBay, raadpleeg dan de aparte handleiding:
PostgreSQL-modules compileren
Wil je extra modules toevoegen aan een bepaalde versie van PostgreSQL in ServBay, raadpleeg dan de speciale handleiding:
Samenvatting
Met de ServBay Development Library en het zorgvuldig instellen van omgevingsvariabelen kunnen ontwikkelaars op macOS eenvoudig softwarepakketten opnieuw compileren en aanpassen. Dit biedt maximale flexibiliteit om te voldoen aan specifieke projectvereisten of het integreren van de laatste libraryversies. Lees voor aanvang altijd aandachtig de officiële buildinstructies van het softwarepakket en pas indien nodig de configuratie stap-voor-stap aan op basis van de vereiste specificaties.