Recompilando com o ServBay
O ServBay oferece aos usuários do macOS um ambiente local de desenvolvimento web, robusto e completo, com diversos pacotes e ferramentas prontas para uso. Apesar dos pacotes pré-instalados pelo ServBay, desenvolvedores podem, por vezes, precisar de uma recompilação personalizada para atender requisitos específicos, como:
- Habilitar opções de compilação específicas em determinados pacotes.
- Adicionar módulos ou extensões que não vêm incluídos por padrão no ServBay (como novas extensões PHP ou módulos PostgreSQL).
- Compilar utilizando versões/outras bibliotecas diferentes das fornecidas por padrão no ServBay.
- Fazer modificações personalizadas nos pacotes fornecidos pelo ServBay.
O ServBay traz todo o ambiente de compilação e as ferramentas necessárias para que o usuário realize estas tarefas de recompilação de maneira prática.
Para um uso efetivo deste processo, recomenda-se conhecimentos básicos sobre compilação de softwares em ambiente Unix/Linux (configure
, make
, make install
).
Pré-requisitos
Antes de iniciar a recompilação, certifique-se de atender aos requisitos abaixo:
Instale a ServBay Development Library: Este é o principal componente para quem deseja recompilar. Ele contém todas as bibliotecas (
.so
,.a
), arquivos de cabeçalho (.h
) e demais recursos necessários para compilação dentro do ambiente ServBay. A instalação pode ser feita pelo painel de Pacotes no aplicativo do ServBay.Instale o Xcode Command Line Tools: Este é o conjunto básico de ferramentas de desenvolvimento do macOS, incluindo compilador (Clang), linker e outros. Instale via terminal com:
bashxcode-select --install
1Se já estiver instalado, o sistema exibirá uma mensagem informando.
Instale ferramentas extras de compilação: Para compilar a maioria dos softwares open source, instale também
autoconf
,automake
,libtool
e outros via Homebrew:bashbrew install autoconf automake libtool cmake
1Caso ainda não tenha o Homebrew instalado, consulte o site oficial para instalá-lo primeiro.
Configurando o ambiente de compilação
Com a ServBay Development Library e as ferramentas necessárias instaladas, é preciso inicializar o ambiente de compilação no terminal. Esta etapa consiste em exportar variáveis de ambiente (PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
etc.), direcionando o compilador e o sistema de build para os diretórios corretos do ServBay, onde estão as bibliotecas, cabeçalhos e binários.
O ambiente do ServBay varia de acordo com a arquitetura do processador do seu Mac: Intel (x86_64) ou Apple Silicon (Arm64). Siga a configuração que corresponde à arquitetura do ServBay Runtime no seu sistema.
Verificando a arquitetura do ServBay Runtime
Você pode descobrir a arquitetura verificando qualquer executável na pasta bin
do ServBay. Por exemplo, verifique o bison
:
# Execute este comando no terminal para verificar
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
2
3
# Execute este comando no terminal para verificar
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
2
3
Depois de identificar a arquitetura, escolha o script de inicialização de ambiente correspondente.
Inicializando variáveis do ambiente de compilação
Abra um novo terminal e copie o script correspondente à sua arquitetura de CPU. Estes scripts definem todos os caminhos e flags necessários para compilar com o ambiente do ServBay.
# Define o número de núcleos da CPU para compilação paralela
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Caminho base do ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nome do diretório de pacotes
SERVBAY_PACKAGE_DIR_NAME="package"
# Caminho completo dos pacotes
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Caminhos dos binários ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Caminho dos arquivos de configuração
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Caminho dos arquivos de variáveis
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Caminho da Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Diretório de includes (headers)
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Diretório de bibliotecas
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"
# Diretório de build atual
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informações da versão do OpenSSL
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Versão mínima do macOS para build
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey ou mais recente
# Flag de arquitetura
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64 geralmente não precisa da flag -target
# Definição de flags do compilador C: otimização, versão mínima do macOS, arquitetura
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Flags do linker: rpath, caminhos das bibliotecas, versão do macOS, arquitetura
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}"
# Flags do pré-processador/compilador: caminho dos headers
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Flags do compilador C++: igual ao CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# PATH: prioriza binários do ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Caminho do pkg-config para encontrar informações de bibliotecas
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Caminho do executável pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Diretório da pkg-config library
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Adiciona Homebrew e outros ao PATH para fallback
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Caminho padrão do Homebrew
# Adiciona OpenSSL aos caminhos de headers e bibliotecas
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 do 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"
# Ao finalizar, você já pode compilar seus projetos nesta janela de terminal
echo "Ambiente de compilação ServBay Arm64 configurado."
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
# Define o número de núcleos da CPU para compilação paralela
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Caminho base do ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nome do diretório de pacotes
SERVBAY_PACKAGE_DIR_NAME="package"
# Caminho completo dos pacotes
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Caminhos dos binários ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Caminho dos arquivos de configuração
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Caminho dos arquivos de variáveis
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Caminho da Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Diretório de includes (headers)
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Diretório de bibliotecas
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"
# Diretório de build atual
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informações da versão do OpenSSL
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Versão mínima do macOS para build
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey ou mais recente
# Flag de arquitetura
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Flag de target do Intel, normalmente necessária
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# Definição de flags do compilador C: otimização, versão mínima do macOS, arquitetura, target
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Flags do linker: rpath, caminhos das bibliotecas, versão do macOS, arquitetura, 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}"
# Flags do pré-processador/compilador: caminho dos headers
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Flags do compilador C++: igual ao CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# PATH: prioriza binários do ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Caminho do pkg-config para encontrar informações de bibliotecas
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Caminho do executável pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Diretório da pkg-config library
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Adiciona Homebrew e outros ao PATH para fallback
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Caminho padrão do Homebrew
# Adiciona OpenSSL aos caminhos de headers e bibliotecas
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 do 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"
# Ao finalizar, você já pode compilar seus projetos nesta janela de terminal
echo "Ambiente de compilação ServBay x86_64 configurado."
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
Atenção: Essas variáveis só valem para a sessão do terminal atual. Ao fechar ou abrir um novo terminal, execute novamente o script para definir o ambiente de compilação.
Exemplos de compilação
Uma vez com o ambiente configurado, você pode baixar o código-fonte desejado e seguir para a compilação. Veja alguns exemplos práticos:
Compilando o ImageMagick
O ImageMagick é uma biblioteca potente para manipulação de imagens, sendo dependência da extensão imagick
do PHP. No ServBay, o ImageMagick já está incluso por padrão, normalmente não sendo necessária compilação manual. Este exemplo assume apenas fins ilustrativos sobre como compilar um projeto típico baseado em Autotools (configure/make) dentro do ambiente ServBay.
Baixe e descompacte o código-fonte do ImageMagick:
bash# Altere para a versão mais recente conforme necessário 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
4Execute o script
./configure
: Utilizando as variáveis de ambiente já exportadas, rode o configure. As opções--prefix
,--libdir
,--includedir
etc. direcionam a instalação para a ServBay Development Library e as subpastas apropriadas, tornando as bibliotecas e headers acessíveis para outros softwares, como a extensãoimagick
do PHP. Os demais parâmetros podem ser ajustados conforme a documentação do 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
30Compile e instale com
make
emake install
: O comandomake
irá compilar os arquivos necessários e, com-j ${CPU_NUMBER}
, utilizar todos os núcleos do seu processador para acelerar. Omake install
irá instalar tudo conforme os diretórios indicados na opção--prefix
.bashmake -j ${CPU_NUMBER} make install
1
2
Compilando pacotes com cmake
Se o software utiliza cmake
como sistema de build, o processo será um pouco diferente. Tomando protobuf
(Protocol Buffers) como exemplo:
Baixe o código-fonte do protobuf e entre no diretório.
Configure o projeto com
cmake
:-S .
define o diretório-fonte como sendo o atual,-B builddir
define o diretório de build. Os parâmetros-DCMAKE_INSTALL_PREFIX
e afins são equivalentes ao--prefix
do autotools e irão instalar nas pastas corretas da ServBay Development Library. Os demais parâmetros otimizam para o ambiente do ServBay.bash# Assuma que você já está no diretório do código-fonte 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
21Compile e instale com
cmake --build
ecmake --install
:cmake --build builddir
faz a compilação dos arquivos dentro do diretório de build, enquantocmake --install builddir
faz a instalação nos diretórios indicados.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Compilando módulos PHP
Caso deseje compilar extensões extras (ex: swoole
, redis
, mongodb
) para alguma versão de PHP instalada no ServBay, consulte a documentação dedicada:
Compilando módulos PostgreSQL
Da mesma forma, para compilar módulos extras para o PostgreSQL do ServBay, siga o guia:
Como compilar módulos PostgreSQL
Resumo
Com a ServBay Development Library e o cuidadoso ajuste das variáveis de ambiente, desenvolvedores podem recompilar e personalizar facilmente pacotes no macOS, ganhando flexibilidade para atender necessidades específicas de projetos ou usar as versões mais recentes de bibliotecas. Certifique-se sempre de ler com atenção a documentação oficial de compilação de cada pacote e ajuste os parâmetros conforme as exigências do software em questão.