On 7/18/21 10:14 PM, Simon Glass wrote:
At present if you build sandbox on a 32-bit host a lot of errors are
produced. This is because CONFIG_HOST_64BIT is enabled by default.

It is quite annoying to have to change that manually before building
sandbox. It is also quite confusing for new users.

Add a way to detect the setting and add the appropriate
CONFIG_HOST_64BIT=y or CONFIG_HOST_32BIT=y to the defconfig, to avoid
this issue.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v2:
- Drop patches previously applied
- Put all the packages in gcc.rst

  Makefile                 | 11 ++++++++++-
  arch/sandbox/Kconfig     | 13 ++++++++-----
  scripts/kconfig/Makefile | 14 +++++++++++++-
  3 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/Makefile b/Makefile
index bc404c8f989..0257d202597 100644
--- a/Makefile
+++ b/Makefile
@@ -565,8 +565,17 @@ export KBUILD_DEFCONFIG KBUILD_KCONFIG
  config: scripts_basic outputmakefile FORCE
        $(Q)$(MAKE) $(build)=scripts/kconfig $@

+# If nothing is specified explicitly, detect the bit size for sandbox,
+# referred to from arch/sandbox/Kconfig
+# Add it to the end of the defconfig file
  %config: scripts_basic outputmakefile FORCE
-       $(Q)$(MAKE) $(build)=scripts/kconfig $@
+       $(Q)if test -f $(srctree)/configs/$@ && \
+               ! grep -Eq "CONFIG_HOST_(32|64)BIT=y" $(srctree)/configs/$@; 
then \
+               echo '#include <stdio.h>\nint main(void) { 
printf("CONFIG_HOST_%dBIT=y\\n", __WORDSIZE); return 0; }' \
+                        | gcc -x c - -o get_word_size; \
+               extra=$$(./get_word_size); \
+       fi; \
+       $(MAKE) $(build)=scripts/kconfig EXTRA_DEFCONFIG=$$extra $@

  else
  # ===========================================================================
diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig
index f83282d9d56..01b2a3fcad1 100644
--- a/arch/sandbox/Kconfig
+++ b/arch/sandbox/Kconfig
@@ -35,12 +35,12 @@ config SYS_CONFIG_NAME

  choice
        prompt "Run sandbox on 32/64-bit host"
-       default HOST_64BIT
+       default HOST_DETECT_BIT
        help
-         Sandbox can be built on 32-bit and 64-bit hosts.
-         The default is to build on a 64-bit host and run
-         on a 64-bit host. If you want to run sandbox on
-         a 32-bit host, change it here.
+         Sandbox can be built on 32-bit and 64-bit hosts. This is generally
+         auto-detected but you can force a particular word size here. If you
+         see strange warnings about SANDBOX_BITS_PER_LONG then you may have
+         selected the wrong value.

  config HOST_32BIT
        bool "32-bit host"
@@ -49,6 +49,9 @@ config HOST_32BIT
  config HOST_64BIT
        bool "64-bit host"

+config HOST_DETECT_BIT

%s/BIT/BITNESS/

HOST_DETECT_BITNESS would better express the meaning of the flag.
Cf. https://en.wiktionary.org/wiki/bitness

+       bool "Auto-detect bit size"

The flag does not enable detecting the size of a bit.

boot "Auto-detect bitness."

Best regards

Heinrich

+
  endchoice

  config SANDBOX_CRASH_RESET
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index d52128425ce..8e14db7ade3 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -12,6 +12,9 @@ PHONY += xconfig gconfig menuconfig config localmodconfig 
localyesconfig \
  #  Set SRCARCH to .. fake this Makefile.
  SRCARCH := ..

+# For U-Boot, EXTRA_DEFCONFIG contains a line to be added to the defconfig
+# before processing. If empty, no line is added.
+
  ifdef KBUILD_KCONFIG
  Kconfig := $(KBUILD_KCONFIG)
  else
@@ -92,8 +95,17 @@ else
  endif
  endif

+# If EXTRA_DEFCONFIG is defined, add it to the end of the defconfig, before
+# processing. This allows the caller to change a setting on the fly
  %_defconfig: $(obj)/conf
-       $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
+       $(Q)defconfig="$(srctree)/arch/$(SRCARCH)/configs/$@"; \
+       if [ -n "$(EXTRA_DEFCONFIG)" ]; then \
+               cat $$defconfig >defconfig_tmp; \
+               echo $(EXTRA_DEFCONFIG) >>defconfig_tmp; \
+               $< $(silent) --defconfig=defconfig_tmp $(Kconfig); \
+       else \
+               $< $(silent) --defconfig=$$defconfig $(Kconfig); \
+       fi

  # Added for U-Boot (backward compatibility)
  %_config: %_defconfig


Reply via email to