Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: compile edk2 on Ubuntu 24.04 using stable/202011 fails due to /usr/bin/ld: ../bin/BrotliCompress: hidden symbol kBrotliCopyExtra' isn't defined` #10834

Open
2 of 4 tasks
chaos-prevails opened this issue Mar 9, 2025 · 2 comments

Comments

@chaos-prevails
Copy link

Is there an existing issue for this?

  • I have searched existing issues

Bug Type

  • Firmware
  • Tool
  • Unit Test

What packages are impacted?

BaseTools

Which targets are impacted by this bug?

No response

Current Behavior

Hello,

I try to compile the i915ovmfPkg (https://github.com/x78x79x82x79/i915ovmfPkg) which requires edk2 and edk2-platforms. I have a build error within edk2 (still, please redirect me to the correct issue tracker if this is not the correct one)

I have installed the following packages (also according to the old wiki, see below):

ii automake 1:1.16.5-1.3ubuntu1
ii build-essential 12.10ubuntu1
ii clang 1:18.0-59~exp2
ii clang-18 1:18.1.3-1ubuntu1
ii cmake 3.28.3-1build7
ii cmake-data 3.28.3-1build7
ii gcc 4:13.2.0-7ubuntu1
ii gcc-13 13.3.0-6ubuntu2~24.04
ii gcc-13-base:amd64 13.3.0-6ubuntu2~24.04
ii gcc-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04
ii gcc-14-base:amd64 14.2.0-4ubuntu2~24.04
ii gcc-x86-64-linux-gnu 4:13.2.0-7ubuntu1
ii git 1:2.43.0-1ubuntu7.2
ii git-man 1:2.43.0-1ubuntu7.2
ii nasm 2.16.01-1build1
ii python-is-python3 3.11.4-1
ii python3-pip 24.0+dfsg-1ubuntu1.1
ii python3-setuptools 68.1.2-2ubuntu1.1
ii uuid-dev:amd64 2.39.3-9ubuntu6.2

As (partly) documented, I:

  1. clone side-by-side i915ovmfPkg, edk2 and edk2-platforms
  2. according to old wiki (https://github.com/patmagauran/i915ovmfPkg/wiki/Compiling) I then change
  3. edk2 branch to stable/202011 (because I think BaseMemEncryptSevLib.inf is changed to DxeMemEncryptSevLib.inf afterwards, see [edk2-devel] [PATCH v3 00/15] SEV-ES security mitigations -- push #1317)
  4. update all submodules in edk2 and edk2-platforms
  5. change ./i915ovmfPkg/config according to my environment
  6. set TARGET_ARCH in ./edk2/Conf/target.txt to X64
  7. try to build it with ./i915ovmfPkg/build.sh

However, the building fails with:

root@coss:/home/gen/i915dev/i915ovmfPkg# ./build.sh 
Loading previous configuration from /home/gen/i915dev/edk2/Conf/BuildEnv.sh
WORKSPACE: /home/gen/i915dev
EDK_TOOLS_PATH: /home/gen/i915dev/edk2/BaseTools
CONF_PATH: /home/gen/i915dev/edk2/Conf
make: Entering directory '/home/gen/i915dev/edk2/BaseTools'
make -C Source/C
make[1]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C'
Attempting to detect HOST_ARCH from 'uname -m': x86_64
Detected HOST_ARCH of X64 using uname.
mkdir -p .
make -C Common
make[2]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C/Common'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C/Common'
make -C BrotliCompress
make[2]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress'
make[2]: *** No rule to make target 'brotli/c/include/brotli/shared_dictionary.h', needed by 'BrotliCompress.o'.  Stop.
make[2]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress'
make[1]: *** [GNUmakefile:77: BrotliCompress] Error 2
make[1]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C'
make: *** [GNUmakefile:19: Source/C] Error 2
make: Leaving directory '/home/gen/i915dev/edk2/BaseTools'
Build environment: Linux-6.8.0-54-generic-x86_64-with-glibc2.39
Build start time: 11:30:18, Mar.09 2025

WORKSPACE        = /home/gen/i915dev
PACKAGES_PATH    = /home/gen/i915dev/edk2:/home/gen/i915dev/edk2-platforms
EDK_TOOLS_PATH   = /home/gen/i915dev/edk2/BaseTools
CONF_PATH        = /home/gen/i915dev/edk2/Conf
PYTHON_COMMAND   = /usr/bin/python3


Architecture(s)  = X64
Build target     = DEBUG

Processing meta-data .Toolchain        = VS2022

Active Platform          = /home/gen/i915dev/i915ovmfPkg/i915ovmf.dsc

FLASH_DEFINITION = None

Library instances of module [/home/gen/i915dev/i915ovmfPkg/i915ovmf.inf] [X64]:
        BaseLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseLib/BaseLib.inf
        BaseMemoryLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
        DebugLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
        DevicePathLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLibOptionalDevicePathProtocol.inf
        FrameBufferBltLib : /home/gen/i915dev/edk2/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
        MemoryAllocationLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
        PcdLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
        PciLib : /home/gen/i915dev/edk2/OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
        UefiBootServicesTableLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
        UefiDriverEntryPoint : /home/gen/i915dev/edk2/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
        UefiLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiLib/UefiLib.inf
        MemEncryptSevLib : /home/gen/i915dev/edk2/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf
        CacheMaintenanceLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
        CpuLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
        PrintLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePrintLib/BasePrintLib.inf
        UefiRuntimeServicesTableLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
        PciCf8Lib : /home/gen/i915dev/edk2/MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf
        PciExpressLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
        IoLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
        SerialPortLib : /home/gen/i915dev/edk2/PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
        DebugPrintErrorLevelLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
 

- Failed -
Build end time: 11:30:19, Mar.09 2025
Build total time: 00:00:01

so apparently some includes are missing.
I get them from https://github.com/google/brotli.git and move the checked out code to /edk2/BaseTools/Source/C/BrotliCompress/brotli (renaming the existing directory). I guess there are better ways, but well.

I try to build again, but it still fails with:

root@coss:/home/gen/i915dev/i915ovmfPkg# ./build.sh 
Loading previous configuration from /home/gen/i915dev/edk2/Conf/BuildEnv.sh
WORKSPACE: /home/gen/i915dev
EDK_TOOLS_PATH: /home/gen/i915dev/edk2/BaseTools
CONF_PATH: /home/gen/i915dev/edk2/Conf
make: Entering directory '/home/gen/i915dev/edk2/BaseTools'
make -C Source/C
make[1]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C'
Attempting to detect HOST_ARCH from 'uname -m': x86_64
Detected HOST_ARCH of X64 using uname.
mkdir -p .
make -C Common
make[2]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C/Common'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C/Common'
make -C BrotliCompress
make[2]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress'
gcc -o ../bin/BrotliCompress  BrotliCompress.o brotli/c/common/dictionary.o brotli/c/common/transform.o brotli/c/dec/bit_reader.o brotli/c/dec/decode.o brotli/c/dec/huffman.o brotli/c/dec/state.o brotli/c/enc/backward_references.o brotli/c/enc/backward_references_hq.o brotli/c/enc/bit_cost.o brotli/c/enc/block_splitter.o brotli/c/enc/brotli_bit_stream.o brotli/c/enc/cluster.o brotli/c/enc/compress_fragment.o brotli/c/enc/compress_fragment_two_pass.o brotli/c/enc/dictionary_hash.o brotli/c/enc/encode.o brotli/c/enc/encoder_dict.o brotli/c/enc/entropy_encode.o brotli/c/enc/histogram.o brotli/c/enc/literal_cost.o brotli/c/enc/memory.o brotli/c/enc/metablock.o brotli/c/enc/static_dict.o brotli/c/enc/utf8_util.o -L../libs -lm
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: warning: relocation against `_kBrotliPrefixCodeRanges' in read-only section `.text'
/usr/bin/ld: brotli/c/dec/decode.o: in function `ReadBlockLength':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:932:(.text+0x804): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/dec/decode.o: in function `PrepareLiteralDecoding':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:1247:(.text+0x90c): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/dec/decode.o: in function `SafeReadBlockLength':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:951:(.text+0x9f1): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/dec/decode.o: in function `PrepareLiteralDecoding':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:1247:(.text+0xc51): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/dec/decode.o: in function `ReadBlockLength':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:932:(.text+0xe2c): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:932:(.text+0x102c): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/dec/decode.o: in function `SafeReadBlockLength':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:951:(.text+0x2ae1): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:951:(.text+0x2e61): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/dec/decode.o: in function `BrotliDecoderAttachDictionary':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:1608:(.text+0x5341): undefined reference to `BrotliSharedDictionaryAttach'
/usr/bin/ld: brotli/c/dec/decode.o: in function `SafeReadBlockLength':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:951:(.text+0x5be3): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/dec/decode.o: in function `PrepareLiteralDecoding':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/decode.c:1247:(.text+0x5f4f): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/dec/state.o: in function `BrotliDecoderStateInit':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/state.c:105:(.text+0x11e): undefined reference to `BrotliSharedDictionaryCreateInstance'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/state.c:113:(.text+0x15b): undefined reference to `BrotliDefaultAllocFunc'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/state.c:113:(.text+0x162): undefined reference to `BrotliDefaultFreeFunc'
/usr/bin/ld: brotli/c/dec/state.o: in function `BrotliDecoderStateCleanup':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/dec/state.c:160:(.text+0x2ee): undefined reference to `BrotliSharedDictionaryDestroyInstance'
/usr/bin/ld: brotli/c/enc/backward_references_hq.o: in function `FastLog2':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x4b6): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x52b): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x593): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x68e): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x6f6): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: brotli/c/enc/backward_references_hq.o:/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/backward_references_hq.c:236: more undefined references to `kBrotliLog2Table' follow
/usr/bin/ld: brotli/c/enc/backward_references_hq.o: in function `UpdateNodes':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/backward_references_hq.c:457:(.text+0x9c6): undefined reference to `kBrotliInsExtra'
/usr/bin/ld: brotli/c/enc/backward_references_hq.o: in function `UpdateZopfliNode':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/backward_references_hq.c:269:(.text+0xca1): undefined reference to `kBrotliCopyExtra'
/usr/bin/ld: brotli/c/enc/backward_references_hq.o: in function `UpdateNodes':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/backward_references_hq.c:576:(.text+0x1147): undefined reference to `kBrotliCopyExtra'
/usr/bin/ld: brotli/c/enc/bit_cost.o: in function `FastLog2':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x90): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0xba): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x301): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x339): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x376): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: brotli/c/enc/bit_cost.o:/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54: more undefined references to `kBrotliLog2Table' follow
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `BlockLengthPrefixCode':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:40:(.text+0x1b5): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:40:(.text+0x3b0): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `GetInsertExtra':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/command.h:97:(.text+0x735): undefined reference to `kBrotliInsExtra'
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `StoreCommandExtra':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:95:(.text+0x73c): undefined reference to `kBrotliCopyExtra'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:93:(.text+0x747): undefined reference to `kBrotliCopyBase'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:92:(.text+0x75a): undefined reference to `kBrotliInsBase'
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `NextBlockTypeCode':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:64:(.text+0x10fa): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `BlockLengthPrefixCode':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:40:(.text+0x1278): undefined reference to `_kBrotliPrefixCodeRanges'
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `BrotliStoreMetaBlock':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:960:(.text+0x2399): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `GetInsertExtra':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/command.h:97:(.text+0x2a85): undefined reference to `kBrotliInsExtra'
/usr/bin/ld: brotli/c/enc/brotli_bit_stream.o: in function `StoreCommandExtra':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:93:(.text+0x2a90): undefined reference to `kBrotliCopyBase'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:95:(.text+0x2a9e): undefined reference to `kBrotliCopyExtra'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/brotli_bit_stream.c:92:(.text+0x2aab): undefined reference to `kBrotliInsBase'
/usr/bin/ld: brotli/c/enc/cluster.o: in function `FastLog2':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x5d): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x359): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0xeee): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x11c0): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x1cfe): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: brotli/c/enc/cluster.o:/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54: more undefined references to `kBrotliLog2Table' follow
/usr/bin/ld: brotli/c/enc/encode.o: in function `WriteMetaBlockInternal':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encode.c:492:(.text+0x878): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/enc/encode.o: in function `FastLog2':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0xf03): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0xff5): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x10f3): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x113e): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x1240): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: brotli/c/enc/encode.o: in function `ShouldUseComplexStaticContextMap':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encode.c:355:(.text+0x1423): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/enc/encode.o: in function `FastLog2':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x1537): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x156f): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x15b6): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x15ec): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x1932): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: brotli/c/enc/encode.o:/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54: more undefined references to `kBrotliLog2Table' follow
/usr/bin/ld: brotli/c/enc/encode.o: in function `EncodeData':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encode.c:1070:(.text+0x21fd): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/enc/encode.o: in function `BrotliEncoderPrepareDictionary':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encode.c:1734:(.text+0x6fb5): undefined reference to `CreatePreparedDictionary'
/usr/bin/ld: brotli/c/enc/encode.o: in function `BrotliEncoderDestroyPreparedDictionary':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encode.c:1773:(.text+0x705d): undefined reference to `DestroyPreparedDictionary'
/usr/bin/ld: brotli/c/enc/encode.o: in function `BrotliEncoderAttachPreparedDictionary':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encode.c:1826:(.text+0x717f): undefined reference to `AttachPreparedDictionary'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encode.c:1803:(.text+0x71b1): undefined reference to `AttachPreparedDictionary'
/usr/bin/ld: brotli/c/enc/encoder_dict.o: in function `BrotliCleanupSharedEncoderDictionary':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/encoder_dict.c:598:(.text+0x200): undefined reference to `DestroyPreparedDictionary'
/usr/bin/ld: brotli/c/enc/histogram.o: in function `BrotliBuildHistogramsWithContext':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/histogram.c:72:(.text+0x178): undefined reference to `_kBrotliContextLookupTable'
/usr/bin/ld: brotli/c/enc/literal_cost.o: in function `FastLog2':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0xd3): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0xed): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x4c9): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x4e3): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: brotli/c/enc/memory.o: in function `BrotliInitMemoryManager':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/memory.c:49:(.text+0x1b): undefined reference to `BrotliDefaultAllocFunc'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/memory.c:49:(.text+0x22): undefined reference to `BrotliDefaultFreeFunc'
/usr/bin/ld: brotli/c/enc/metablock.o: in function `FastLog2':
/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x370): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x3a6): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x3e8): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x4c3): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: /home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54:(.text+0x4f8): undefined reference to `kBrotliLog2Table'
/usr/bin/ld: brotli/c/enc/metablock.o:/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:54: more undefined references to `kBrotliLog2Table' follow
/usr/bin/ld: ../bin/BrotliCompress: hidden symbol `kBrotliCopyExtra' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [../Makefiles/app.makefile:18: ../bin/BrotliCompress] Error 1
make[2]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress'
make[1]: *** [GNUmakefile:77: BrotliCompress] Error 2
make[1]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C'
make: *** [GNUmakefile:19: Source/C] Error 2
make: Leaving directory '/home/gen/i915dev/edk2/BaseTools'
Build environment: Linux-6.8.0-54-generic-x86_64-with-glibc2.39
Build start time: 11:32:34, Mar.09 2025

WORKSPACE        = /home/gen/i915dev
PACKAGES_PATH    = /home/gen/i915dev/edk2:/home/gen/i915dev/edk2-platforms
EDK_TOOLS_PATH   = /home/gen/i915dev/edk2/BaseTools
CONF_PATH        = /home/gen/i915dev/edk2/Conf
PYTHON_COMMAND   = /usr/bin/python3


Architecture(s)  = X64

Processing meta-data .Build target     = DEBUG
Toolchain        = VS2022

Active Platform          = /home/gen/i915dev/i915ovmfPkg/i915ovmf.dsc

FLASH_DEFINITION = None

Library instances of module [/home/gen/i915dev/i915ovmfPkg/i915ovmf.inf] [X64]:
        BaseLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseLib/BaseLib.inf
        BaseMemoryLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
        DebugLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
        DevicePathLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLibOptionalDevicePathProtocol.inf
        FrameBufferBltLib : /home/gen/i915dev/edk2/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
        MemoryAllocationLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
        PcdLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
        PciLib : /home/gen/i915dev/edk2/OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
        UefiBootServicesTableLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
        UefiDriverEntryPoint : /home/gen/i915dev/edk2/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
        UefiLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiLib/UefiLib.inf
        MemEncryptSevLib : /home/gen/i915dev/edk2/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf
        CacheMaintenanceLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
        CpuLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
        PrintLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePrintLib/BasePrintLib.inf
        UefiRuntimeServicesTableLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
        PciCf8Lib : /home/gen/i915dev/edk2/MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf
        PciExpressLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
        IoLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
        SerialPortLib : /home/gen/i915dev/edk2/PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
        DebugPrintErrorLevelLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
 

- Failed -
Build end time: 11:32:35, Mar.09 2025
Build total time: 00:00:01

so now there is an issue with /usr/bin/ld: ../bin/BrotliCompress: hidden symbol kBrotliCopyExtra' isn't defined`

I don't know how to proceed. Maybe it is a small issue? I understand that this is not the issue tracker of i915ovmfPkg (where I cannot add an issue) but the problems relies with brotli within the the edk2 repository.

might somebody help me fix this? I would then be more than happy to ask getting the documentation on i915ovmfPkg updated to reflect newer building environments.

Expected Behavior

i915ovmfPkg should build fine because edk2 builds fine.

Steps To Reproduce

  1. use Ubuntu 24.04 and update it completly
  2. follow the build instructions on i915ovmfPkg (see details above)
  3. try to build i915ovmfPkg

Build Environment

- OS(s): 24.04
- Tool Chain(s):
ii automake 1:1.16.5-1.3ubuntu1
ii build-essential 12.10ubuntu1
ii clang 1:18.0-59~exp2
ii clang-18 1:18.1.3-1ubuntu1
ii cmake 3.28.3-1build7
ii cmake-data 3.28.3-1build7
ii gcc 4:13.2.0-7ubuntu1
ii gcc-13 13.3.0-6ubuntu2~24.04
ii gcc-13-base:amd64 13.3.0-6ubuntu2~24.04
ii gcc-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04
ii gcc-14-base:amd64 14.2.0-4ubuntu2~24.04
ii gcc-x86-64-linux-gnu 4:13.2.0-7ubuntu1
ii git 1:2.43.0-1ubuntu7.2
ii git-man 1:2.43.0-1ubuntu7.2
ii nasm 2.16.01-1build1
ii python-is-python3 3.11.4-1
ii python3-pip 24.0+dfsg-1ubuntu1.1
ii python3-setuptools 68.1.2-2ubuntu1.1
ii uuid-dev:amd64 2.39.3-9ubuntu6.2

Version Information

stable/202011

Urgency

Low

Are you going to fix this?

Someone else needs to fix it

Do you need maintainer feedback?

Maintainer feedback requested

Anything else?

No response

@chaos-prevails chaos-prevails added state:needs-triage type:bug Something isn't working labels Mar 9, 2025
@chaos-prevails chaos-prevails changed the title [Bug]: compile edk2 on Ubuntu 24.04 using stable/202011 fails due to [Bug]: compile edk2 on Ubuntu 24.04 using stable/202011 fails due to /usr/bin/ld: ../bin/BrotliCompress: hidden symbol kBrotliCopyExtra' isn't defined` Mar 9, 2025
@lgao4
Copy link
Contributor

lgao4 commented Mar 13, 2025

please check submodule pull correctly, and please give gcc version to be used for build the tools? can you try the latest edk2 version?

@chaos-prevails
Copy link
Author

chaos-prevails commented Mar 15, 2025

hello,

thanks:

gcc:

gcc --version
gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

I tried to re-check out submodules with git submodule update --init in ./edk2 I get:

root@coss:/home/gen/i915dev/i915ovmfPkg# ./build.sh 
Loading previous configuration from /home/gen/i915dev/edk2/Conf/BuildEnv.sh
WORKSPACE: /home/gen/i915dev
EDK_TOOLS_PATH: /home/gen/i915dev/edk2/BaseTools
CONF_PATH: /home/gen/i915dev/edk2/Conf
make: Entering directory '/home/gen/i915dev/edk2/BaseTools'
make -C Source/C
make[1]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C'
Attempting to detect HOST_ARCH from 'uname -m': x86_64
Detected HOST_ARCH of X64 using uname.
mkdir -p .
make -C Common
make[2]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C/Common'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C/Common'
make -C BrotliCompress
make[2]: Entering directory '/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress'
make[2]: *** No rule to make target 'brotli/c/include/brotli/shared_dictionary.h', needed by 'BrotliCompress.o'.  Stop.
make[2]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress'
make[1]: *** [GNUmakefile:77: BrotliCompress] Error 2
make[1]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C'
make: *** [GNUmakefile:19: Source/C] Error 2
make: Leaving directory '/home/gen/i915dev/edk2/BaseTools'
Build environment: Linux-6.8.0-54-generic-x86_64-with-glibc2.39
Build start time: 13:15:56, Mar.15 2025

WORKSPACE        = /home/gen/i915dev
PACKAGES_PATH    = /home/gen/i915dev/edk2:/home/gen/i915dev/edk2-platforms
EDK_TOOLS_PATH   = /home/gen/i915dev/edk2/BaseTools
CONF_PATH        = /home/gen/i915dev/edk2/Conf
PYTHON_COMMAND   = /usr/bin/python3


Processing meta-data .
Architecture(s)  = X64
Build target     = DEBUG
Toolchain        = VS2022

Active Platform          = /home/gen/i915dev/i915ovmfPkg/i915ovmf.dsc

FLASH_DEFINITION = None

Library instances of module [/home/gen/i915dev/i915ovmfPkg/i915ovmf.inf] [X64]:
        BaseLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseLib/BaseLib.inf
        BaseMemoryLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
        DebugLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
        DevicePathLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLibOptionalDevicePathProtocol.inf
        FrameBufferBltLib : /home/gen/i915dev/edk2/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
        MemoryAllocationLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
        PcdLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
        PciLib : /home/gen/i915dev/edk2/OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
        UefiBootServicesTableLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
        UefiDriverEntryPoint : /home/gen/i915dev/edk2/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
        UefiLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiLib/UefiLib.inf
        MemEncryptSevLib : /home/gen/i915dev/edk2/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf
        CacheMaintenanceLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
        CpuLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
        PrintLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePrintLib/BasePrintLib.inf
        UefiRuntimeServicesTableLib : /home/gen/i915dev/edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
        PciCf8Lib : /home/gen/i915dev/edk2/MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf
        PciExpressLib : /home/gen/i915dev/edk2/MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
        IoLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
        SerialPortLib : /home/gen/i915dev/edk2/PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
        DebugPrintErrorLevelLib : /home/gen/i915dev/edk2/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
 

- Failed -
Build end time: 13:15:57, Mar.15 2025
Build total time: 00:00:01

I think I cannot use the latest edk2 version because for the i915ovmf package I need stable/202011 for BaseMemEncryptSevLib.inf instead of DxeMemEncryptSevLib.inf

If I re-checkout edk2 master branch, and update all submodules, I end up (again) with:

....
Ran 303 tests in 3.352s

OK
make[1]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Tests'
make: Leaving directory '/home/gen/i915dev/edk2/BaseTools'
Build environment: Linux-6.8.0-54-generic-x86_64-with-glibc2.39
Build start time: 13:28:24, Mar.15 2025

WORKSPACE        = /home/gen/i915dev
PACKAGES_PATH    = /home/gen/i915dev/edk2:/home/gen/i915dev/edk2-platforms
EDK_TOOLS_PATH   = /home/gen/i915dev/edk2/BaseTools
CONF_PATH        = /home/gen/i915dev/edk2/Conf
PYTHON_COMMAND   = python3


Processing meta-data .
Architecture(s)  = X64
Build target     = DEBUG
Toolchain        = VS2022

Active Platform          = /home/gen/i915dev/i915ovmfPkg/i915ovmf.dsc

FLASH_DEFINITION = None


build.py...
/home/gen/i915dev/i915ovmfPkg/i915ovmf.dsc(133): error 000E: File/directory not found in workspace
        OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf is not found in packages path:
        /home/gen/i915dev/edk2
        /home/gen/i915dev/edk2-platforms
 

- Failed -
Build end time: 13:28:24, Mar.15 2025
Build total time: 00:00:00

I think the problem is that for the release 202011 there is no shared_dictionary.h in ./brotli/c/include/brotli:
https://github.com/google/brotli/tree/666c3280cc11dc433c303d79a83d4ffbdd12cc8d/c/include/brotli

but there is in the current edk2 master
https://github.com/google/brotli/tree/f4153a09f87cbb9c826d8fc12c74642bb2d879ea/c/include/brotli

If I try to copy latest brotli submodule to the 202011 release, I get the above error message of

/usr/bin/ld: brotli/c/enc/metablock.o:/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:53: more undefined references to `kBrotliLog2Table' follow
/usr/bin/ld: ../bin/BrotliCompress: hidden symbol `kBrotliCopyExtra' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [../Makefiles/app.makefile:18: ../bin/BrotliCompress] Error 1
make[2]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C/BrotliCompress'
make[1]: *** [GNUmakefile:77: BrotliCompress] Error 2
make[1]: Leaving directory '/home/gen/i915dev/edk2/BaseTools/Source/C'
make: *** [GNUmakefile:19: Source/C] Error 2
make: Leaving directory '/home/gen/i915dev/edk2/BaseTools'
Build environment: Linux-6.8.0-54-generic-x86_64-with-glibc2.39
Build start time: 13:42:20, Mar.15 2025

so I'm not sure why the 202011 release wants brotli/c/include/brotli/shared_dictionary.h while at the time of this release, the brotli source did not have this file:

  1. edk2 stable202011: brotli @ 666c328
  2. edk2 master: brotli @ f4153a0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants