Building macports ppc libraries and binaries on intel

Ryan Schmidt ryandesign at macports.org
Sun Jul 27 11:48:33 PDT 2008


Hi Harry.

On Jul 27, 2008, at 13:26, Harry van der Wolf wrote:

> As Macports does not build all ports as universal and as some of  
> the universal ports are not correct anyway due to the endian  
> "problem" of MacPorts(*), I wanted to set up two parallel macports  
> trees in user space using the ./configure option "--with-install- 
> user=USER" with my own userid, thereby also removing the sudo part  
> of the port command.
> So I built from source (1.6) a parallell tree in /Users/Shared/ 
> macports_universal/ppc and one in /Users/Shared/macports_universal/ 
> i386 (see attached Setenv-unversal.txt for all scripts and the 1_- 
> build_parallel_macports_trees for building the parellel trees).
> I myself are on Intel (Intel Macbook) but I like to built in the "/ 
> Users/Shared/macports_universal/ppc" tree for PPC.
> I have tried lots of options but without result. Also ports built  
> in the ppc tree are i386 builds (lipo -info <lib or binary>).
> In macports.conf I tried with:
> os.endian  bigEndian
> os.arch  ppc   (also powerpc and )
> os.version 7.0

I would not expect os.* to be configurable parameters. They're  
informative only.

> I also tried with all kind of (obviously incorrect) "command line"  
> options like configure.cflags-append "-isysroot /Developer/SDKs/ 
> MacOSX10.4u.sdk -arch ppc" and configure.ldflags-append " -arch  
> ppc", but without result. I tried the same in macports.conf (in  
> the .../ppc/etc/macports/macports.conf) and also using the  
> extra_env settings like CFLAGS="-isysroot /Developer/SDKs/ 
> MacOSX10.4u.sdk -arch ppc", but nothing works.
>
> Is it possible to build ports on intel for ppc at all?
> How do I setup my system to accomplish this?

The correct solution is to use the +universal variant to build  
universal binaries.

Using MacPorts trunk (a.k.a. MacPorts 1.7.0) you can configure which  
architectures you want to include in a universal build and which SDK  
to use. But changing this from the defaults is not guaranteed to work  
(i.e. will probably fail a lot of the time) so I don't recommend  
changing it.

> *: Macports builds universal packages (that support it) correctly  
> for ppc or i386 but always uses the endianness of the build  
> platform. For example: when building glib2, cairo, pango and gtk on  
> Intel universally (a common option) it will build the ppc "side"  
> also with little_endian instead of big_endian (same for tiff by the  
> way). This will result in seemingly correct builds, but these  
> "universal"  builds will not work on "the other platform".

Please don't generalize that MacPorts "always uses the endianness of  
the build platform". That is not correct. In any case, this is not  
the fault of MacPorts base. MacPorts base does the right thing to  
build ports universal. If an individual port doesn't get the  
endianness right, then that individual port is broken. Most ports  
that have universal variants should work correctly. It's just not  
tested often because most of us do not have both a PowerPC and an  
Intel Mac. Since you do have both, you can help us to fix the broken  
ports.

I recently fixed the glib2 port, which may also fix the gtk2 port?  
I'm not sure. Please test. See:

http://trac.macports.org/ticket/15816

I'm surprised you were able to build cairo universal at all; as far  
as I was aware, this is impossible at this time. See:

http://trac.macports.org/ticket/15451

For any other ports that do not build correctly universal, please  
file tickets against those ports. Each port needs to be fixed  
individually.




More information about the macports-users mailing list