From mint-bounce@lists.fishpool.fi Fri May 15 22:42:43 2009 Date: Fri, 15 May 2009 22:35:13 -0400 (EDT) From: Keith Scroggins To: mint@fishpool.com Subject: [MiNT] Cross Compiled LZIP RPM & Quick Docs for Building it (90% complete!) Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-ecartis-version: Ecartis v1.0.0 Sender: mint-bounce@lists.fishpool.fi Errors-to: mint-bounce@lists.fishpool.fi X-original-sender: kws@radix.net Precedence: bulk List-help: List-unsubscribe: List-Id: X-List-ID: List-subscribe: List-owner: List-post: So, I have been able to successfully cross compile an RPM AND make it so it will both cross compile and build natively. The only problem I have encountered is that when installing the cross compiled RPM, you must pass --ignoreos in the rpm install line. I have not been able to solve this issue yet, so this is about 90%. If anyone knows the secret to this, please share. Here are the LZIP RPMs, built on my PS3: http://www.radix.net/~atari/mint/lzip-1.5-1.m68kmint.rpm 221k http://www.radix.net/~atari/mint/lzip-1.5-1.src.rpm 68k This RPM will build natively with a GCC4 compiler (but not with 2.95.3, needs more patching). I have also built the RPM with Cygwin, the only problem is that it adds cygwin into the name of the created package, and I think just renaming the package fixes that. Anyway, here is what I did to create the cross env. In the home directory of the user, create a .rpmmacros with the following: %_topdir /usr/local/cross-mint/sparemint %_cc /usr/local/cross-mint/rpm-bin/%{_target}-gcc Now, create the sparemint dir listed above, and then in it create these dirs: BUILD RPMS SOURCE SPECS SRPMS Now, drop your spec and source files in the correct place, and then to build the package do: rpmbuild -ba --target m68kmint lzip.spec or rpm -ba --target m68kmint lzip.spec Depending on RPM version. Now, here is the lzip spec I created, setup to cross compile. This app has a custom configure script, so it is a little different than the usual: Version: 1.5 Release: 1 Summary: Data compression utility using LZMA with fast decompress Name: lzip Source0: http://download.savannah.gnu.org/releases/lzip/lzip-%{version}.tar.gz Patch0: lzip-1.5-mint.patch License: GPL Group: System Environment/Libraries URL: http://www.nongnu.org/lzip/lzip.html Packager: Keith Scroggins Vendor: Sparemint BuildRoot: /var/tmp/%{name}-%{version}-root # For newer versions of RPM so native strip and debuginfo are not utilized # when cross compiling %define __spec_install_post /usr/lib/rpm/brp-compress || : %define debug_package %{nil} %define is_sparemint %(test -e /etc/sparemint-release && echo 1 || echo 0) %description Lzip is a lossless file compressor based on the LZMA (Lempel-Ziv-Markov chain-Algorithm) algorithm, designed by Igor Pavlov. The high compression of LZMA comes from combining two basic, well-proven compression ideas: sliding dictionaries (i.e. LZ77/78), and Markov models (i.e. the thing used by every compression algorithm that uses a range encoder or similar order-0 entropy coder as its last stage) with segregation of contexts according to what the bits are used for. Lzip has a user interface similar to the one of gzip(1) or bzip2(1). %prep %setup -q %patch0 -p1 %build ./configure CFLAGS="-O2 -fomit-frame-pointer" CC=m68k-atari-mint-gcc \ --prefix=/usr CXX=m68k-atari-mint-g++ \ CXXFLAGS="-O2 -fomit-frame-pointer" make %install rm -rf $RPM_BUILD_ROOT make install DESTDIR="$RPM_BUILD_ROOT" # I have no clue why this is not installed.... cp lziprecover $RPM_BUILD_ROOT/usr/bin rm $RPM_BUILD_ROOT/usr/share/info/dir gzip -9nf $RPM_BUILD_ROOT/usr/share/info/* gzip -9nf $RPM_BUILD_ROOT/usr/share/man/man1/* %if %is_sparemint strip $RPM_BUILD_ROOT/usr/bin/lzip strip $RPM_BUILD_ROOT/usr/bin/lziprecover stack -S 256k $RPM_BUILD_ROOT/usr/bin/lzip stack -S 256k $RPM_BUILD_ROOT/usr/bin/lziprecover %else m68k-atari-mint-strip $RPM_BUILD_ROOT/usr/bin/lzip m68k-atari-mint-strip $RPM_BUILD_ROOT/usr/bin/lziprecover m68k-atari-mint-stack -S 256k $RPM_BUILD_ROOT/usr/bin/lzip m68k-atari-mint-stack -S 256k $RPM_BUILD_ROOT/usr/bin/lziprecover %endif %clean rm -rf $RPM_BUILD_ROOT %files %defattr(0644,root,root,0755) %doc AUTHORS COPYING NEWS README %attr(0755,root,root) /usr/bin/lzip* %attr(0644,root,root) /usr/share/info/* %attr(0644,root,root) /usr/share/man/man1/* %changelog * Fri May 15 2009 Keith Scroggins - Initial build of lzip RPM using Cross Compilers! ------------------------------------------------------------------------------------- %define __spec_install_post /usr/lib/rpm/brp-compress || : This line disables RPMs use of native strip, and has no effect on native compile. %define debug_package %{nil} This line disables RPMs use of debuginfo, and has no effect on native compile. %define is_sparemint %(test -e /etc/sparemint-release && echo 1 || echo 0) This line determines if we are building natively, so we can differentiate between cross compile actions and native actions, in this example, I am using this for using a native strip/stack versus the cross compiled counterparts. Anyway, this is quick and dirty, and just a start. I *THINK* the only real issue is needing to use the --ignoreos parameter when installing the RPM, but there could be other issues. Please test, and provide lots of feedback, cross compiling RPMs will be a major step forward! I hope to try some more packages this weekend, if time permits. Keith