86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash -eu
 | |
| # Copyright 2020 Google Inc.
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #      http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| # For coverage build we need to remove some flags when building protobuf and icu
 | |
| if [ "$SANITIZER" = "coverage" ]
 | |
| then
 | |
|     export OCX=$CXXFLAGS
 | |
|     export OC=$CFLAGS
 | |
|     CF1=${CFLAGS//-fprofile-instr-generate/}
 | |
|     export CFLAGS=${CF1//-fcoverage-mapping/}
 | |
|     CXF1=${CXXFLAGS//-fprofile-instr-generate/}
 | |
|     export CXXFLAGS=${CXF1//-fcoverage-mapping/}
 | |
| fi
 | |
| 
 | |
| # Build Protobuf
 | |
| git clone https://github.com/google/protobuf.git
 | |
| cd protobuf
 | |
| git submodule update --init --recursive
 | |
| ./autogen.sh
 | |
| ./configure
 | |
| make -j$(nproc)
 | |
| make install
 | |
| ldconfig
 | |
| 
 | |
| 
 | |
| # Build icu
 | |
| export DEPS_PATH=/src/deps/
 | |
| mkdir $DEPS_PATH
 | |
| 
 | |
| # build ICU for linking statically.
 | |
| cd $SRC/icu/source
 | |
| ./configure --disable-shared --enable-static --disable-layoutex \
 | |
|   --disable-tests --disable-samples --with-data-packaging=static --prefix=$DEPS_PATH
 | |
| make install -j$(nproc)
 | |
| 
 | |
| # Ugly ugly hack to get static linking to work for icu.
 | |
| cd $DEPS_PATH/lib
 | |
| ls *.a | xargs -n1 ar x
 | |
| rm *.a
 | |
| ar r libicu.a *.{ao,o}
 | |
| ln -s libicu.a libicudata.a
 | |
| ln -s libicu.a libicuuc.a
 | |
| ln -s libicu.a libicui18n.a
 | |
| 
 | |
| if [ "$SANITIZER" = "coverage" ]
 | |
| then
 | |
|     export CFLAGS=$OC
 | |
|     export CXXFLAGS=$OCX
 | |
| fi
 | |
| 
 | |
| # Build libphonenumber
 | |
| cd $SRC/libphonenumber/cpp
 | |
| sed -i 's/set (BUILD_SHARED_LIB true)/set (BUILD_SHARED_LIB false)/g' CMakeLists.txt
 | |
| sed -i 's/list (APPEND CMAKE_C_FLAGS "-pthread")/string (APPEND CMAKE_C_FLAGS " -pthread")/g' CMakeLists.txt
 | |
| 
 | |
| mkdir build && cd build
 | |
| cmake -DUSE_BOOST=OFF -DBUILD_GEOCODER=OFF \
 | |
|       -DPROTOBUF_LIB="/src/protobuf/src/.libs/libprotobuf.a" \
 | |
|       -DBUILD_STATIC_LIB=ON \
 | |
|       -DICU_UC_INCLUDE_DIR=$SRC/icu/source/comon \
 | |
|       -DICU_UC_LIB=$DEPS_PATH/lib/libicuuc.a \
 | |
|       -DICU_I18N_INCLUDE_DIR=$SRC/icu/source/i18n/ \
 | |
|       -DICU_I18N_LIB=$DEPS_PATH/lib/libicui18n.a  \
 | |
|       ../
 | |
| make
 | |
| 
 | |
| # Build our fuzzer
 | |
| $CXX -I$SRC/libphonenumber/cpp/src $CXXFLAGS -o phonefuzz.o -c $SRC/phonefuzz.cc
 | |
| $CXX $CXXFLAGS $LIB_FUZZING_ENGINE phonefuzz.o -o $OUT/phonefuzz \
 | |
|      ./libphonenumber.a $SRC/protobuf/src/.libs/libprotobuf.a \
 | |
|      $DEPS_PATH/lib/libicu.a -lpthread
 |