在Mac上交叉编译clang / LLVM时如何禁用--version-script?

时间:2013-12-21 22:21:07

标签: macos clang llvm cross-compiling

我正在尝试在Mac上交叉编译基于ELLCC cross development tools project的clang / LLVM。我的目标是ARM / Linux。构建FileCheck(或tbl-gen或在cross-compile-build-tools步骤中构建的任何其他构建工具)时构建失败,因为构建规则试图将--version-script选项传递给链接器。有很多配置魔法正在进行,我似乎找不到在Mac上使用--version-script的咒语。

对我的问题稍作澄清。 ELLCC在Mac上构建良好并创建可用于创建ARM / Linux程序(或Mips / Linux,Microblaze / Linux,PowerPC / Linux等)的可执行文件。我遇到的麻烦是当我试图让ELLCC为目标编译时。

clang / LLVM需要它提供的几个工具才能在构建主机上运行。这些工具正在使用原生Mac clang正确编译为Mac可执行文件,但链接阶段混淆并试图使用--version-script,即使Mac链接器不支持它。

2 个答案:

答案 0 :(得分:1)

你的标题中几乎有魔法旗帜(或法术)。我想你可能在寻找:

   --disable-ld-version-script

还有一些建议和注意事项可以解决交叉编译问题here(交叉编译自引导工具可能与此相关)。

答案 1 :(得分:0)

事实证明,用于交叉构建内容的规则存在问题。当我在OS X上为Linux构建时,变量HOST_OS在Makefile.rules中是“Linux”。我不得不添加达尔文条件:

ifeq ($(HOST_OS), $(filter $(HOST_OS), DragonFly Linux NetBSD FreeBSD GNU/kFreeBSD GNU))
ifneq ($(shell uname -s),Darwin)
ifneq ($(ARCH), Mips)
  LD.Flags += -Wl,--version-script=$(LLVM_SRC_ROOT)/autoconf/ExportMap.map
endif
endif
endif
endif

可能应该有一个BUILD_OS与HOST_OS,或者HOST_OS在这里设置不正确。