pw_toolchain: Make arm float printf optional

Removes floating point printf support from the default ARM toolchain and
makes it into an optional config that isn't added by default (since it
adds ~14KB of flash usage).

Change-Id: I340630fa596ae131b56e75c7acb2536766cd11b8
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12660
Reviewed-by: Keir Mierle <keir@google.com>
Reviewed-by: Alexei Frolov <frolv@google.com>
Commit-Queue: Armando Montanez <amontanez@google.com>
diff --git a/pw_toolchain/arm_gcc/BUILD.gn b/pw_toolchain/arm_gcc/BUILD.gn
index 1c4eef0..781047b 100644
--- a/pw_toolchain/arm_gcc/BUILD.gn
+++ b/pw_toolchain/arm_gcc/BUILD.gn
@@ -40,7 +40,6 @@
   cflags = asmflags + [
              "-specs=nano.specs",
              "-specs=nosys.specs",
-             "-u_printf_float",
            ]
   ldflags = cflags + [
               "-lnosys",
@@ -48,6 +47,11 @@
             ]
 }
 
+config("enable_float_printf") {
+  cflags = [ "-u_printf_float" ]
+  ldflags = cflags
+}
+
 config("cortex_m3") {
   cflags = [ "-mcpu=cortex-m3" ]
   asmflags = cflags
diff --git a/targets/lm3s6965evb-qemu/target_toolchains.gni b/targets/lm3s6965evb-qemu/target_toolchains.gni
index f2e9937..69e5528 100644
--- a/targets/lm3s6965evb-qemu/target_toolchains.gni
+++ b/targets/lm3s6965evb-qemu/target_toolchains.gni
@@ -60,6 +60,8 @@
   ]
 }
 
+_target_default_configs = [ "$dir_pw_toolchain/arm_gcc:enable_float_printf" ]
+
 pw_target_toolchain_lm3s6965evb_qemu = {
   _excluded_members = [
     "defaults",
@@ -73,6 +75,7 @@
     defaults = {
       forward_variables_from(_toolchain_base.defaults, "*")
       forward_variables_from(_target_config, "*")
+      default_configs += _target_default_configs
     }
   }
 
@@ -83,6 +86,7 @@
     defaults = {
       forward_variables_from(_toolchain_base.defaults, "*")
       forward_variables_from(_target_config, "*")
+      default_configs += _target_default_configs
     }
   }
 
@@ -93,6 +97,7 @@
     defaults = {
       forward_variables_from(_toolchain_base.defaults, "*")
       forward_variables_from(_target_config, "*")
+      default_configs += _target_default_configs
     }
   }
 }
diff --git a/targets/stm32f429i-disc1/target_toolchains.gni b/targets/stm32f429i-disc1/target_toolchains.gni
index 2e58432..350ac9e 100644
--- a/targets/stm32f429i-disc1/target_toolchains.gni
+++ b/targets/stm32f429i-disc1/target_toolchains.gni
@@ -63,6 +63,8 @@
   final_binary_extension = ".elf"
 }
 
+_target_default_configs = [ "$dir_pw_toolchain/arm_gcc:enable_float_printf" ]
+
 pw_target_toolchain_stm32f429i_disc1 = {
   _excluded_members = [
     "defaults",
@@ -77,6 +79,7 @@
     defaults = {
       forward_variables_from(_toolchain_base.defaults, "*")
       forward_variables_from(_target_config, "*")
+      default_configs += _target_default_configs
     }
   }
 
@@ -88,6 +91,7 @@
     defaults = {
       forward_variables_from(_toolchain_base.defaults, "*")
       forward_variables_from(_target_config, "*")
+      default_configs += _target_default_configs
     }
   }
 
@@ -99,6 +103,7 @@
     defaults = {
       forward_variables_from(_toolchain_base.defaults, "*")
       forward_variables_from(_target_config, "*")
+      default_configs += _target_default_configs
     }
   }
 }