Kconfigで「&&n」とはどういう意味ですか?

Kconfigで「&&n」とはどういう意味ですか?

x32 ABIをサポートするLinux 6.7.2をコンパイルしようとしていますが、これが何を意味するのかわかりません。

Symbol: X86_X32_ABI [=n]
Type  : bool
Defined at arch/x86/Kconfig:3007
  Prompt: x32 ABI for 64-bit mode
  Depends on: X86_64 [=y] && n
  Location:
(3) -> Binary Emulations
      -> x32 ABI for 64-bit mode (X86_X32_ABI [=n])

実際にこのオプションを有効にするには、ninをどのように削除する必要がありますか?X86_64 [=y] && n

ベストアンサー1

参照位置:アーチ/x86/Kconfig:3007:

config X86_X32_ABI
  bool "x32 ABI for 64-bit mode"
  depends on X86_64
  # llvm-objcopy does not convert x86_64 .note.gnu.property or
  # compressed debug sections to x86_x32 properly:
  # https://github.com/ClangBuiltLinux/linux/issues/514
  # https://github.com/ClangBuiltLinux/linux/issues/1141
  depends on $(success,$(OBJCOPY) --version | head -n1 | grep -qv llvm)
  help
[...]

objcopyのLLVMバリアント(「一般的な」GNUバリアントではない)が、一部のオブジェクトをx86_64からx86_x32に正しく変換しないことを示しています。

したがって、このような事態を防ぐために、環境に応じたテストが追加されました。

通常、(GNU)はobjcopy次のように始まります。

$ objcopy --version | head -n1
GNU objcopy (GNU Binutils for Debian) 2.40

LLVMは次のように起動します。

$ llvm-objcopy --version | head -n1
llvm-objcopy, compatible with GNU objcopy

success上記はマクロです。これはLinuxソースコードで定義されています。:

[...]

if-success = $(shell,{ $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)")

# $(success,<command>)
# Return y if <command> exits with 0, n otherwise
success = $(if-success,$(1),y,n)

nこれはすべて、LLVMバリアントを使用するときobjcopy、依存関係が失敗したとき、および評価するとき(現在はGNUバリアントを使用する必要があることを意味します)y達成されます$(OBJCOPY) --version | head -n1 | grep -qv llvm

もう1つの注意:x86_x32 ABIサポートは、現在Clang / LLVMにコンパイルするときは使用できません。代わりにGCCを使用してください。

おすすめ記事