[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[MiNT] Multi-Target SpareMiNT (RPM) Thoughts - How to do it maybe
This is extremely long, but hopefully I explain almost everything....
Basically, this is my thought towards a multi architectured SpareMiNT.
Note that this can be tweaked, as I am just basically taking stabs to see
what works where. And it is definitely not perfect.
Now, my opinion on libraries versus binaries is this, I think we should
try to build the libraries all bundled into a single RPM, because a huge
problem will arise with includes needing to overwrite each other. I have,
so far, done this with both OpenSSL and Zlib. Binaries can each get their
own package, but the problem arise when lib/binary combinations, and thats
going to take some thought or fancy spec manuevering. Anyway....
My first thought is we basically have 3 targets:
m68kmint - 68000, basically the base
m68k020mint - 68020-60
cfmint - 5475
So, for the release of make, you have:
make-3.81-3.src.rpm The src RPM to rebuilt the packages
make-3.81-3.m68kmint.rpm The 68000 binary
make-3.81-3.m68k020mint.rpm The 68020-60 binary
make-3.81-3.cfmint.rpm The Colfire binary
Can these be built? Yes, but we have to make our systems allow them to be
installed before we get to the build process.
All systems can install m68kmint.rpm packages, but there need to be
changes to allow m68k020mint.rpm and/or cfmint.rpm packages to be
installed and/or built.
Two files need to be edited. The first one is /etc/rpmrc.
I believe the original looks like this:
#
# /etc/rpmrc
#
optflags: -O2 -fomit-frame-pointer
Provides: /sbin/rmt
---
Basically this file is just specifying the CFLAGS (Compiler Optimizations)
to use when building a RPM pacakge. So, my modifications:
#
# /etc/rpmrc
#
optflags: m68kmint -O2 -fomit-frame-pointer
optflags: m68k020mint -m68020-60 -O2 -fomit-frame-pointer
optflags: cfmint -mcpu=5475 -O2 -fomit-frame-pointer
#optflags: -O2 -fomit-frame-pointer
Provides: /sbin/rmt
---
The above is setting the CFLAGS for the additional 2 targets so they are
CPU specific.
The other file that needs changes is the /usr/lib/rpm/rpmrc file. This
file is quite large. To be brief, here is the original snippet of lines
that contain mint and might be changed (but not all will):
arch_canon: m68kmint: m68kmint 13
arch_canon: atarist: m68kmint 13
arch_canon: atariste: m68kmint 13
arch_canon: ataritt: m68kmint 13
arch_canon: falcon: m68kmint 13
arch_canon: atariclone: m68kmint 13
arch_canon: milan: m68kmint 13
arch_canon: hades: m68kmint 13
buildarchtranslate: atarist: m68kmint
buildarchtranslate: atariste: m68kmint
buildarchtranslate: ataritt: m68kmint
buildarchtranslate: falcon: m68kmint
buildarchtranslate: atariclone: m68kmint
buildarchtranslate: milan: m68kmint
buildarchtranslate: hades: m68kmint
arch_compat: atarist: m68kmint noarch
arch_compat: atariste: m68kmint noarch
arch_compat: ataritt: m68kmint noarch
arch_compat: falcon: m68kmint noarch
arch_compat: atariclone: m68kmint noarch
arch_compat: milan: m68kmint noarch
arch_compat: hades: m68kmint noarch
buildarch_compat: atarist: m68kmint noarch
buildarch_compat: atariste: m68kmint noarch
buildarch_compat: ataritt: m68kmint noarch
buildarch_compat: falcon: m68kmint noarch
buildarch_compat: atariclone: m68kmint noarch
buildarch_compat: milan: m68kmint noarch
buildarch_compat: hades: m68kmint noarch
---
These are the definitions that allow rpm / sparemint software to be
installed on the various Atari systems. Now, here is my 'modified'
version, which allows the newer RPMs to install:
arch_canon: m68kmint: m68kmint 13
arch_canon: atarist: m68kmint 13
arch_canon: atariste: m68kmint 13
arch_canon: ataritt: m68kmint 13
arch_canon: falcon: m68kmint 13
arch_canon: atariclone: m68kmint 13
arch_canon: milan: m68kmint 13
arch_canon: hades: m68kmint 13
arch_canon: coldtari: m68kmint 13
buildarchtranslate: atarist: m68kmint
buildarchtranslate: atariste: m68kmint
buildarchtranslate: ataritt: m68kmint
buildarchtranslate: falcon: m68kmint
buildarchtranslate: atariclone: m68kmint
buildarchtranslate: milan: m68kmint
buildarchtranslate: hades: m68kmint
arch_compat: atarist: m68kmint noarch
arch_compat: atariste: m68kmint noarch
arch_compat: ataritt: m68kmint m68k020mint noarch
arch_compat: falcon: m68kmint m68k020mint noarch
arch_compat: atariclone: m68kmint m68k020mint noarch
arch_compat: milan: m68kmint m68k020mint noarch
arch_compat: hades: m68kmint m68k020mint noarch
arch_compat: coldtari: m68kmint cfmint noarch
buildarch_compat: atarist: m68kmint m68k020mint cfmint noarch
buildarch_compat: atariste: m68kmint m68k020mint cfmint noarch
buildarch_compat: ataritt: m68kmint m68k020mint cfmint noarch
buildarch_compat: falcon: m68kmint m68k020mint cfmint noarch
buildarch_compat: atariclone: m68kmint m68k020mint cfmint noarch
buildarch_compat: milan: m68kmint m68k020mint cfmint noarch
buildarch_compat: hades: m68kmint m68k020mint cfmint noarch
buildarch_compat: coldtari: m68kmint m68k020mint cfmint noarch
---
Yes, the coldtari name needs to be fixed. :)
What this does now is this lets machines with 68030+ CPUs install the
m68k020mint packages besides the standard ones. It also 'allows' the RPMS
for all three targets to be built on the various systems.
So, now we have support for installing the RPMs, and support for building
them, how do we build them?
So, take a standard RPM spec file. This is the file that has the
instructions for building a package. We will use make.spec
For 68000 (The Default)
rpm -ba make.spec
For 68020-60
rpm -ba make.spec --target m68k020mint
For Coldfire
rpm -ba make.spec --target cfmint (Oops, this might fail, we'll get to
that)
What this is doing is passing the compiler optimization for those targets
to RPM, which, for make, this is how they are used:
make_cv_sys_gnu_glob=yes \
CFLAGS="${RPM_OPT_FLAGS}" ./configure \
--host=m68k-atari-mint \
--prefix=%{_prefix} --disable-nls \
--disable-nsec-timestamps
Right here we are either setting no CPU target or -m68020-60 or -mcpu=5475
at the CFLAGS="${RPM_OPT_FLAGS}"
This will produce makefile to build that way and output a properly named
RPM.
Did I just mention a possible problem with Coldfire? Well, the problem is
that since Coldfire binaries will not run on anything other than Coldfire
CPUs, this causes configure to error out when testing for a Cross
Compiler. My 'current' solution for that is the above
"--host=m68k-atari-mint" line, which causes configure to think it is cross
compiling the Coldfire target on a 68060 system, which is sort of true.
This option, I believe, is ignored for the 68000 and 68020-60 targets.
Anyway, if you are still with me, thats my thought. I'm sure a bunch of
this is confusing, and people can tweak it, so, go for it!
In closing, let me share a large snippet of the Zlib spec to demo what I
talked about in the intro:
%build
# Coldfire
CFLAGS="-mcpu=5475 ${RPM_OPT_FLAGS}" \
./configure \
--prefix=%{_prefix}
make
mv libz.a libzCF.a
# 68020-60
CFLAGS="-m68020-60 ${RPM_OPT_FLAGS}" \
./configure \
--prefix=%{_prefix}
make
mv libz.a libz020.a
# 68000
CFLAGS="${RPM_OPT_FLAGS}" \
./configure \
--prefix=%{_prefix}
make
%install
[ "${RPM_BUILD_ROOT}" != "/" ] && rm -rf ${RPM_BUILD_ROOT}
mkdir -p ${RPM_BUILD_ROOT}%{_prefix}
mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/include
mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/lib
mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/lib/m68020-60
mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/lib/m5475
mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/share/man/man3
#make install \
# prefix=${RPM_BUILD_ROOT}%{_prefix}
install -m644 libz.a ${RPM_BUILD_ROOT}%{_prefix}/lib/libz.a
install -m644 libzCF.a ${RPM_BUILD_ROOT}%{_prefix}/lib/m5475/libz.a
install -m644 libz020.a ${RPM_BUILD_ROOT}%{_prefix}/lib/m68020-60/libz.a
install -m644 zlib.h ${RPM_BUILD_ROOT}%{_prefix}/include/zlib.h
install -m644 zconf.h ${RPM_BUILD_ROOT}%{_prefix}/include/zconf.h
install -m644 zutil.h ${RPM_BUILD_ROOT}%{_prefix}/include/zutil.h
install -m644 zlib.3 ${RPM_BUILD_ROOT}%{_prefix}/share/man/man3
# compress manpages
gzip -9nf ${RPM_BUILD_ROOT}%{_prefix}/share/man/man*/* ||:
---
If you can follow this, what is happening is Zlib is being compiled 3
times, and the libs for the first 2 compiles are moved out of the way.
Finally, everything is installed manually, and the libs for all 3 targets
are placed in their correct locations.
The only other way to cleanly support the multilibs I can see, besides
having all three loaded into 1 package is to make the 68000 package the
main package, and then the other 2 packages sub to it, so you would have:
zlib-devel.m68kmint.rpm
zlib-devel020.m68kmint.rpm
zlib-develcf.m68kmint.rpm
Anyway, this is long enough, but this is my thought process. Any and all
thoughts except on how to make this better.
Keith