[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Compile 32bit MIPS program on 64bit MIPS - possible?



See my comments below.

On Sun, Dec 29, 2019 at 8:48 PM YunQiang Su <wzssyqa@gmail.com> wrote:
Jun Sun <jsun@junsun.net> 于2019年12月30日周一 下午12:31写道:
>
> I might be out of touch.  Who are considered "normal users" for MIPS today?  I always thought for a long time MIPS users are pretty much just developers, which means they would need build-essentials.  Having crossbuild is just a convenient way to enable development for both 32bit and 64bit on 64bit machine, because I thought, which could be wrong, 32bit crossbuild are simply the same as 32bit native build tools (as in the case of ARM and x86, I presume).
>

"normal users" here means people not work on Debian itself.
Normal for Debian not MIPS here.

in fact build-essentials package is for some people like some people
who are maintaining the sbuild/chroot etc for Debian its self.


Sure.  The original purpose of build-essentials might be fore Debian developers themselves.  But today it becomes synonym for almost all open source development.   A famous example is Android build which asks to install build-essentials first (https://source.android.com/setup/build/initializing).  A less famous example is openssl (https://source.android.com/setup/build/initializing

It is not surprising to see wide adoption of using build-essential as dev environment.  After all, it is just a collection of gcc/g++/libc/make.  It is much easier to refer to build-essential than those individual packages.

Sure, cross-build is very useful for normal user (read it as: upstream
developers, or downstream hardware/software vendors).
So, you are wanting the
    `mipsel-linux-gnu-gcc`
command on a mips64el env, instead of to use
    `mips64el-linux-gnuabi64-gcc -mabi=32`
?

Yes.  Here are the reasons:
  • it is easier to port existing projects because of exact 1:1 mapping of CPP/AS/CC/C++/LD etc.
  • it fits multiarch approach (I think)
  • it seems to be standard or popular way to support 32bit dev work in x86_64 and ARM64
I must declare that I'm not an expert in any of these areas.  These are just my impressions from my experience.  I'd love to hear from you and others and see if they are indeed true.  If they are, I think it is a good idea to supply the crossbuild tools for 32bit mips.  I would feel guilty to ask for a feature that only I want. :)

Hope my 2 cents help.  Thanks again for your work and support!

Jun
 
If you, yes, we don't provides it with src:gcc-9-cross-mipsen, since I
proposed that it is not so useful.
If it is really needed. I will add it.

> In any case, multilib works as expected so far.  Thanks for your help.  I will move on down the path of multilib for now.
>
> Cheers.
>
> Jun
>
>
> On Sun, Dec 29, 2019 at 5:02 PM YunQiang Su <wzssyqa@gmail.com> wrote:
>>
>> Jun Sun <jsun@junsun.net> 于2019年12月30日周一 上午6:01写道:
>> >
>> > Multiarch is the first thing I tried.  It generally works in terms of adding foreign architecture, finding/install packages with proper dependencies, runtime support, linkers and etc.  The only thing seemingly broken is the crossbuild-essential-mipsel, (or build-essential:mipsel, I think), which is needed to develop 32bit in this multiarch environment.  See my earlier email on this.
>> >
>>
>> Sorry. My stack is toooo shallow.
>> build-essential make no sense for normal user at all.
>> It is used to make sbuild/pbuilder happier.
>> In fact you should not install crossbuild-essential-* manually at all.
>>
>>
>> > I think multiarch is the future for debian.  We should get it working on 64bit MIPS.  It does not seem too far to fix it.  From surface, the crossbuild has some unnecessary conflict with native build essential package.  Maybe removing those should be fine?
>>
>> In fact it is too hard to fix.
>> For a suggestion, the normal user should choose only on from mutlilib
>> and multiarch.
>>
>> For example, if you want to use multiarch, you'd have to purge
>> multilib packages.
>>
>> >
>> > Cheers.
>> >
>> > Jun
>> >
>> >
>> > On Sun, Dec 29, 2019 at 4:59 AM YunQiang Su <wzssyqa@gmail.com> wrote:
>> >>
>> >> YunQiang Su <wzssyqa@gmail.com> 于2019年12月29日周日 下午8:43写道:
>> >> >
>> >> > Jun Sun <jsun@junsun.net> 于2019年12月29日周日 下午3:33写道:
>> >> > >
>> >> > > Thanks for the info, YunQiang.
>> >> > >
>> >> > > For simple compiling, I can see "gcc -mabl=32" working well. If we want to port complex project and build in 32 bit, we would need to supply CC, AS, LD, AR, CXX, etc.  Do we just use all the 64bit versions with "-mabi=32"?  For compiling C++ code, what additional package should we install?
>> >> > >
>> >> >
>> >> > If only stdc++ is needed, install g++-multlib is enough.
>> >> >
>> >> > If you need more libraries like boost etc, the best choice for you is
>> >> > to use mipsel port:
>> >> >
>> >> > sudo apt install debootstrap systemd-container
>> >> > sudo debootstrap sid sid-mipsel http://ftp.cn.debian.org/debian  # I
>> >> > suppose you are in China.
>> >> > sudo systemd-nspawn -D sid-mipsel
>> >> >
>> >> > Or you can have a try of lxc.
>> >> >
>> >>
>> >> there is another way is that maybe you can have a try multiarch:
>> >>    https://wiki.debian.org/Multiarch/HOWTO
>> >>
>> >> > > Cheers.
>> >> > >
>> >> > > Jun
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > > On Sat, Dec 28, 2019 at 9:28 PM YunQiang Su <wzssyqa@gmail.com> wrote:
>> >> > >>
>> >> > >> Jun Sun <jsun@junsun.net> 于2019年12月29日周日 上午9:43写道:
>> >> > >> >
>> >> > >> > installing g++-mipsel-linux-gnu gives an error below.  Any suggestions?  Also, what is the recommended way to set up full 32bit dev environment on 64bit host if crossbuild is not the one?
>> >> > >> >
>> >> > >> > Jun
>> >> > >> >
>> >> > >> > root@debian-mips:/home/debian# apt install g++-mipsel-linux-gnu
>> >> > >> > Reading package lists... Done
>> >> > >> > Building dependency tree
>> >> > >> > Reading state information... Done
>> >> > >> > Package g++-mipsel-linux-gnu is not available, but is referred to by another package.
>> >> > >> > This may mean that the package is missing, has been obsoleted, or
>> >> > >> > is only available from another source
>> >> > >> >
>> >> > >> > E: Package 'g++-mipsel-linux-gnu' has no installation candidate
>> >> > >>
>> >> > >> Ohh, sorry. you are on a mips64el system...
>> >> > >> We don't have that compiler, while you can just
>> >> > >>     apt install libc6-dev-mips32
>> >> > >>     gcc -mabi=32
>> >> > >>
>> >> > >> >
>> >> > >> >
>> >> > >> >
>> >> > >> > On Sat, Dec 28, 2019 at 4:14 PM YunQiang Su <wzssyqa@gmail.com> wrote:
>> >> > >> >>
>> >> > >> >> Jun Sun <jsun@junsun.net> 于2019年12月29日周日 上午5:43写道:
>> >> > >> >> >
>> >> > >> >> > re-surfacing my own old thread ...
>> >> > >> >> >
>> >> > >> >> > On ARM, I was able to do something really simple to obtain complete 32bit development on a 64bit host:
>> >> > >> >> >
>> >> > >> >> > apt install -y build-essential    # this install 64bit dev environment
>> >> > >> >> > apt install -y crossbuild-essential-armhf   # this install 32bit cross-dev environment
>> >> > >> >> > apt install -y libc6:armhf
>> >> > >> >> > apt install -y libstdc++6:armhf
>> >> > >> >>
>> >> > >> >> yep. we don't have the crossbuild-essential-mipsel package.
>> >> > >> >> While for normal user, it is not useful at all.
>> >> > >> >>
>> >> > >> >> crossbuild-essential-armhf depends on g++-arm-linux-gnueabihf &&
>> >> > >> >> gcc-arm-linux-gnueabihf
>> >> > >> >>
>> >> > >> >> So, you can do the same thing just by
>> >> > >> >>    apt install g++-mipsel-linux-gnu   # gcc-mipsel-linux-gnu is not
>> >> > >> >> needed, since g++ depeds on gcc.
>> >> > >> >>
>> >> > >> >> >
>> >> > >> >> > However, similar steps don't work on mips64.  Specifically it is apparent  crossbuild-essential-mipsel dependency is broken, and if you try to fix the dependencies and it ended up conflicting with build-essential.
>> >> > >> >> >
>> >> > >> >> > Are there more better way to install a complete 32bit dev environment than what is mentioned earlier in this thread?
>> >> > >> >> >
>> >> > >> >> > Thanks!
>> >> > >> >> >
>> >> > >> >> > Jun
>> >> > >> >> >
>> >> > >> >> >
>> >> > >> >> >
>> >> > >> >> > On Sun, May 19, 2019 at 9:10 PM Jun Sun <jsun@junsun.net> wrote:
>> >> > >> >> >>
>> >> > >> >> >> This is very cool!  It worked!  Thanks.
>> >> > >> >> >>
>> >> > >> >> >> For a complete record here is what I did:
>> >> > >> >> >>>
>> >> > >> >> >>> dpkg --add-architecture mipsel
>> >> > >> >> >>>
>> >> > >> >> >>> apt-get update
>> >> > >> >> >>>
>> >> > >> >> >>> apt-get install gcc-multilib
>> >> > >> >> >>>
>> >> > >> >> >>>
>> >> > >> >> >>
>> >> > >> >> >>
>> >> > >> >> >> Earlier I was using "-m32" option which was not recognized. but  -march=mips32 -mabi=32 worked just fine.
>> >> > >> >> >>
>> >> > >> >> >> Also, just for the record, if one likes to install 32bit library later, you would just add ":mipsel" to the package name.  For example, you would do "apt install zlib1g:mipsel" to install 32bit version of zlib.
>> >> > >> >> >>
>> >> > >> >> >> Cheers.
>> >> > >> >> >>
>> >> > >> >> >> Jun
>> >> > >> >> >>
>> >> > >> >> >>
>> >> > >> >> >> On Sun, May 19, 2019 at 5:55 PM YunQiang Su <wzssyqa@gmail.com> wrote:
>> >> > >> >> >>>
>> >> > >> >> >>> Jun Sun <jsun@junsun.net> 于2019年5月20日周一 上午7:42写道:
>> >> > >> >> >>> >
>> >> > >> >> >>> > Recently I came across a piece of great work by blahcat who created 64bit MIPSEL debian image that runs on qemu.  See  https://blahcat.github.io/2017/07/14/building-a-debian-stretch-qemu-image-for-mipsel/
>> >> > >> >> >>> >
>> >> > >> >> >>> > I tried to install multilib in the hope to compile 32bit mips code on this 64bit machine.  But it does not seem to work.
>> >> > >> >> >>> >
>> >> > >> >> >>> how did you install it?
>> >> > >> >> >>> it should be done like:
>> >> > >> >> >>>
>> >> > >> >> >>> apt-get install libc6-dev-mips32 gcc
>> >> > >> >> >>>    and
>> >> > >> >> >>> gcc -march=mips32 -mabi=32 xx.c
>> >> > >> >> >>>
>> >> > >> >> >>> If your app needs libc only, it is enough.
>> >> > >> >> >>>
>> >> > >> >> >>> > Does anybody know for sure whether this is a dead end or just a hiccup which I should overcome?
>> >> > >> >> >>>
>> >> > >> >> >>> If your app depends on more libraries, you may need to use an mipsel
>> >> > >> >> >>> env, or use multiarch.
>> >> > >> >> >>> https://wiki.debian.org/Multiarch/HOWTO
>> >> > >> >> >>>
>> >> > >> >> >>> >
>> >> > >> >> >>> > Thanks.
>> >> > >> >> >>> >
>> >> > >> >> >>> > Jun
>> >> > >> >> >>>
>> >> > >> >> >>>
>> >> > >> >> >>>
>> >> > >> >> >>> --
>> >> > >> >> >>> YunQiang Su
>> >> > >> >>
>> >> > >> >>
>> >> > >> >>
>> >> > >> >> --
>> >> > >> >> YunQiang Su
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >> --
>> >> > >> YunQiang Su
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > YunQiang Su
>> >>
>> >>
>> >>
>> >> --
>> >> YunQiang Su
>>
>>
>>
>> --
>> YunQiang Su



--
YunQiang Su

Reply to: