Thread overview
cmake, ldc, and cross compiling
Jan 21, 2014
Dan Olson
Jan 21, 2014
Kai Nacke
Jan 21, 2014
Jacob Carlborg
Jan 23, 2014
Dan Olson
Jan 23, 2014
Jacob Carlborg
Jan 23, 2014
Dan Olson
Jan 23, 2014
Jacob Carlborg
Jan 23, 2014
Dan Olson
Jan 23, 2014
Jacob Carlborg
Jan 24, 2014
Dan Olson
January 21, 2014
When I build ldc as cross compiler to iOS (armv7-apple-darwin), I'd like
to:

- use gcc-4.8 to compile ldc to host
- use clang llvm to cross compile runtime C code to iOS

cmake seems to only have room from one C compiler.  Is there a way around this?

I was initially able to get away with using clang for both since I built it with all targets enabled.  Now I switched from clang to gcc for ldc build since llvm trunk insists on a newer stdc++.  Installing gcc-4.8 from macports was my solution.

I think supporting different compilers for ldc and runtime/phobos should be expected when cross compiling though.

Also, I'd like to add something like CACHE to RT_CFLAGS so that it can be set with cmake.  This will let the runtime C compiler be invoked with cross compile flags  like this:

set(RT_CFLAGS "-target armv7-apple-darwin -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk")

I have just been editing the CMakeLists.txt for now to set these flags.

-- 
Dan
January 21, 2014
Hi Dan!

On Tuesday, 21 January 2014 at 08:23:45 UTC, Dan Olson wrote:
> When I build ldc as cross compiler to iOS (armv7-apple-darwin), I'd like
> to:
>
> - use gcc-4.8 to compile ldc to host
> - use clang llvm to cross compile runtime C code to iOS
>
> cmake seems to only have room from one C compiler.  Is there a way
> around this?

You want to use a target compiler and a host compiler. This is possible with CMake. See here: http://www.cmake.org/Wiki/CMake_Cross_Compiling

The bad news is that the current CMake files do not support this setup. (This is issue #490, https://github.com/ldc-developers/ldc/issues/490.)

> I was initially able to get away with using clang for both since I built
> it with all targets enabled.  Now I switched from clang to gcc for ldc
> build since llvm trunk insists on a newer stdc++.  Installing gcc-4.8
> from macports was my solution.

clang 3.3 should suffice, too. (But I don't know if it is available in precompiled form.)

> I think supporting different compilers for ldc and runtime/phobos should
> be expected when cross compiling though.

Yes, it is common setup. See above.

> Also, I'd like to add something like CACHE to RT_CFLAGS so that it can
> be set with cmake.  This will let the runtime C compiler be invoked with
> cross compile flags  like this:
>
> set(RT_CFLAGS "-target armv7-apple-darwin -isysroot
> /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk")
>

Also a reasonable wish.

> I have just been editing the CMakeLists.txt for now to set these flags.

We currently have no concept how to setup a cross compiler chain. All your thoughts are reasonable but not yet integrated into our CMake files.

Regards,
Kai
January 21, 2014
On 2014-01-21 09:23, Dan Olson wrote:
> When I build ldc as cross compiler to iOS (armv7-apple-darwin), I'd like
> to:
>
> - use gcc-4.8 to compile ldc to host

Why don't you use Clang to compile LDC?

-- 
/Jacob Carlborg
January 23, 2014
Jacob Carlborg <doob@me.com> writes:

> On 2014-01-21 09:23, Dan Olson wrote:
>> When I build ldc as cross compiler to iOS (armv7-apple-darwin), I'd like
>> to:
>>
>> - use gcc-4.8 to compile ldc to host
>
> Why don't you use Clang to compile LDC?

Hi Jacob,

I am more familar with gcc, so just went with gcc-4.8 that I knew would have a modern std c++ lib.  That's the only reason.  The std c++ lib shipped with xcode did not pass the llvm configure sniff test.

For example:

CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang ../llvm-svn/configure --target=armv7-apple-darwin

...

checking whether Clang will select a modern C++ standard library... no
configure: error:
We detected a missing feature in the standard C++ library that was known to be
missing in libstdc++4.6 and implemented in libstdc++4.7. There are numerous
C++11 problems with 4.6's library, and we don't support GCCs or libstdc++ older
than 4.7. You will need to update your system and ensure Clang uses the newer
standard library.

If this error is incorrect or you need to force things to work, you may pass '--disable-compiler-version-checks' to configure to bypass this test.
January 23, 2014
On 2014-01-23 06:00, Dan Olson wrote:

> Hi Jacob,
>
> I am more familar with gcc, so just went with gcc-4.8 that I knew would
> have a modern std c++ lib.  That's the only reason.

I see. These days Clang is the preferred compiler on OS X.

> The std c++ lib shipped with xcode did not pass the llvm configure sniff test.

I would assume you can use libc++. Both the OS X 10.8 and 10.9 SDK's contain libc++.

-- 
/Jacob Carlborg
January 23, 2014
Jacob Carlborg <doob@me.com> writes:

> On 2014-01-23 06:00, Dan Olson wrote:
>
>> Hi Jacob,
>>
>> I am more familar with gcc, so just went with gcc-4.8 that I knew would have a modern std c++ lib.  That's the only reason.
>
> I see. These days Clang is the preferred compiler on OS X.
>
>> The std c++ lib shipped with xcode did not pass the llvm configure sniff test.
>
> I would assume you can use libc++. Both the OS X 10.8 and 10.9 SDK's contain libc++.

LLVM configure didn't seem to like my installed clang.  I though of just building libc++.  Or I could use prebuilt here:

http://llvm.org/releases/3.4/clang+llvm-3.4-x86_64-apple-darwin10.9.tar.gz

Or maybe use mac port clang-3.5?
January 23, 2014
On 2014-01-23 09:32, Dan Olson wrote:

> LLVM configure didn't seem to like my installed clang.  I though of just
> building libc++.

Which Clang do you use.

> Or I could use prebuilt here:
>
> http://llvm.org/releases/3.4/clang+llvm-3.4-x86_64-apple-darwin10.9.tar.gz
>
> Or maybe use mac port clang-3.5?

Apple is still at Clang 3.2, probably for good reasons.

-- 
/Jacob Carlborg
January 23, 2014
Jacob Carlborg <doob@me.com> writes:

> On 2014-01-23 09:32, Dan Olson wrote:
>
>> LLVM configure didn't seem to like my installed clang.  I though of just building libc++.
>
> Which Clang do you use.
>
>> Or I could use prebuilt here:
>>
>> http://llvm.org/releases/3.4/clang+llvm-3.4-x86_64-apple-darwin10.9.tar.gz
>>
>> Or maybe use mac port clang-3.5?
>
> Apple is still at Clang 3.2, probably for good reasons.

Hi Jacob,

I have not updated OSX in a while, at 10.8.5, but I have a fairly recent Xcode at 5.0.2.

$ type clang
clang is /usr/bin/clang

$ clang --version
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix

$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
January 23, 2014
On 2014-01-23 17:53, Dan Olson wrote:

> Hi Jacob,
>
> I have not updated OSX in a while, at 10.8.5, but I have a fairly recent
> Xcode at 5.0.2.

Same here.

> $ type clang
> clang is /usr/bin/clang
>
> $ clang --version
> Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
> Target: x86_64-apple-darwin12.5.0
> Thread model: posix
>
> $ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --version
> Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
> Target: x86_64-apple-darwin12.5.0
> Thread model: posix

Hmm, that must have happened quite recently. I have the same version.

-- 
/Jacob Carlborg
January 24, 2014
Jacob Carlborg <doob@me.com> writes:

> On 2014-01-23 09:32, Dan Olson wrote:
>
>> LLVM configure didn't seem to like my installed clang.  I though of just building libc++.
>
> Which Clang do you use.
>
>> Or I could use prebuilt here:
>>
>> http://llvm.org/releases/3.4/clang+llvm-3.4-x86_64-apple-darwin10.9.tar.gz
>>
>> Or maybe use mac port clang-3.5?
>
> Apple is still at Clang 3.2, probably for good reasons.

Stumbled into this on libc++ web page:

clang++ -stdlib=libc++

So yes, you were correct Jacob, I can use default clang on OSX to build trunk llvm.  Just have to feed this flag to llvm configure and it now happy.  It must default to libstdc++.

CXXFLAGS='-stdlib=libc++' ../llvm-svn/configure

Looks like llvm trunk is building fine this way.
-- 
Dan