summaryrefslogtreecommitdiffstats
path: root/arch/x86/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/Makefile')
-rw-r--r--arch/x86/Makefile74
1 files changed, 67 insertions, 7 deletions
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 640c24b62a..e837a2df97 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -1,20 +1,47 @@
KBUILD_DEFCONFIG := generic_defconfig
-CPPFLAGS += -D__X86__ -fno-strict-aliasing
+CPPFLAGS += -D__X86__
-board-y := x86_generic
-machine-y := i386
+board-$(CONFIG_MACH_X86_GENERIC) := x86_generic
TEXT_BASE = $(CONFIG_TEXT_BASE)
-CPPFLAGS += -march=i386 -m32 -DTEXT_BASE=$(TEXT_BASE) \
+ifeq ($(CONFIG_X86_EFI),y)
+machine-y := efi
+CFLAGS += -fpic -fshort-wchar -mno-sse -mno-mmx
+ifeq ($(CONFIG_X86_32),y)
+ TARGET = efi-app-ia32
+else
+ TARGET = efi-app-x86_64
+endif
+else
+CPPFLAGS += -fno-strict-aliasing
+CPPFLAGS += -march=i386 -DTEXT_BASE=$(TEXT_BASE) \
-fno-unwind-tables -fno-asynchronous-unwind-tables
-LDFLAGS += -m elf_i386
+
+machine-y := i386
+endif
+
+ifeq ($(CONFIG_X86_32),y)
+ UTS_MACHINE := i386
+ biarch := $(call cc-option,-m32)
+ AFLAGS += $(biarch)
+ CFLAGS += $(biarch)
+ CPPFLAGS += $(biarch)
+else
+ UTS_MACHINE := x86_64
+ AFLAGS += -m64
+ CFLAGS += -m64 -mno-red-zone
+ CPPFLAGS += -m64
+endif
+
ifndef CONFIG_MODULES
# Add cleanup flags
+ifneq ($(CONFIG_X86_EFI),y)
CPPFLAGS += -fdata-sections -ffunction-sections
-LDFLAGS_uboot += -static --gc-sections
+LDFLAGS_barebox += -static --gc-sections
+endif
endif
machdirs := $(patsubst %,arch/x86/mach-%/,$(machine-y))
@@ -39,13 +66,46 @@ endif
common-y += $(BOARD) $(MACH)
common-y += arch/x86/lib/
-common-y += arch/x86/boot/
common-$(CONFIG_X86_BIOS_BRINGUP) += arch/x86/bios/
# arch/x86/cpu/
+ifeq ($(CONFIG_X86_EFI),y)
+lds-$(CONFIG_X86_32) := arch/x86/mach-efi/elf_ia32_efi.lds
+lds-$(CONFIG_X86_64) := arch/x86/mach-efi/elf_x86_64_efi.lds
+
+cmd_barebox__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_barebox) -o $@ \
+ -T $(lds-y) \
+ -shared -Bsymbolic -nostdlib -znocombreloc \
+ --start-group $(barebox-common) \
+ --end-group \
+ $(filter-out $(barebox-lds) $(barebox-common) FORCE ,$^)
+
+quiet_cmd_efi_image = EFI-IMG $@
+ cmd_efi_image = $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic \
+ -j .dynsym -j .rel -j .rela -j .reloc -j __barebox_initcalls \
+ -j __barebox_cmd -j .barebox_magicvar -j .bbenv.* \
+ --target=$(TARGET) $< $@
+
+KBUILD_BINARY := barebox
+
+LDFLAGS := --no-undefined
+
+barebox.efi: $(KBUILD_BINARY) FORCE
+ $(call if_changed,efi_image)
+
+KBUILD_IMAGE := barebox.efi
+
+else
+common-y += arch/x86/boot/
+
lds-$(CONFIG_GENERIC_LINKER_SCRIPT) := arch/x86/lib/barebox.lds
lds-$(CONFIG_BOARD_LINKER_SCRIPT) := $(BOARD)/barebox.lds
+endif
+
+LDFLAGS += -m elf_$(UTS_MACHINE)
+
+CLEAN_FILES += $(lds-y)
CLEAN_FILES += arch/x86/lib/barebox.lds barebox.map barebox.S