Update default build configs
authorDavin McCall <davmac@davmac.org>
Sun, 8 Dec 2019 07:26:08 +0000 (17:26 +1000)
committerDavin McCall <davmac@davmac.org>
Sun, 8 Dec 2019 07:26:08 +0000 (17:26 +1000)
BUILD.txt
configs/mconfig.Darwin
configs/mconfig.FreeBSD
configs/mconfig.Linux
configs/mconfig.OpenBSD

index 7c2f6e86acaa5231db71c94afed0f2ccb2abf189..43d5fb35a201205dd40365ff6df0bedd75a2a31a 100644 (file)
--- a/BUILD.txt
+++ b/BUILD.txt
@@ -5,10 +5,10 @@ Building Dinit should be a straight-forward process. It requires GNU make and a
 (GCC version 4.9 and later, or Clang ~5.0 and later, should be fine)
 
 On the directly supported operating systems - Linux, OpenBSD, FreeBSD and Darwin (macOS) - a
-suitable build configuration is provided and should be used automatically. For other systems,
-or to fine tune or correct the configuration, create and edit the "mconfig" file (start by
-copying one for a particular OS from the "configs" directory) to choose appropriate values for
-the configuration variables defined within. In particular:
+suitable build configuration is provided and will be used automatically if no manual configuration
+is supplied. For other systems, or to fine tune or correct the configuration, create and edit the
+"mconfig" file (start by copying one for a particular OS from the "configs" directory) to choose
+appropriate values for the configuration variables defined within. In particular:
 
   CXX : should be set to the name of the C++ compiler (and link driver)
   CXXOPTS :  are options passed to the compiler during compilation (see note for GCC below)
@@ -28,6 +28,27 @@ If everything goes smoothly this will build dinit, dinitctl, and optionally the
 utility. Use "make install" to install; you can specify an alternate installation by
 setting the "DESTDIR" variable, eg "make DESTDIR=/tmp/temporary-install-path install".
 
+
+Recommended Compiler options
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Dinit should generally build fine with no additional options, other than:
+ -std=c++11 :  may be required to select correct C++ standard.
+ -D_GLIBCXX_USE_CXX11_ABI=1 :   see "Special note for GCC/Libstdc++", below. Not needed for
+                                most modern systems.
+
+Recommended options, supported by at least GCC and Clang, are:
+ -Os       : optimise for size
+ -fno-rtti : disable RTTI (run-time type information), it is not required by Dinit.
+             However, on some platforms such as Mac OS (and historically FreeBSD, IIRC), this
+             prevents exceptions working correctly.
+ -fno-plt  : enables better code generation for non-static builds, but may cause unit test
+             failures on some older versions of FreeBSD (11.2-RELEASE-p4 with clang++ 6.0.0).
+ -flto     : perform link-time optimisation (option required at compile and link).
+
+Consult compiler documentation for further information on the above options.
+
+
 Other configuration variables
 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
index 2ab837f7a76635085fcb3772b6526ca7d2887a76..b6e6e08ec6ebd579020f7db8003690309cf77a70 100644 (file)
@@ -14,3 +14,6 @@ CXXOPTS=-std=c++11 -Os -Wall -flto
 LDFLAGS=-flto
 BUILD_SHUTDOWN=no
 SANITIZEOPTS=-fsanitize=address,undefined
+
+# Notes:
+#   -flto (optional) : Use link-time optimisation
index 36f24967ae2c68b94a05677f354a293db8df0228..36ea49d1825f8c0775bba7e8130f4a841661ec5b 100644 (file)
@@ -8,9 +8,17 @@ SYSCONTROLSOCKET=/dev/dinitctl
 # General build options.
 
 # FreeBSD: use clang++ by default, supports sanitizers, requires linking with -lrt
-# Cannot use -fno-rtti: apparently prevents exception handling from working properly.
+# Cannot use LTO with default linker.
 CXX=clang++
-CXXOPTS=-std=c++11 -Os -Wall
+CXXOPTS=-std=c++11 -Os -Wall -fno-plt -fno-rtti
 LDFLAGS=-lrt
 BUILD_SHUTDOWN=no
 SANITIZEOPTS=-fsanitize=address,undefined
+
+# 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.
index 1d7363447fab138a1b061e3bc34224e8216e0d6b..74ad1901981f1debb97c993a256b9a880811b634 100644 (file)
@@ -8,9 +8,16 @@ SYSCONTROLSOCKET=/dev/dinitctl
 # General build options.
 
 # Linux (GCC). Note with GCC 5.x/6.x you must use the old ABI, with GCC 7.x you must use
-# the new ABI. See BUILD file for more information.
+# the new ABI. See BUILD.txt file for more information.
 CXX=g++
 CXXOPTS=-D_GLIBCXX_USE_CXX11_ABI=1 -std=c++11 -Os -Wall -fno-rtti -fno-plt -flto
 LDFLAGS=-flto -Os
 BUILD_SHUTDOWN=yes
 SANITIZEOPTS=-fsanitize=address,undefined
+
+# Notes:
+#   -D_GLIBCXX_USE_CXX11_ABI=1 : force use of new ABI, see above / BUILD.txt
+#   -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)
index acebd315321b71bbfb020161b961918c60bfffd2..097bcbb1330a77fec6ce7d5a5640fcd13ec3f729 100644 (file)
@@ -14,3 +14,6 @@ LDFLAGS=
 BUILD_SHUTDOWN=no
 SANITIZEOPTS=
 # (shutdown command not available for OpenBSD yet).
+
+# Notes:
+#   -fno-rtti (optional) : Dinit does not require C++ Run-time Type Information