ServBay ile İkincil Derleme
ServBay, macOS kullanıcıları için güçlü ve kapsamlı bir yerel web geliştirme ortamı sunar; içerisinde çok sayıda yazılım paketi ve araç yer alır. ServBay ile önceden yüklenmiş olan yazılım paketlerinin dışında, geliştiriciler bazen belirli ihtiyaçlar doğrultusunda kendi derlemelerini yapmak isteyebilirler. Örneğin:
- Bir paketin derleme seçeneklerini özelleştirmek.
- ServBay'in varsayılan olarak içermediği (yeni bir PHP eklentisi, PostgreSQL modülü gibi) bir modül veya uzantıyı eklemek.
- ServBay'in varsayılanından farklı özel kütüphaneleri kullanarak derleme yapmak.
- ServBay tarafından sunulan paketi, özel ihtiyaçlara göre değiştirmek.
ServBay, bu tür ikincil derleme işlemleri için gerekli ortamı ve araç zincirini sağlar ve kullanıcıların bu işlemleri kolayca gerçekleştirmesine olanak tanır.
Başarılı bir şekilde ikincil derleme yapabilmek için, Unix/Linux ortamında yazılımın derlenme aşamalarına (configure
, make
, make install
gibi) temel aşinalığınız olması gerekmektedir.
Ön Koşullar
İkincil derlemeye başlamadan önce aşağıdaki gereksinimlerin karşılandığından emin olun:
ServBay Development Library'nin Kurulması: Bu, ikincil derlemenin çekirdek bağımlılığını oluşturur. Paket, ServBay ortamında derleme için gerekli olan tüm kütüphane dosyalarını (
.so
,.a
), başlık dosyalarını (.h
) ve diğer geliştirme kaynaklarını içerir. ServBay uygulamasının Yazılım Paketleri paneli üzerinden kolayca kurabilirsiniz.Xcode Command Line Tools Kurulumu: macOS'un sağladığı temel geliştirme araç setidir; compiler (Clang), linker vb. içerir. Terminali açıp şu komutu çalıştırın:
bashxcode-select --install
1Eğer daha önce kurduysanız, sistem sizi bilgilendirecektir.
Ek derleme araçları kurulumu: Çoğu açık kaynak yazılımı derleyebilmek için
autoconf
,automake
,libtool
gibi araçlara ihtiyacınız olacak. Bunları genellikle Homebrew paket yöneticisiyle kurabilirsiniz:bashbrew install autoconf automake libtool cmake
1Eğer Homebrew yüklü değilse, resmi web sitesindeki yönergeleri takip edin.
Derleme Ortamını Ayarlama
ServBay Development Library ve diğer gerekli araçlar kurulduktan sonra, terminalinizde derleme ortamını başlatmanız gerekir. Bu adımda, derleyiciye ve yapı sistemine ServBay'in kütüphane, başlık ve ikili dosyalarının yolunu bildiren çeşitli ortam değişkenleri (PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
gibi) ayarlanır.
ServBay çalışma ortamı, Mac'inizin CPU mimarisine göre Intel (x86_64) ve Apple Silicon (Arm64) olarak ayrılır. Şu anda kullandığınız ServBay Runtime'a göre doğru ortam başlatma komutunu seçmelisiniz.
ServBay Runtime'ın CPU Mimarisi Nasıl Kontrol Edilir
ServBay'in bin
dizininde herhangi bir çalıştırılabilir dosyanın mimarisini kontrol ederek öğrenebilirsiniz. Örneğin, bison
komutunu kontrol edin:
# Kontrol için terminalde şu komutu çalıştırın
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
2
3
# Kontrol için terminalde şu komutu çalıştırın
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
2
3
Mimariden emin olduktan sonra, uygun ortam başlatma komutunu seçin.
Derleme Ortamı Değişkenlerini Başlatma
Yeni bir terminal penceresi açın ve aşağıda kendi CPU mimariniz için verilen script'i kopyalayıp yapıştırarak çalıştırın. Bu script'ler, ServBay'de derleme için gereken tüm değişken ve yolları otomatik olarak ayarlar.
# Paralel derleme için CPU çekirdek sayısını ayarla
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay ana dizin yolu
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Paket dizini adı
SERVBAY_PACKAGE_DIR_NAME="package"
# Paket tam yolu
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay ikili dosya dizini yolu
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay yapılandırma dosyası yolu
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay veri dosyası yolu
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library yolu
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Head file (include) yolu
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Kütüphane dosyaları yolu
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"
# Mevcut derleme dizini
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL sürüm bilgisi
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Hedef macOS min. sürümü
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey veya üstü
# Derleme CPU mimarisi flag'i
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64 için genelde gerek yok
# C derleyici bayraklarını ayarla
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Bağlayıcı bayraklarını ayarla
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}"
# Ön işlemci ve CXX derleyici bayrakları
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++ derleyici bayrakları
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# PATH ayarla: öncelikli olarak ServBay'in bin/sbin dizinleri
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config yolu
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"
# Sistemin ve Homebrew'un bin/sbin dizinlerini PATH'e ekle
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew default yolu
# OpenSSL kütüphane ve başlık yolunu LDFLAGS ve CPPFLAGS'a ekle
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 dizinini de ekle
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"
# Ortam değişkenleri başarıyla ayarlandıysa artık bu terminalde derleme yapabilirsiniz
echo "ServBay Arm64 derleme ortamı ayarlandı."
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
# Paralel derleme için CPU çekirdek sayısını ayarla
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay ana dizin yolu
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Paket dizini adı
SERVBAY_PACKAGE_DIR_NAME="package"
# Paket tam yolu
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay ikili dosya dizini yolu
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay yapılandırma dosyası yolu
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay veri dosyası yolu
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library yolu
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Head file (include) yolu
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Kütüphane dosyaları yolu
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"
# Mevcut derleme dizini
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL sürüm bilgisi
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Hedef macOS min. sürümü
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey veya üstü
# Derleme CPU mimarisi flag'i
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Intel için genellikle hedef platform belirtilmeli
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# C derleyici bayraklarını ayarla
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Bağlayıcı bayraklarını ayarla
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}"
# Ön işlemci ve CXX derleyici bayrakları
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++ derleyici bayrakları
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# PATH ayarla: öncelikli olarak ServBay'in bin/sbin dizinleri
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config yolu
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"
# Sistemin ve Homebrew'un bin/sbin dizinlerini PATH'e ekle
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew default yolu
# OpenSSL kütüphane ve başlık yolunu LDFLAGS ve CPPFLAGS'a ekle
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 dizinini de ekle
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"
# Ortam değişkenleri başarıyla ayarlandıysa artık bu terminalde derleme yapabilirsiniz
echo "ServBay x86_64 derleme ortamı ayarlandı."
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
Önemli Not: Bu ortam değişkenleri yalnızca mevcut terminal oturumunda geçerlidir. Terminali kapattığınızda veya yeni bir pencere açtığınızda derleme ortamını tekrar yukarıdaki script ile başlatmalısınız.
Derleme Örnekleri
Derleme ortamınızı ayarladığınız terminalde artık kaynak kodunu indirip derleme işlemine başlayabilirsiniz. İşte yaygın birkaç örnek.
ImageMagick Derlemek
ImageMagick, PHP imagick
uzantısı için gereken güçlü bir görsel işleme kütüphanesidir. ServBay'in varsayılan kurulumunda ImageMagick zaten gelir ve genellikle ek derleme gerekmez. Ancak burada örnek olarak tipik bir Autotools (configure/make) projesinin ServBay ortamında nasıl derleneceğini göstereceğiz.
ImageMagick kaynak kodunu indirip çıkarın:
bash# İhtiyacınıza göre en güncel sürümü indiriniz 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
script'ini çalıştırın: Ortam değişkenlerinizin doğru ayarlandığından emin olun, ardından configure script'ini çalıştırın.--prefix
,--libdir
,--includedir
gibi seçenekler ile kurulum yollarını ServBay Development Library'nin ortak dizinine (${SERVBAY_COMMON_PATH}
ve alt dizinlerine) yönlendirin. Böylece derlenen kütüphaneler ve başlık dosyalarına ServBay'in diğer yazılımları (ör. PHPimagick
eklentisi) erişebilir. Diğer seçenekler ImageMagick'in ihtiyaçlarına göre ayarlanmıştır.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
30make
vemake install
çalıştırın:make
komutu, yapılandırma sırasında seçilen ayarlara göre kaynak kodunu derler.-j ${CPU_NUMBER}
çok çekirdekli CPU'nuzdan yararlanır ve derlemeyi hızlandırır.make install
ise derlenen dosyaları belirtilen dizine yükler.bashmake -j ${CPU_NUMBER} make install
1
2
cmake ile Paket Derlemek
cmake
tabanlı paketler için derleme süreci biraz farklıdır. Burada örnek olarak protobuf
(Protocol Buffers) kullanılmıştır.
protobuf kaynak kodunu indirip dizine girin.
cmake
ile projeyi yapılandırın:-S .
kaynak kodu dizini olarak mevcut dizini,-B builddir
ise derleme dosyalarının oluşturulacağı dizini belirtir.-DCMAKE_INSTALL_PREFIX
ve benzeri seçenekler, kurulum yolunu ServBay Development Library dizinine yönlendirir. Diğer-D
seçenekleri protobuf'a özgü tercihleri ayarlar.-DCMAKE_MACOSX_RPATH=1
ve-DCMAKE_INSTALL_RPATH
ise derlenmiş kütüphanelerin ServBay'deki diğer kütüphaneleri sorunsuzca bulabilmesini sağlar.bash# protobuf kaynak kodu dizinine girdiğinizi varsayıyoruz 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
21cmake --build
vecmake --install
çalıştırın:cmake --build builddir
komutuyla derleme işlemi başlar, ardındancmake --install builddir
ile derlenmiş dosyalar belirtilen hedef dizine yüklenir.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
PHP Modülü Derlemek
Eğer ServBay içindeki PHP'nin bir sürümüne ek eklenti/modül (swoole
, redis
, mongodb
gibi) derlemek isterseniz, lütfen şu özel dökümana bakınız:
PostgreSQL Modülü Derlemek
Eğer ServBay içinde herhangi bir PostgreSQL sürümüne ek modül derlemeniz gerekiyorsa, şu belgeyi inceleyin:
PostgreSQL Modülü Nasıl Derlenir
Sonuç
ServBay Development Library ve ortam değişkenlerinin eksiksiz ayarı sayesinde, geliştiriciler macOS ortamında yazılım paketlerini kolayca özelleştirebilir ve ikincil derleme yapabilir. Bu esneklik, projenizin özel gereksinimlerini karşılamanıza ve en güncel kütüphaneleri kullanmanıza olanak tanır. Paketin resmi derleme yönergelerini mutlaka inceleyin ve adımları gereğine göre uyarlayın.