Skip to contentSkip to conversation

x86: Enable 32-bit build using x86_64 multilib toolchain

PATCH New Vasili Galka 2 participants 3 messages Jun 10, 2014 – Jun 26, 2014 x86

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 x86: Enable 32-bit build using x86_64 multilib toolchain

Until now building the x86 arch boards required 32-bit toolchain. As many x86_64 toolchains come with 32-bit support (multilib) that's a good idea to enable build with such toolchains.

The change required was to specify the usage of 32-bit explicitly to the compiler and the linker (-m32 and -m elf_i386 flags) and locate the right libgcc path.

---

For example on x86_64 Ubuntu "sudo apt-get install gcc-multilib" is enough and no need to install additional 32-bit toolchain.

 arch/x86/config.mk     |    5 +++--
 arch/x86/cpu/config.mk |    2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)
arch/x86/config.mk +3 -2
index 38cb7c9..3106079 100644
@@ -16,17 +16,18 @@ PF_CPPFLAGS_X86   := $(call cc-option, -fno-toplevel-reorder, \
 PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_X86)
 PLATFORM_CPPFLAGS += -fno-dwarf2-cfi-asm
 PLATFORM_CPPFLAGS += -DREALMODE_BASE=0x7c0
+PLATFORM_CPPFLAGS += -march=i386 -m32
 
 # Support generic board on x86
 __HAVE_ARCH_GENERIC_BOARD := y
 
 PLATFORM_RELFLAGS += -ffunction-sections -fvisibility=hidden
 
-PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions
+PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions -m elf_i386
 
 LDFLAGS_FINAL += --gc-sections -pie
 LDFLAGS_FINAL += --wrap=__divdi3 --wrap=__udivdi3
 LDFLAGS_FINAL += --wrap=__moddi3 --wrap=__umoddi3
 
-export NORMAL_LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
+export NORMAL_LIBGCC = $(shell $(CC) $(PLATFORM_CPPFLAGS) -print-libgcc-file-name)
 CONFIG_USE_PRIVATE_LIBGCC := arch/x86/lib
arch/x86/cpu/config.mk +1 -1
index c1568cac..4b2c873 100644
@@ -7,7 +7,7 @@
 
 CROSS_COMPILE ?= i386-linux-
 
-PLATFORM_CPPFLAGS += -DCONFIG_X86 -D__I386__ -march=i386 -Werror
+PLATFORM_CPPFLAGS += -DCONFIG_X86 -D__I386__ -Werror
 
 # DO NOT MODIFY THE FOLLOWING UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!
 LDPPFLAGS += -DRESET_SEG_START=0xffff0000
Signature · 1 line
1.7.9
#1 lore raw

PATCH 1/1 x86: Enable 32-bit build using x86_64 multilib toolchain

Quoted 4 lines · Vasili Galka

Until now building the x86 arch boards required 32-bit toolchain. As many x86_64 toolchains come with 32-bit support (multilib) that's a good idea to enable build with such toolchains.

Quoted 8 lines

The change required was to specify the usage of 32-bit explicitly to the compiler and the linker (-m32 and -m elf_i386 flags) and locate the right libgcc path.

---

For example on x86_64 Ubuntu "sudo apt-get install gcc-multilib" is enough and no need to install additional 32-bit toolchain.

This seems reasonable to me.

#2 lore raw

PATCH 1/1 x86: Enable 32-bit build using x86_64 multilib toolchain

Quoted 9 lines · Simon Glass
Quoted 8 lines · Vasili Galka

Until now building the x86 arch boards required 32-bit toolchain. As many x86_64 toolchains come with 32-bit support (multilib) that's a good idea to enable build with such toolchains.

The change required was to specify the usage of 32-bit explicitly to the compiler and the linker (-m32 and -m elf_i386 flags) and locate the right libgcc path.

Quoted 8 lines
Quoted 4 lines

---

For example on x86_64 Ubuntu "sudo apt-get install gcc-multilib" is enough and no need to install additional 32-bit toolchain.

This seems reasonable to me.

Applied to u-boot-x86/sandbox, thanks!