Skip to content

build 32-bit R on x86_64?

8 messages · Joris Meys, Dirk Eddelbuettel, Simon Urbanek +1 more

#
Dear R-Devel,

I'm using Ubuntu on an x86_64 machine and would like to have both the
32-bit and 64-bit versions of R built from source.  By default,
following the usual build procedures yields 64 bit R.  Looking at
[these](http://cran.r-project.org/doc/manuals/R-admin.html#Sub_002darchitectures),
I thought I could build 32-bit R by executing

r_arch=32 ./configure

and building R like usual (make).  However, after seeing this error message,

/usr/bin/install: cannot create regular file
`../../include/32/Rconfig.h': No such file or directory

I realize I am misunderstanding the instructions.  Could someone
please clarify how I could go about compiling both 32-bit and 64-bit
versions of R on my Linux machine?  Thank you!

-- Vinh
#
The architecture is called i386. Try

r_arch=i386 ./configure

That should work.
Cheers
Joris
On Wed, Aug 10, 2011 at 1:40 AM, Vinh Nguyen <vqnguyen at uci.edu> wrote:

  
    
#
On Tue, Aug 9, 2011 at 4:52 PM, Joris Meys <jorismeys at gmail.com> wrote:
Thank you for your response Joris.  However, I still get:
/usr/bin/install: cannot create regular file
`../../include/i386/Rconfig.h': No such file or directory

I don't think r_arch necessarily instruct make to build 32-bit
versions of R; I think it's more of a prefix in the name.
#
Hi Vinh,
On 9 August 2011 at 16:40, Vinh Nguyen wrote:
| Dear R-Devel,
| 
| I'm using Ubuntu on an x86_64 machine and would like to have both the
| 32-bit and 64-bit versions of R built from source.  By default,
| following the usual build procedures yields 64 bit R.  Looking at
| [these](http://cran.r-project.org/doc/manuals/R-admin.html#Sub_002darchitectures),
| I thought I could build 32-bit R by executing
| 
| r_arch=32 ./configure
| 
| and building R like usual (make).  However, after seeing this error message,
| 
| /usr/bin/install: cannot create regular file
| `../../include/32/Rconfig.h': No such file or directory
| 
| I realize I am misunderstanding the instructions.  Could someone
| please clarify how I could go about compiling both 32-bit and 64-bit
| versions of R on my Linux machine?  Thank you!

I do not think that multiarch build (ie 32 and 64 at the same time) are fully
supported yet on Ubuntu or Debian. It is coming, but just like a number of
other things, not exactly overnight. It is a release goal.

In the meantime, you can always use virtualization. I have a Debian 32-bit
system and an Ubuntu 32-bit system in KVM virtualization on my Ubuntu 64-bit
server.  That works well.  Kvm, or Xen, or Virtualbox, or Vmware, ... all
offer fairly decent virtualization.  

Debian/Ubuntu specific questions are even more welcome on r-sig-debian.

Dirk
#
On Aug 9, 2011, at 8:12 PM, Dirk Eddelbuettel wrote:

            
It actually works ;) I'm using it for testing on my RForge.net machine and yes, it's Debian - everything just works there :).

But back to the original question. First a minor detail, don't set environment variables use configure variables instead. Second, don't build in the source directory, always create an object directory. Third, r_arch is simply a name you set for the architecture, it has no meaning other than that it's a label.

So now to the real stuff. If you want 32-bit build, you'll need 32-bit runtime of everything important in your system and the multilib compilers. In Debian (and thus likely in Ubuntu too) that can be achieved by something like

sudo apt-get install  ia32-libs-dev lib32readline6-dev lib32ncurses5-dev lib32icu-dev gcc-multilib gfortran-multilib

Then you can build both 64-bit and 32-bit R, the difference will be in the all compiler flags -- for 64-bit you'll use -m64 (or nothing since it's the default) and for 32-bit you'll use -m32.

So roughly something like

tar fxz R-2.13.1.tar.gz
mkdir obj-32
cd obj-32
../R-2.13.1/configure r_arch=i386 CC='gcc -std=gnu99 -m32' CXX='g++ -m32' FC='gfortran -m32' F77='gfortran -m32' 
make -j24 && sudo make install rhome=/usr/local/R/2.13
cd ..
mkdir obj-64
cd obj-64
../R-2.13.1/configure r_arch=amd64
make -j24 && sudo make install rhome=/usr/local/R/2.13

That will leave you with multi-arch R that you can run with
R --arch=i386 # 32-bit
R --arch=amd64 # 64-bit
Packages will be also built as multi-libs. Good luck :)
[BTW the rhome=... setting is entirely optional, I just like to keep my R versions organized?]

Cheers,
Simon
#
On 9 August 2011 at 21:24, Simon Urbanek wrote:
|
| On Aug 9, 2011, at 8:12 PM, Dirk Eddelbuettel wrote:
| 
| > 
| > Hi Vinh,
| >
| > On 9 August 2011 at 16:40, Vinh Nguyen wrote:
| > | Dear R-Devel,
| > | 
| > | I'm using Ubuntu on an x86_64 machine and would like to have both the
| > | 32-bit and 64-bit versions of R built from source.  By default,
| > | following the usual build procedures yields 64 bit R.  Looking at
| > | [these](http://cran.r-project.org/doc/manuals/R-admin.html#Sub_002darchitectures),
| > | I thought I could build 32-bit R by executing
| > | 
| > | r_arch=32 ./configure
| > | 
| > | and building R like usual (make).  However, after seeing this error message,
| > | 
| > | /usr/bin/install: cannot create regular file
| > | `../../include/32/Rconfig.h': No such file or directory
| > | 
| > | I realize I am misunderstanding the instructions.  Could someone
| > | please clarify how I could go about compiling both 32-bit and 64-bit
| > | versions of R on my Linux machine?  Thank you!
| > 
| > I do not think that multiarch build (ie 32 and 64 at the same time) are fully supported yet on Ubuntu or Debian. It is coming, but just like a number of other things, not exactly overnight. It is a release goal.
| > 
| 
| It actually works ;) I'm using it for testing on my RForge.net machine and yes, it's Debian - everything just works there :).
| 
| But back to the original question. First a minor detail, don't set environment variables use configure variables instead. Second, don't build in the source directory, always create an object directory. Third, r_arch is simply a name you set for the architecture, it has no meaning other than that it's a label.
| 
| So now to the real stuff. If you want 32-bit build, you'll need 32-bit runtime of everything important in your system and the multilib compilers. In Debian (and thus likely in Ubuntu too) that can be achieved by something like
| 
| sudo apt-get install  ia32-libs-dev lib32readline6-dev lib32ncurses5-dev lib32icu-dev gcc-multilib gfortran-multilib

Nice one :)  

I had these installed but was always under the impression that we'd lack
things like jpeg, png, ... libs.  So it all works as R has 'enough batteries'
included?  Good to know ...
| 
| Then you can build both 64-bit and 32-bit R, the difference will be in the all compiler flags -- for 64-bit you'll use -m64 (or nothing since it's the default) and for 32-bit you'll use -m32.
| 
| So roughly something like
| 
| tar fxz R-2.13.1.tar.gz
| mkdir obj-32
| cd obj-32
| ../R-2.13.1/configure r_arch=i386 CC='gcc -std=gnu99 -m32' CXX='g++ -m32' FC='gfortran -m32' F77='gfortran -m32' 
| make -j24 && sudo make install rhome=/usr/local/R/2.13
| cd ..
| mkdir obj-64
| cd obj-64
| ../R-2.13.1/configure r_arch=amd64
| make -j24 && sudo make install rhome=/usr/local/R/2.13
| 
| That will leave you with multi-arch R that you can run with
| R --arch=i386 # 32-bit
| R --arch=amd64 # 64-bit
| Packages will be also built as multi-libs. Good luck :)
| [BTW the rhome=... setting is entirely optional, I just like to keep my R versions organized?]

I shall keep that for the day I'll have to start supporting multiarch in all
the r-cran-* packages :)

Thanks for waving the cluebat.

Dirk

| 
| Cheers,
| Simon
| 
| 
| 
| > In the meantime, you can always use virtualization. I have a Debian 32-bit
| > system and an Ubuntu 32-bit system in KVM virtualization on my Ubuntu 64-bit
| > server.  That works well.  Kvm, or Xen, or Virtualbox, or Vmware, ... all
| > offer fairly decent virtualization.  
| > 
| > Debian/Ubuntu specific questions are even more welcome on r-sig-debian.
| > 
| > Dirk
| > 
| > -- 
| > Two new Rcpp classes scheduled for New York and San Francisco, details at
| > http://dirk.eddelbuettel.com/blog/2011/08/04#rcpp_classes_2011-09_and_2011-10
| > 
| > ______________________________________________
| > R-devel at r-project.org mailing list
| > https://stat.ethz.ch/mailman/listinfo/r-devel
| > 
| > 
|
#
On Aug 9, 2011, at 9:41 PM, Dirk Eddelbuettel wrote:

            
Yes, it's enough to build, but obviously it's like having one AAA battery installed ;)
Well, I did give it a shot for RForge.net but the list of ia32 libraries is a bit short compared to what's available in a full 32-bit system. Obviously you can get far with using native i386 packages, but then you won't be able to take advantage of all the magic of dpkg. So I don't think you'll need to worry about multiarch R r-cran* packages too soon ;). I'm keeping multiarch R around for testing of packages since it's a pretty good test of badly written package configuration, but I would not use it for production ... (it's bad enough that I need to worry about it on OS X ;)).

Cheers,
Simon
#
On Tue, Aug 9, 2011 at 6:24 PM, Simon Urbanek
<simon.urbanek at r-project.org> wrote:
Thanks Simon!  Confirm that these instructions work.  ia32-libs-dev
was not available for Ubuntu Natty, so I installed ia32-libs instead,
and the compilation works!

-- Vinh