#!/bin/bash # # librdkafka - Apache Kafka C library # # Copyright (c) 2018-2022, Magnus Edenhill # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # # Configure librdkafka for development # # Usage: # ./dev-conf.sh - Build with settings in dev-conf.sh # ./dev-conf.sh asan|tsan - ... and ASAN or TSAN # ./dev-conf.sh clean - Non-development clean build # set -e build () { local btype="$1" local opts="$2" echo "$btype configuration options: $opts" ./configure --clean ./configure $opts make clean make -j (cd tests ; make -j build) echo "$btype build done" } OPTS="" case "$1" in clean) build Clean exit $? ;; asan) FSAN='-fsanitize=address' ;; tsan) FSAN='-fsanitize=thread' # C11 threads in glibc don't play nice with TSAN, # so use the builtin tinycthreads instead. OPTS="$OPTS --disable-c11threads" ;; ubsan) FSAN='-fsanitize=undefined -fsanitize-undefined-trap-on-error -fno-omit-frame-pointer' ;; gprof) # gprof OPTS="$OPTS --enable-profiling" ;; "") ;; *) echo "Usage: $0 [clean|asan|tsan|ubsan|gprof]" exit 1 ;; esac if [[ $1 != clean ]]; then # enable strict C99, C++98 checks. export CFLAGS="$CFLAGS -std=c99" export CXXFLAGS="$CXXFLAGS -std=c++98" fi # enable variable shadow warnings #export CFLAGS="$CFLAGS -Wshadow=compatible-local -Wshadow=local" #export CXXFLAGS="$CXXFLAGS -Wshadow=compatible-local -Wshadow=local" # enable pedantic #export CFLAGS='-pedantic' #export CXXFLAGS='-pedantic' if [[ ! -z $FSAN ]]; then export CPPFLAGS="$CPPFLAGS $FSAN" export LDFLAGS="$LDFLAGS $FSAN" fi # enable devel asserts OPTS="$OPTS --enable-devel" # disable optimizations OPTS="$OPTS --disable-optimization" # disable lz4 #OPTS="$OPTS --disable-lz4" # disable cyrus-sasl #OPTS="$OPTS --disable-sasl" #enable refcnt debugging #OPTS="$OPTS --enable-refcnt-debug" build Development "$OPTS"