#!/usr/bin/env bash cd "$(dirname "$0")" # turn on verbose debugging output for logs. exec 4>&1; export BASH_XTRACEFD=4; set -x # make errors fatal set -e # bleat on references to undefined shell variables set -u ABSL_SOURCE_DIR="abseil-cpp" top="$(pwd)" stage="$top"/stage # load autobuild provided shell functions and variables case "$AUTOBUILD_PLATFORM" in windows*) autobuild="$(cygpath -u "$AUTOBUILD")" ;; *) autobuild="$AUTOBUILD" ;; esac source_environment_tempfile="$stage/source_environment.sh" "$autobuild" source_environment > "$source_environment_tempfile" . "$source_environment_tempfile" version="0.0.0" build=${AUTOBUILD_BUILD_ID:=0} echo "${version}.${build}" > "${stage}/VERSION.txt" pushd "$ABSL_SOURCE_DIR" case "$AUTOBUILD_PLATFORM" in # ------------------------ windows, windows64 ------------------------ windows*) load_vsvars mkdir -p "build_debug" pushd "build_debug" # Invoke cmake and use as official build cmake -G "$AUTOBUILD_WIN_CMAKE_GEN" -A "$AUTOBUILD_WIN_VSPLATFORM" -T host="$AUTOBUILD_WIN_VSHOST" .. \ -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_FLAGS="/permissive- /Z7 /ZH:SHA_256 /Od /MDd /EHsc /Zc:__cplusplus /Zc:forScope /Zc:rvalueCast /Zc:strictStrings /D__SSE3__=1 /D__SSSE3__=1 /D__SSE4__=1 /D__SSE4_1__=1 /D__SSE4_2__=1" \ -DCMAKE_INSTALL_PREFIX=$(cygpath -w "$stage/absl/debug") cmake --build . --config Debug # conditionally run unit tests if [ "${DISABLE_UNIT_TESTS:-0}" = "0" ]; then ctest -C Debug fi cmake --install . --config Debug popd mkdir -p "build_release" pushd "build_release" # Invoke cmake and use as official build cmake -G "$AUTOBUILD_WIN_CMAKE_GEN" -A "$AUTOBUILD_WIN_VSPLATFORM" -T host="$AUTOBUILD_WIN_VSHOST" .. \ -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_FLAGS="/permissive- /Z7 /ZH:SHA_256 /O2 /Oi /Ot /Gy /MD /Ob3 /Oy- /Zc:inline /EHsc /fp:fast /Zc:__cplusplus /Zc:forScope /Zc:rvalueCast /Zc:strictStrings /D__SSE3__=1 /D__SSSE3__=1 /D__SSE4__=1 /D__SSE4_1__=1 /D__SSE4_2__=1" \ -DCMAKE_INSTALL_PREFIX=$(cygpath -w "$stage/absl/release") cmake --build . --config Release # conditionally run unit tests if [ "${DISABLE_UNIT_TESTS:-0}" = "0" ]; then ctest -C Release fi cmake --install . --config Release popd ;; # ------------------------- darwin, darwin64 ------------------------- darwin*) # Setup osx sdk platform SDKNAME="macosx" export SDKROOT=$(xcodebuild -version -sdk ${SDKNAME} Path) export MACOSX_DEPLOYMENT_TARGET=10.13 # Setup build flags ARCH_FLAGS="-arch x86_64" SDK_FLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} -isysroot ${SDKROOT}" DEBUG_COMMON_FLAGS="$ARCH_FLAGS $SDK_FLAGS -O0 -g -msse4.2 -fPIC -DPIC" RELEASE_COMMON_FLAGS="$ARCH_FLAGS $SDK_FLAGS -O3 -g -msse4.2 -fPIC -DPIC -fstack-protector-strong" DEBUG_CFLAGS="$DEBUG_COMMON_FLAGS" RELEASE_CFLAGS="$RELEASE_COMMON_FLAGS" DEBUG_CXXFLAGS="$DEBUG_COMMON_FLAGS -std=c++17" RELEASE_CXXFLAGS="$RELEASE_COMMON_FLAGS -std=c++17" DEBUG_CPPFLAGS="-DPIC" RELEASE_CPPFLAGS="-DPIC" DEBUG_LDFLAGS="$ARCH_FLAGS $SDK_FLAGS -Wl,-headerpad_max_install_names -Wl,-macos_version_min,$MACOSX_DEPLOYMENT_TARGET" RELEASE_LDFLAGS="$ARCH_FLAGS $SDK_FLAGS -Wl,-headerpad_max_install_names -Wl,-macos_version_min,$MACOSX_DEPLOYMENT_TARGET" mkdir -p "build_debug" pushd "build_debug" CFLAGS="$DEBUG_CFLAGS" \ CXXFLAGS="$DEBUG_CXXFLAGS" \ CPPFLAGS="$DEBUG_CPPFLAGS" \ LDFLAGS="$DEBUG_LDFLAGS" \ cmake .. -GXcode -DBUILD_SHARED_LIBS:BOOL=OFF \ -DCMAKE_C_FLAGS="$DEBUG_CFLAGS" \ -DCMAKE_CXX_FLAGS="$DEBUG_CXXFLAGS" \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL="0" \ -DCMAKE_XCODE_ATTRIBUTE_GCC_FAST_MATH=NO \ -DCMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS=YES \ -DCMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT=dwarf \ -DCMAKE_XCODE_ATTRIBUTE_LLVM_LTO=NO \ -DCMAKE_XCODE_ATTRIBUTE_CLANG_X86_VECTOR_INSTRUCTIONS=sse4.2 \ -DCMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD="c++17" \ -DCMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY="libc++" \ -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="" \ -DCMAKE_OSX_ARCHITECTURES:STRING=x86_64 \ -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_OSX_SYSROOT=${SDKROOT} \ -DCMAKE_MACOSX_RPATH=YES -DCMAKE_INSTALL_PREFIX="$stage/absl/debug" cmake --build . --config Debug # conditionally run unit tests if [ "${DISABLE_UNIT_TESTS:-0}" = "0" ]; then ctest -C Debug fi cmake --install . --config Debug popd mkdir -p "build_release" pushd "build_release" CFLAGS="$RELEASE_CFLAGS" \ CXXFLAGS="$RELEASE_CXXFLAGS" \ CPPFLAGS="$RELEASE_CPPFLAGS" \ LDFLAGS="$RELEASE_LDFLAGS" \ cmake .. -GXcode -DBUILD_SHARED_LIBS:BOOL=OFF \ -DCMAKE_C_FLAGS="$RELEASE_CFLAGS" \ -DCMAKE_CXX_FLAGS="$RELEASE_CXXFLAGS" \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL="3" \ -DCMAKE_XCODE_ATTRIBUTE_GCC_FAST_MATH=NO \ -DCMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS=YES \ -DCMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT=dwarf \ -DCMAKE_XCODE_ATTRIBUTE_LLVM_LTO=NO \ -DCMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING=YES \ -DCMAKE_XCODE_ATTRIBUTE_CLANG_X86_VECTOR_INSTRUCTIONS=sse4.2 \ -DCMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD="c++17" \ -DCMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY="libc++" \ -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="" \ -DCMAKE_OSX_ARCHITECTURES:STRING=x86_64 \ -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_OSX_SYSROOT=${SDKROOT} \ -DCMAKE_MACOSX_RPATH=YES -DCMAKE_INSTALL_PREFIX="$stage/absl/release" cmake --build . --config Release # conditionally run unit tests if [ "${DISABLE_UNIT_TESTS:-0}" = "0" ]; then ctest -C Release fi cmake --install . --config Release popd ;; # -------------------------- linux, linux64 -------------------------- linux*) # Linux build environment at Linden comes pre-polluted with stuff that can # seriously damage 3rd-party builds. Environmental garbage you can expect # includes: # # DISTCC_POTENTIAL_HOSTS arch root CXXFLAGS # DISTCC_LOCATION top branch CC # DISTCC_HOSTS build_name suffix CXX # LSDISTCC_ARGS repo prefix CFLAGS # cxx_version AUTOBUILD SIGN CPPFLAGS # # So, clear out bits that shouldn't affect our configure-directed build # but which do nonetheless. # unset DISTCC_HOSTS CFLAGS CPPFLAGS CXXFLAGS # Default target per autobuild build --address-size opts="${TARGET_OPTS:--m$AUTOBUILD_ADDRSIZE}" SIMD_FLAGS="-msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mcx16 -mpopcnt -mpclmul -maes" DEBUG_COMMON_FLAGS="$opts -Og -g -fPIC -DPIC $SIMD_FLAGS" RELEASE_COMMON_FLAGS="$opts -O3 -g -fPIC -DPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 $SIMD_FLAGS" DEBUG_CFLAGS="$DEBUG_COMMON_FLAGS" RELEASE_CFLAGS="$RELEASE_COMMON_FLAGS" DEBUG_CXXFLAGS="$DEBUG_COMMON_FLAGS -std=c++17" RELEASE_CXXFLAGS="$RELEASE_COMMON_FLAGS -std=c++17" DEBUG_CPPFLAGS="-DPIC" RELEASE_CPPFLAGS="-DPIC -D_FORTIFY_SOURCE=2" # Handle any deliberate platform targeting if [ -z "${TARGET_CPPFLAGS:-}" ]; then # Remove sysroot contamination from build environment unset CPPFLAGS else # Incorporate special pre-processing flags export CPPFLAGS="$TARGET_CPPFLAGS" fi # Debug mkdir -p "build_debug" pushd "build_debug" cmake ../ -G"Ninja" \ -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_SHARED_LIBS:BOOL=OFF \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_C_FLAGS="$DEBUG_CFLAGS" \ -DCMAKE_CXX_FLAGS="$DEBUG_CXXFLAGS" \ -DCMAKE_INSTALL_PREFIX="$stage/absl/debug" cmake --build . --config Debug --parallel $AUTOBUILD_CPU_COUNT # conditionally run unit tests if [ "${DISABLE_UNIT_TESTS:-0}" = "0" ]; then ctest -C Release fi cmake --install . --config Debug popd # Release mkdir -p "build_release" pushd "build_release" cmake ../ -G"Ninja" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS:BOOL=OFF \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_C_FLAGS="$RELEASE_CFLAGS" \ -DCMAKE_CXX_FLAGS="$RELEASE_CXXFLAGS" \ -DCMAKE_INSTALL_PREFIX="$stage/absl/release" cmake --build . --config Release --parallel $AUTOBUILD_CPU_COUNT # conditionally run unit tests if [ "${DISABLE_UNIT_TESTS:-0}" = "0" ]; then ctest -C Release fi cmake --install . --config Release popd ;; esac mkdir -p "$stage/LICENSES" cp LICENSE "$stage/LICENSES/abseil-cpp.txt" popd