pbatard / EfiFs

EFI FileSystem drivers
https://efi.akeo.ie
GNU General Public License v3.0
506 stars 77 forks source link

unrecognized option '--subsystem' #11

Closed ElvishJerricco closed 5 years ago

ElvishJerricco commented 5 years ago

After failing to build with EDK II (#10), I am now failing to build with GCC and make:

./set_grub_cpu.sh X64
make ARCH=x64 CROSS_COMPILE=x86_64-linux-gnu- -j 8 -l 8

And getting this error on both the latest release and on master.

[LD] btrfs_x64.efi
GNU ld (GNU Binutils for Debian) 2.28
  Supported emulations:
   elf_x86_64
   elf32_x86_64
   elf_i386
   elf_iamcu
   i386linux
   elf_l1om
   elf_k1om
   i386pep
   i386pe
/usr/bin/ld: unrecognized option '--subsystem'
/usr/bin/ld: use the --help option for usage information
pbatard commented 5 years ago

Don't use -j and don't use CROSS_COMPILE= for x64:

# make ARCH=x64
[CC] grub.o
[AR] libgrub.a
make -C .//src
make[1]: Entering directory '/usr/src/efifs/src'
make DRIVERNAME=affs DRIVERNAME_STR="Amiga FFS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] utf8.o
[CC] path.o
[CC] missing.o
[CC] logging.o
[CC] grub_file.o
[CC] this.o
[CC] file.o
[CC] driver.o
[LD] affs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=bfs DRIVERNAME_STR="BFS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] bfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=btrfs DRIVERNAME_STR="Btrfs" FSDIR=fs EXTRAMODULE=gzio EXTRAMODULEDIR=io -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] btrfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=exfat DRIVERNAME_STR="ExFAT" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] exfat_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=ext2 DRIVERNAME_STR="ext2/3/4" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] ext2_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=f2fs DRIVERNAME_STR="F2FS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] f2fs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=hfs DRIVERNAME_STR="HFS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] hfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=hfsplus DRIVERNAME_STR="HFS+" FSDIR=fs EXTRAMODULE=hfspluscomp EXTRAMODULEDIR=fs EXTRAMODULE2=gzio EXTRAMODULE2DIR=io -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] hfsplus_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=iso9660 DRIVERNAME_STR="ISO9660" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] iso9660_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=jfs DRIVERNAME_STR="JFS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] jfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=nilfs2 DRIVERNAME_STR="NILFS2" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] nilfs2_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=ntfs DRIVERNAME_STR="NTFS" FSDIR=fs EXTRAMODULE=ntfscomp EXTRAMODULEDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] ntfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=reiserfs DRIVERNAME_STR="ReiserFS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] reiserfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=sfs DRIVERNAME_STR="Amiga SFS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] sfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=udf DRIVERNAME_STR="UDF" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] udf_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=ufs2 DRIVERNAME_STR="UFS2 (LE)" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] ufs2_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=xfs DRIVERNAME_STR="XFS" FSDIR=fs -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] xfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make DRIVERNAME=zfs DRIVERNAME_STR="ZFS" FSDIR=fs/zfs EXTRAMODULE=gzio EXTRAMODULEDIR=io EXTRAOBJS="zfs_fletcher.o zfs_lz4.o zfs_lzjb.o zfs_sha256.o" -f /usr/src/efifs/src/../Make.common driver
make[2]: Entering directory '/usr/src/efifs/src'
[CC] this.o
[LD] zfs_x64.efi
make[2]: Leaving directory '/usr/src/efifs/src'
make[1]: Leaving directory '/usr/src/efifs/src'
ElvishJerricco commented 5 years ago

@pbatard If I don't use CROSS_COMPILE, I get which: no x86_64-w64-mingw32-gcc.

pbatard commented 5 years ago

Then you need to install that one. I may have forgotten to mention it in the README.

ElvishJerricco commented 5 years ago

@pbatard Why? Why wouldn't the Linux one work? Surely this is platform agnostic.

pbatard commented 5 years ago

Not it's not. EFI x86 binaries are basically Microsoft Windows DLLs, so you need something that can produce Microsoft-like code, which MinGW can, but vanilla gcc can't (at least when gnu-efi is being used).

ElvishJerricco commented 5 years ago

Ahh. Odd, but ok.

ElvishJerricco commented 5 years ago

And yea, that did fix it for me, thanks.

pbatard commented 5 years ago

Cool. I'll make sure to update the README when I get a chance. This is only needed for ia32/x64 though. arm/aa64 don't need MinGW (obviously).