[Privoxy-devel] compiler options for testing privoxy?
Lee
ler762 at gmail.com
Sat Apr 21 19:14:07 UTC 2018
what compiler/loader options do you use when testing privoxy?
$ cat MYconfigure
#!/bin/sh
autoheader
autoconf
####### configure options:
# --enable-mingw32 Use mingw32 for a Windows GUI
# --disable-pthread Use native threads instead of POSIX
pthreads library
# --disable-dynamic-pcre Use the built-in, static pcre, even
if libpcre is available
# --with-docbook=yes Enable docbook documentation creation
#
### normal plus docbook generation
# ./configure --build=i686-pc-cygwin --host=i686-pc-mingw32
--enable-mingw32 --enable-zlib --with-docbook=yes
# make
# make dok > /tmp/make-dok.txt
# make dok-tidy >> /tmp/make-dok.txt
export CFLAGS="-O2"
# note: configure.in line 155
# if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
# In other words, if you set CFLAGS you need to include -O2 if you
want optimization
# assume I'll set cflags below, so set O2 now
export LDFLAGS=""
# start with initially empty flags
####### what does c99 get me?
# CFLAGS="${CFLAGS} -std=c99"
# https://gcc.gnu.org/c99status.html
# C99 is substantially completely supported as of GCC 4.5 (with
-std=c99 -pedantic-errors used)
# build dies if -pedantic-errors used
CFLAGS="${CFLAGS} -fstack-protector-strong"
LDFLAGS="${LDFLAGS} -fstack-protector-strong"
# enable stack checking. NOTE: need to specify when compiling _and_ linking
# see https://en.wikipedia.org/wiki/Buffer_overflow_protection
# NOTE: needs --enable-static-linking or [?? /cygwin/bin ??] in the path
CFLAGS="${CFLAGS} -march=native"
# -march=cpu-type
# Generate instructions for the machine type cpu-type. In contrast
to -mtune=cpu-type, which merely tunes the
# generated code for the specified cpu-type, -march=cpu-type allows
GCC to generate code that may not run at all on
# processors other than the one indicated.
# Specifying -march=cpu-type implies -mtune=cpu-type.
#
# -march=native
# This selects the CPU to generate code for at compilation time by
determining the processor type of the compiling
# machine. Using -march=native enables all instruction subsets
supported by the local machine (hence the result
# might not run on different machines). Using -mtune=native
produces code optimized for the local machine under
# the constraints of the selected instruction set.
CFLAGS="${CFLAGS} -D_FORTIFY_SOURCE=2"
# enable lightweight buffer overflow protection to some memory and
string functions.
# https://stackoverflow.com/questions/13517526/difference-between-gcc-d-fortify-source-1-and-d-fortify-source-2
# Essentially, _FORTIFY_SOURCE level 2 is more secure, but is a
slightly riskier compilation strategy;
# if you use it, make sure you have very strong regression tests for
your compiled code to prove the
# compiler hasn't introduced any unexpected behaviour.
LDFLAGS="${LDFLAGS} -Wl,--nxcompat"
# You can enable DEP with -Wl,--nxcompat
# DEP: https://blogs.technet.microsoft.com/askperf/2008/06/17/to-dep-or-not-to-dep/
LDFLAGS="${LDFLAGS} -Wl,--dynamicbase,--export-all-symbols"
# ALSR with gcc has a problem: -Wl,--dynamicbase doesn't emit the
necessary relocation table.
# As a workaround, you can pass -Wl,--dynamicbase,--export-all-symbols
CFLAGS="${CFLAGS} -Wall"
# -Wall doesn't actually turn on all warnings, so add -Wextra
# but then plenty too many complaints by
# -Wmissing-field-initializers
# -Wsign-compare
# -Wtype-limits (strptime.h)
CFLAGS="${CFLAGS} -Wextra -Wno-missing-field-initializers
-Wno-sign-compare -Wno-type-limits"
CFLAGS="${CFLAGS} -Warray-bounds=2"
# -Wall enables -Warray-bounds=1
# This warning level also warns about out of bounds access for arrays
at the end of a struct and for arrays
# accessed through pointers. This warning level may give a larger
number of false positives and is deactivated
# by default.
### CFLAGS="${CFLAGS} -Wconversion"
### way too many warnings for things that don't look like a problem
CFLAGS="${CFLAGS} -Wlogical-op"
# Warn about suspicious uses of logical operators in expressions.
### CFLAGS="${CFLAGS} -fsanitize=bounds-strict"
### results in
### /usr/lib/gcc/i686-w64-mingw32/6.4.0/../../../../i686-w64-mingw32/bin/ld:
cannot find -lubsan
### collect2: error: ld returned 1 exit status
CFLAGS="${CFLAGS} -Wshadow"
# Warn whenever a local variable or type declaration shadows another variable
### CFLAGS="${CFLAGS} -Wwrite-strings"
### These warnings help you find at compile time code that can try to write
### into a string constant, but only if you have been very careful about
### using const in declarations and prototypes.
### >>> Otherwise, it is just a nuisance. <<< -- this, very much this
## CFLAGS="${CFLAGS} -pg"
## LDFLAGS="${LDFLAGS} -pg"
# compile in execution profile code for use w/ gprof
# NOTE: need to specify when compiling _and_ linking
# use
# ./privoxy.exe
# /usr/bin/i686-w64-mingw32-gprof.exe privoxy.exe gmon.out >| analysis.txt
### is CFLAGS="-O2" a problem with -pg? with: privoxy hangs at exit,
without everything seems fine
echo "CFLAGS=${CFLAGS}"
echo "LDFLAGS=${LDFLAGS}"
./configure --host=i686-w64-mingw32 --enable-mingw32 \
--enable-static-linking \
--disable-pthread --disable-dynamic-pcre --enable-zlib \
--with-docbook=yes
## ./configure cross-compilation options:
## --build: the system on which the program will be built.
## --host: the system on which the generated program will run.
## --target: only used to build a cross-compiling toolchain.
##
## ./configure --build=i686-pc-cygwin --host=i686-w64-mingw32
##
More information about the Privoxy-devel
mailing list