123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #!/bin/sh
- # Generate build configuration for Linux.
- rm -f ../mconfig
- INST_PATH_OPTS=$(
- echo "# Installation path options.";
- echo "";
- echo "SBINDIR=/sbin";
- echo "MANDIR=/usr/share/man";
- echo "SYSCONTROLSOCKET=/run/dinitctl"
- )
- test_compiler_arg() {
- "$1" -c "$2" testfile.cc -o testfile.o > /dev/null 2>&1
- if test $? = 0; then
- rm testfile.o
- supported_opts="$supported_opts $2"
- supported_opts=${supported_opts# }
- return 0
- else
- return 1
- fi
- }
- # test argument is supported by compiler at both compile and link
- test_compile_link_arg() {
- "$1" "$2" testfile.cc -o testfile > /dev/null 2>&1
- if test $? = 0; then
- rm testfile
- supported_opts="$supported_opts $2"
- supported_opts=${supported_opts# }
- return 0
- else
- return 1
- fi
- }
- for compiler in g++ clang++ c++ ""; do
- if test -z "$compiler"; then
- break # none found
- fi
- type $compiler > /dev/null
- if test $? = 0; then
- break # found
- fi
- done
- if test -z "$compiler"; then
- echo "*** No compiler found ***"
- exit 1
- fi
- echo "Compiler found : $compiler"
- echo "int main(int argc, char **argv) { return 0; }" > testfile.cc
- supported_opts=""
- test_compiler_arg "$compiler" -flto
- NOT_HAS_LTO=$?
- test_compiler_arg "$compiler" -fno-rtti
- test_compiler_arg "$compiler" -fno-plt
- BUILD_OPTS="-std=c++11 -Os -Wall $supported_opts"
- echo "Using build options : $supported_opts"
- supported_opts=""
- test_compile_link_arg "$compiler" -fsanitize=address,undefined
- SANITIZE_OPTS="$supported_opts"
- echo "Sanitize options : $SANITIZE_OPTS"
- rm testfile.cc
- GENERAL_BUILD_SETTINGS=$(
- echo ""
- echo ""
- echo "# General build options."
- echo ""
- echo "# Linux (GCC). Note with GCC 5.x/6.x you must use the old ABI, with GCC 7.x you must use"
- echo "# the new ABI. See BUILD file for more information."
- echo "CXX=$compiler"
- echo "CXXFLAGS=$BUILD_OPTS"
- echo "CPPFLAGS=-D_GLIBCXX_USE_CXX11_ABI=1"
- echo "LDFLAGS_BASE="
- if [ "$NOT_HAS_LTO" = 0 ]; then
- echo "LDFLAGS=\$(LDFLAGS_BASE) \$(CXXFLAGS)"
- else
- echo "LDFLAGS=\$(LDFLAGS_BASE)"
- fi
- echo "TEST_CXXFLAGS=\$(CXXFLAGS) $SANITIZE_OPTS"
- echo "TEST_LDFLAGS_BASE=\$(LDFLAGS_BASE)"
- if [ "$NOT_HAS_LTO" = 0 ]; then
- echo "TEST_LDFLAGS=\$(TEST_LDFLAGS_BASE) \$(TEST_CXXFLAGS)"
- else
- echo "TEST_LDFLAGS=\$(TEST_LDFLAGS_BASE)"
- fi
- echo "BUILD_SHUTDOWN=yes"
- echo ""
- echo "# Notes:"
- echo "# -D_GLIBCXX_USE_CXX11_ABI=1 : force use of new ABI, see above / BUILD"
- echo "# -fno-rtti (optional) : Dinit does not require C++ Run-time Type Information"
- echo "# -fno-plt (optional) : Recommended optimisation"
- echo "# -flto (optional) : Perform link-time optimisation"
- echo "# -fsanitize=address,undefined : Apply sanitizers (during unit tests)"
- echo "# LDFLAGS should also contain C++ optimisation flags for LTO (-flto)."
- )
- FEATURE_SETTINGS=$(
- echo ""
- echo ""
- echo "# Feature settings"
- echo ""
- echo "SUPPORT_CGROUPS=1"
- )
- SERVICE_DEFAULTS=$(
- echo ""
- echo ""
- echo "# Service defaults"
- echo ""
- echo "DEFAULT_AUTO_RESTART=true"
- echo "DEFAULT_START_TIMEOUT=60"
- echo "DEFAULT_STOP_TIMEOUT=10"
- )
- (
- echo "$INST_PATH_OPTS"
- echo "$GENERAL_BUILD_SETTINGS"
- echo "$FEATURE_SETTINGS"
- echo "$SERVICE_DEFAULTS"
- ) >> ../mconfig
|