How do I disable --version-script when cross compiling clang/LLVM on a Mac?

Hi,

I asked this question a few days ago and didn't get any responses. I thought I'd try again with a little more detail.

I am trying to cross compile my clang/LLVM based ELLCC cross development tools project (http://ellcc.org) on a Mac. I am targeting ARM/Linux. The build fails while building FileCheck (or tbl-gen or any of the other build tools built during the cross-compile-build-tools step) because the build rules try to pass the --version-script option to the linker. There is a lot of configure magic going on and I can't seem to find the spell that says not to use --version-script on a Mac.

A little clarification of my problem. ELLCC builds fine on a Mac and creates executables that can be used to create ARM/Linux programs (or Mips/Linux, Microblaze/Linux, PowerPC/Linux, etc). The trouble I'm having is when I try to make ELLCC compile itself for the target.

clang/LLVM needs several tools that it supplies that need to run on the build host. Those tools are being compiled properly as Mac executables using the native Mac clang, but the link stage is mixed up and trying to use --version-script even though the Mac linker doesn't support it.

Thanks in advance for any help.

-Rich

Hi,

I asked this question a few days ago and didn't get any responses. I thought I'd try again with a little more detail.

I am trying to cross compile my clang/LLVM based ELLCC cross development tools project (http://ellcc.org)

Hi Richard,

Nobody replied because your question lacks immediate relevance to this mailing list.

You may have more luck if you pose your question in a way that relates to, and can be tried using stock LLVM/clang.

If you think there's a bug, you can also file a bug report at http://llvm.org/bugs/ including the steps needed to reproduce the issue.

Feel free to CC me in, hope we can set you in the right direction.

Alp.

Hi Alp,

I hope you don't think I was whining about the lack of response, I wasn't. This list has always been extremely helpful. I understand that my use case is a bit out the norm.

I was just hoping that someone more familiar with the clang/LLVM cross build rules might be able to shed a little insight. I suspect that there aren't too many people using clang/LLVM to cross build for Linux on a Mac. The normal cross build on a Linux box for another Linux target works just fine.

-Rich

That last bit gave a better idea of what you're aiming for. I think I wasn't the only one confused by the original mail as it takes a stretch of the imagination for those not using your toolchain(!)

You'll have to test this yourself, but assuming you're on the Makefile build system and already set up correctly for a cross-compile, this might be the cause:

The variable HAVE_LINK_VERSION_SCRIPT determines how the linker is called, and is detected at configure time by autoconf/m4/link_options.m4.

Some of the Makefile.rules files have an additional ifeq ($(HOST_OS),Darwin) check surrounding use of that flag.

That check may be confusing the host and target platforms when building up linker flags, and if so you've found a corner-case bug in the build system. I'd suggest hard-coding values in a few of those places to see if you can get the right flags passed depending on whether a host or target binary is getting built.

Alp.

I found a band aid for my problem in Makefile.rules:
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

It turns out that HOST_OS is set to Linux for cross compiling in my case. I added the Darwin conditional. Did I configure something incorrectly?

-Rich

It seems it should be build OS, not host OS here...