Browse Source

Build: simplify specifying link flags via new LDFLAGS_BASE

Allow link flags to be partially overridden via LDFLAGS_BASE
(TEST_LDFLAGS_BASE). This allows changing the link flags but not
optimisations that are still added for LTO purposes, to avoid the need
to have to specify the complete LDFLAGS/TEST_LDFLAGS values in case of
LTO.
Davin McCall 7 months ago
parent
commit
021cdbfe75
7 changed files with 44 additions and 20 deletions
  1. 11 1
      BUILD
  2. 4 2
      configs/mconfig.Darwin
  3. 4 3
      configs/mconfig.FreeBSD
  4. 4 2
      configs/mconfig.Linux
  5. 9 3
      configs/mconfig.Linux.sh
  6. 4 2
      configs/mconfig.OpenBSD
  7. 8 7
      configure

+ 11 - 1
BUILD

@@ -43,7 +43,17 @@ appropriate values for the configuration variables defined within. In particular
              (FreeBSD requires -lrt; link time optimisation requires -flto and other flags).
   TEST_CXXFLAGS : are options passed to the compiler when compiling code for tests
   TEST_LDFLAGS  : are options to be used when linking test code
-  
+
+For convenience, generated configuration also allows setting the following:
+
+  LDFLAGS_BASE : any link options that should be used by default for linking (including tests),
+                 if LDFLAGS is not overridden, to which CXXFLAGS will be added if the
+                 configuration enables link-time optimisation (LTO). This provides a simple way to
+                 change only link options not relevant to LTO, without having to override the
+                 values for both LDFLAGS and TEST_LDFLAGS.
+  TEST_LDFLAGS_BASE : as LDFLAGS_BASE but for tests. The default is to use the same value (if any)
+                      as specified for LDFLAGS_BASE.
+
 Additionally, for cross-compilation, the following can be specified:
 
   CXX_FOR_BUILD : C++ compiler for compiling code to run on the build host

+ 4 - 2
configs/mconfig.Darwin

@@ -12,9 +12,11 @@ SYSCONTROLSOCKET=/var/run/dinitctl
 CXX=g++
 CXXFLAGS=-std=c++11 -Os -Wall -flto
 CPPFLAGS=
-LDFLAGS=$(CXXFLAGS)
+LDFLAGS_BASE=
+LDFLAGS=$(LDFLAGS_BASE) $(CXXFLAGS)
 TEST_CXXFLAGS=$(CXXFLAGS) -fsanitize=address,undefined
-TEST_LDFLAGS=$(LDFLAGS) $(TEST_CXXFLAGS)
+TEST_LDFLAGS_BASE=$(LDFLAGS_BASE)
+TEST_LDFLAGS=$(TEST_LDFLAGS_BASE) $(TEST_CXXFLAGS)
 BUILD_SHUTDOWN=no
 
 # Notes:

+ 4 - 3
configs/mconfig.FreeBSD

@@ -12,16 +12,17 @@ SYSCONTROLSOCKET=/var/run/dinitctl
 CXX=clang++
 CXXFLAGS=-std=c++11 -Os -Wall -fno-plt -fno-rtti
 CPPFLAGS=
-LDFLAGS=-lrt
+LDFLAGS_BASE=-lrt
+LDFLAGS=$(LDFLAGS_BASE)
 TEST_CXXFLAGS=$(CXXFLAGS) -fsanitize=address,undefined
-TEST_LDFLAGS=$(LDFLAGS) $(TEST_CXXFLAGS)
+TEST_LDFLAGS_BASE=$(LDFLAGS_BASE)
+TEST_LDFLAGS=$(TEST_LDFLAGS_BASE)
 BUILD_SHUTDOWN=no
 
 
 # Notes:
 #   -fno-rtti (optional) : Dinit does not require C++ Run-time Type Information
 #   -fno-plt  (optional) : Recommended optimisation
-#   -flto     (optional) : Perform link-time optimisation
 #   -fsanitize=address,undefined :  Apply sanitizers (during unit tests)
 #
 # Old versions of FreeBSD had issues with -fno-plt/-fno-rtti.

+ 4 - 2
configs/mconfig.Linux

@@ -18,10 +18,12 @@ SYSCONTROLSOCKET=/run/dinitctl
 CXX=g++
 CPPFLAGS=-D_GLIBCXX_USE_CXX11_ABI=1
 CXXFLAGS=-std=c++11 -Os -Wall -fno-rtti -fno-plt -flto
-LDFLAGS=$(CXXFLAGS)
+LDFLAGS_BASE=
+LDFLAGS=$(LDFLAGS_BASE) $(CXXFLAGS)
 BUILD_SHUTDOWN=yes
 TEST_CXXFLAGS=$(CXXFLAGS) -fsanitize=address,undefined
-TEST_LDFLAGS=$(LDFLAGS) $(TEST_CXXFLAGS)
+TEST_LDFLAGS_BASE=$(LDFLAGS_BASE)
+TEST_LDFLAGS=$(TEST_LDFLAGS_BASE) $(TEST_CXXFLAGS)
 
 # Notes:
 #   -D_GLIBCXX_USE_CXX11_ABI=1 : force use of new ABI, see above / BUILD

+ 9 - 3
configs/mconfig.Linux.sh

@@ -80,13 +80,19 @@ GENERAL_BUILD_SETTINGS=$(
   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=\$(CXXFLAGS)"
+      echo "LDFLAGS=\$(LDFLAGS_BASE) \$(CXXFLAGS)"
   else
-      echo "LDFLAGS="  
+      echo "LDFLAGS=\$(LDFLAGS_BASE)"  
   fi
   echo "TEST_CXXFLAGS=\$(CXXFLAGS) $SANITIZE_OPTS"
-  echo "TEST_LDFLAGS=\$(LDFLAGS) \$(TEST_CXXFLAGS)"
+  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:"

+ 4 - 2
configs/mconfig.OpenBSD

@@ -11,9 +11,11 @@ SYSCONTROLSOCKET=/var/run/dinitctl
 CXX=clang++
 CXXFLAGS=-std=c++11 -Os -Wall -fno-rtti
 CPPFLAGS=
-LDFLAGS=
+LDFLAGS_BASE=
+LDFLAGS=$(LDFLAGS_BASE)
 TEST_CXXFLAGS=$(CXXFLAGS)
-TEST_LDFLAGS=$(LDFLAGS)
+TEST_LDFLAGS_BASE=$(LDFLAGS_BASE)
+TEST_LDFLAGS=$(TEST_LDFLAGS_BASE)
 BUILD_SHUTDOWN=no
 # (shutdown command not available for OpenBSD yet).
 

+ 8 - 7
configure

@@ -7,10 +7,9 @@ set -eu
 cd "$(dirname "$0")"
 
 ## Helper functions
-# According to POSIX, echo has some unspecified behavior in some cases, for example
-# when its first argument is "-n" or backslash ("\"). We prefer to rely on
-# POSIX documented things.
-# So we replace shell built-in echo with a printf based function.
+# POSIX "echo" behaviour is unspecified behavior in some cases, for example
+# when the first argument is "-n" or backslash ("\").
+# So, replace the shell built-in echo with a printf based function.
 # For more info see http://www.etalabs.net/sh_tricks.html
 echo()
 {
@@ -93,7 +92,7 @@ try_ld_argument()
 
 try_both_argument()
 {
-    info Checking whether the compiler/linker accept "$3"...
+    info Checking whether the compiler/linker accepts "$3"...
     if $CXX $CXXFLAGS $CXXFLAGS_EXTRA $LDFLAGS $LDFLAGS_EXTRA $3 testfile.cc -o testfile > /dev/null 2>&1; then
         sub_info Yes.
         eval "$1=\"\${$1} \$3\""
@@ -372,9 +371,11 @@ CXXFLAGS_EXTRA=$CXXFLAGS_EXTRA
 TEST_CXXFLAGS=$TEST_CXXFLAGS
 TEST_CXXFLAGS_EXTRA=$TEST_CXXFLAGS_EXTRA
 CPPFLAGS=$CPPFLAGS
-LDFLAGS=$LDFLAGS
+LDFLAGS_BASE=
+LDFLAGS=\$(LDFLAGS_BASE) $LDFLAGS
 LDFLAGS_EXTRA=$LDFLAGS_EXTRA
-TEST_LDFLAGS=$TEST_LDFLAGS
+TEST_LDFLAGS_BASE=
+TEST_LDFLAGS=\$(TEST_LDFLAGS_BASE) $TEST_LDFLAGS
 TEST_LDFLAGS_EXTRA=$TEST_LDFLAGS_EXTRA
 BUILD_SHUTDOWN=$BUILD_SHUTDOWN
 STRIPOPTS=$STRIPOPTS