up previous next index
Up: 6 パッケージを開発する Previous: 6.3 rpm macro Next: 6.5 その他


6.4 Universal Binary

2006年の1月以降 OSXWS はデフォルトで Universal Binary のパッケージを作成しています。
ここでは Universal Binary rpm package の作成方法を簡単に示します。
主な内容は MacWiki の UniversalBinary の項目に記してありますので、
合わせてご覧ください。

はじめに

原則として PPC, Intel 双方のバイナリを独立してビルドし
最後に lipo で結合する方法を採ります。

spec file の基本形

冒頭
%define uname_release `(uname -r) 2>/dev/null` を置き、
configure への host 指定に利用します。
BuildArch: fat を指定します。

%prep section
以下の様にして PPC, Intel それぞれに tree を分けます。

%setup -q -c %{name}-%{version}
pushd %{name}-%{version}
%patch1 -p1 -b .fat
popd

mv %{name}-%{version} PPC
cp -rp PPC INTEL

%build section
以下の様にして PPC, Intel それぞれ独立にビルドします。
ただし、以下の例は Universal Binary のライブラリが標準で
インストールされている Intel 版 MacOS X 上での記述であり、
PPC 上では -sysroot /Developer/SDKs/MacOSX10.4u.sdk
の記述を CFLAGS に追加する必要があります。

pushd PPC
CFLAGS="-O2 -arch ppc" \
CXXFLAGS="$CFLAGS" \
%configure --host=powerpc-apple-darwin%{uname_release} \
	--disable-dependency-tracking
perl -pi -e 's@-dynamiclib@-dynamiclib -arch ppc@g' libtool
make
popd
pushd INTEL
CFLAGS="-O2 -march=i686 -mtune=pentium-m" \
CXXFLAGS="$CFLAGS" \
%configure --host=i686-apple-darwin%{uname_release} \
	--disable-dependency-tracking
perl -pi -e 's@-dynamiclib@-dynamiclib -arch i386@g' libtool
make
popd

%install section
以下の様にして Universal Binary を作成します。

pushd PPC
mkdir -p ${PWD}-root%{_bindir}
make install DESTDIR=${PWD}-root
popd
pushd INTEL
mkdir -p ${PWD}-root%{_bindir}
make install DESTDIR=${PWD}-root
cp -fRP COPYRIGHT README VERSION TODO html ..
popd

## Make Universal Binaries
filelist=$(find ./PPC-root -type f | xargs file | sed -e 's,^\./PPC-root/,,g' | \
        grep -E \(Mach-O\)\|\(ar\ archive\) |sed -e 's,:.*,,g' -e '/\for\ architecture/d')

for i in $filelist
do
        /usr/bin/lipo -create PPC-root/$i INTEL-root/$i -output `basename $i`
        cp -f `basename $i` PPC-root/$i
done

# install
mkdir -p %{buildroot}
tar cf - -C PPC-root . | tar xpf - -C %{buildroot}


up previous next index
Up: 6 パッケージを開発する Previous: 6.3 rpm macro Next: 6.5 その他
KOBAYASHI Taizo
平成20年7月3日