Change x86/Makefile.common to invoke the linker directly instead of using the C compiler as a linker driver. Plumb LDFLAGS through to the linker. This supports building on illumos, allowing the user to use gold instead of the Solaris linker. Tested on Linux and illumos. Signed-off-by: Dan Cross <cross@xxxxxxxxxxxxxxxxx> --- x86/Makefile.common | 9 +++++---- x86/Makefile.i386 | 1 + x86/Makefile.x86_64 | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/x86/Makefile.common b/x86/Makefile.common index b903988..a600c72 100644 --- a/x86/Makefile.common +++ b/x86/Makefile.common @@ -30,7 +30,7 @@ endif OBJDIRS += lib/x86 -$(libcflat): LDFLAGS += -nostdlib +$(libcflat): LDFLAGS += -nostdlib $(arch_LDFLAGS) $(libcflat): CFLAGS += -ffreestanding -I $(SRCDIR)/lib -I lib COMMON_CFLAGS += -m$(bits) @@ -61,8 +61,9 @@ else # We want to keep intermediate file: %.elf and %.o .PRECIOUS: %.elf %.o +%.elf: LDFLAGS = -nostdlib $(arch_LDFLAGS) %.elf: %.o $(FLATLIBS) $(SRCDIR)/x86/flat.lds $(cstart.o) - $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,$(SRCDIR)/x86/flat.lds \ + $(LD) $(LDFLAGS) -T $(SRCDIR)/x86/flat.lds -o $@ \ $(filter %.o, $^) $(FLATLIBS) @chmod a-x $@ @@ -98,8 +99,8 @@ test_cases: $(tests-common) $(tests) $(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I $(SRCDIR)/lib -I $(SRCDIR)/lib/x86 -I lib $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o - $(CC) -m32 -nostdlib -o $@ -Wl,-m,elf_i386 \ - -Wl,-T,$(SRCDIR)/$(TEST_DIR)/realmode.lds $^ + $(LD) -m elf_i386 -nostdlib -o $@ \ + -T $(SRCDIR)/$(TEST_DIR)/realmode.lds $^ $(TEST_DIR)/realmode.o: bits = $(if $(call cc-option,-m16,""),16,32) diff --git a/x86/Makefile.i386 b/x86/Makefile.i386 index 7d19d55..0a845e6 100644 --- a/x86/Makefile.i386 +++ b/x86/Makefile.i386 @@ -4,6 +4,7 @@ ldarch = elf32-i386 exe = flat bin = elf COMMON_CFLAGS += -mno-sse -mno-sse2 +arch_LDFLAGS = -m elf_i386 cflatobjs += lib/x86/setjmp32.o lib/ldiv32.o diff --git a/x86/Makefile.x86_64 b/x86/Makefile.x86_64 index f18c1e2..e19284a 100644 --- a/x86/Makefile.x86_64 +++ b/x86/Makefile.x86_64 @@ -6,9 +6,11 @@ exe = efi bin = so FORMAT = efi-app-x86_64 cstart.o = $(TEST_DIR)/efi/efistart64.o +arch_LDFLAGS = '' else exe = flat bin = elf +arch_LDFLAGS = -m elf_x86_64 endif fcf_protection_full := $(call cc-option, -fcf-protection=full,) -- 2.36.1