123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #!/bin/bash
- set -e
- [% c("var/set_default_env") -%]
- [% c("var/setarch") -%]
- distdir=/var/tmp/dist/[% project %]
- [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
- mkdir -p /var/tmp/dist
- [% IF c("var/linux") %]
- tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
- export PATH="/var/tmp/dist/binutils/bin:$PATH"
- [% END -%]
- [% IF c("var/osx") -%]
- # src/build/toolchain/mac/filter_libtool.py wants libtool to be called exactly "libtool".
- ln -sf x86_64-apple-darwin11-libtool $cctoolsdir/libtool
- export AR=x86_64-apple-darwin11-ar
- # Certain cross-compiling flags are set in webrtc-mac.patch because the build
- # system doesn't honor CFLAGS etc. environment variables.
- [% ELSE -%]
- AR=ar
- [% END -%]
- # Setting up depot_tools
- # https://dev.chromium.org/developers/how-tos/install-depot-tools
- tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/depot_tools') %]
- export PATH="$PATH:/var/tmp/dist/depot_tools"
- # Disable automatic updating.
- export DEPOT_TOOLS_UPDATE=0
- mkdir -p /var/tmp/build
- tar -C /var/tmp/build -xf webrtc-sources-[% c('version') %].tar.gz
- builddir=/var/tmp/build/[% project %]/src
- cd $builddir
- [% IF c("var/linux") -%]
- patch -p1 < $rootdir/webrtc-linux.patch
- [% END -%]
- [% IF c("var/osx") -%]
- patch -p1 < $rootdir/webrtc-mac.patch
- [% END -%]
- [% IF c("var/linux") -%]
- # First, build a copy of GN, rather than use the prebuilt copy in buildtools/linux64.
- cd tools/gn
- # __STDC_FORMAT_MACROS is needed for a definition of PRIxPTR from inttypes.h.
- CXXFLAGS=-D__STDC_FORMAT_MACROS=1 LDFLAGS=-latomic ./bootstrap/bootstrap.py --no-rebuild --no-clean
- cd ../..
- # This is where bootstrap.py stashes the built gn.
- GN="$PWD/out_bootstrap/gn"
- [% END -%]
- [% IF c("var/osx") -%]
- # The linux descriptor builds its own copy of gn, using tools/gn/bootstrap/bootstrap.py.
- # I tried that here, but for some reason the gn so built doesn't work. On "gn gen",
- # it crashes with this error:
- # [0624/022439.767916:FATAL:command_gen.cc(59)] Check failed: !rule.empty().
- # Instead, use the gn packaged with depot_tools.
- GN="/var/tmp/dist/depot_tools/gn"
- # Hardcode the output of some utility programs that otherwise require Xcode
- # tools, like xcode-select, xcodebuild, sw_vers, and xcrun. This probably
- # needs to be kept in sync with the SDK version.
- cat <<EOF > build/mac/find_sdk.py
- print("$sysrootdir")
- print("10.11")
- EOF
- cat <<EOF > build/config/mac/sdk_info.py
- print("machine_os_build=\"10.7\"")
- print("sdk_build=\"10.11\"")
- print("sdk_path=\"$sysrootdir\"")
- print("sdk_platform_path=\"$sysrootdir\"")
- print("sdk_version=\"10.11\"")
- print("xcode_build=\"7.3\"")
- print("xcode_version=\"0730\"")
- EOF
- [% END -%]
- [% IF c("var/linux") -%]
- export CC=gcc
- export CXX=g++
- [% END -%]
- [% IF c("var/linux-i686") -%]
- GYP_DEFINES+=" target_arch=ia32"
- export CC='gcc -m32'
- export CXX='g++ -m32'
- export CFLAGS=-m32
- export CXXFLAGS=-m32
- export LDFLAGS=-m32
- [% END -%]
- export GN_ARGS=""
- # For a list of all possible GN args, do "gn gen out/Release; gn args --list out/Release".
- # https://gn.googlesource.com/gn/+/master/docs/cross_compiles.md
- # Not debug.
- GN_ARGS+=" is_debug=false"
- # There are warnings from unused returns.
- GN_ARGS+=" treat_warnings_as_errors=false"
- # Build static libraries.
- GN_ARGS+=" is_component_build=false"
- # Do not use bundled utilities.
- GN_ARGS+=" is_clang=false use_sysroot=false"
- # Use libstdc++, not libc++.
- GN_ARGS+=" use_custom_libcxx=false"
- [% IF c("var/linux") -%]
- GN_ARGS+=" target_os=\"linux\" target_cpu=\"[% IF c("var/linux-i686") %]x86[% ELSE %]x64[% END %]\""
- GN_ARGS+=" gold_path=\"$INSTDIR/binutils/bin\""
- # Make extra sure we don't use bundled binutils.
- rm -rf third_party/binutils/Linux_*
- # Avoid some dependencies.
- GN_ARGS+=" use_ozone=true use_gconf=false"
- GN_ARGS+=" rtc_include_opus=false rtc_include_ilbc=false rtc_include_internal_audio_device=false rtc_include_pulse_audio=false"
- # Included for "field_trial" below. Maybe "fieldtrial_testing_like_official_build" could help here?
- #GN_ARGS+=" rtc_include_tests=false"
- [% END -%]
- [% IF c("var/osx") -%]
- GN_ARGS+=" target_os=\"mac\" target_cpu=\"x64\" mac_deployment_target=\"10.7\""
- GN_ARGS+=" clang_use_chrome_plugins=false"
- GN_ARGS+=" clang_base_path=\"$clangdir\""
- # No lld in our toolchain currently.
- GN_ARGS+=" use_lld=false"
- # Avoid some dependencies.
- GN_ARGS+=" rtc_include_opus=false rtc_include_ilbc=false rtc_include_internal_audio_device=false"
- # Tests are needed for field_trial, metrics_default, and pc_test_utils targets
- # (which include code needed by go-webrtc).
- GN_ARGS+=" rtc_include_tests=true"
- # Make sure not to use bundled clang and binutils.
- rm -rf third_party/llvm-build
- rm -rf third_party/binutils
- [% END -%]
- rm -rf out/Release
- "$GN" gen out/Release --args="$GN_ARGS"
- ninja -C out/Release webrtc field_trial metrics_default pc_test_utils
- # The cctools ar doesn't have the 'D' deterministic option of GNU ar, but the
- # ZERO_AR_DATE environment variable similarly sets timestamps within the
- # archive to zero.
- # https://opensource.apple.com/source/cctools/cctools-886/ar/archive.c.auto.html
- # https://codereview.chromium.org/699083004/
- # .o files under out/Release/obj/ are the build outputs. Don't include .o
- # files from elsewhere under out/ because they are build helpers and things
- # like that, not necessarily of the target architecture, and anyway are not
- # needed.
- # https://bugs.torproject.org/22832
- find out/Release/obj -name '*.o' -print0 | sort -z \
- | [% IF c("var/osx") %]ZERO_AR_DATE=1 [% END %] xargs -0 -- "$AR" crs libwebrtc-magic.a
- mkdir -p $distdir
- cd $distdir
- mkdir -p include lib
- cp -f $builddir/libwebrtc-magic.a [% c("var/webrtc/lib_path") %]
- INCLUDE_DIR="$PWD/include"
- cd $builddir
- find . -type f -name '*.h' -print0 | while IFS= read -r -d '' h;
- do
- mkdir -p "$INCLUDE_DIR/$(dirname "$h")"
- cp -f "$h" "$INCLUDE_DIR/$h"
- done
- cd /var/tmp/dist
- [% c('tar', {
- tar_src => [ project ],
- tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
- }) %]
|