Here are the directions I use to build 32-bit PARSEC binaries on 64-bit
versions of Fedora/RHEL. I don't guarantee that these are the most
efficient directions for getting everything to compile properly, but
they work for me.
Note that I temporarily replace 'uname', which requires root access.
There were a number of scripts (I don't remember which ones) that use
uname to detect the architecture. If it returns x86_64, these scripts
will always attempt to compile the 64-bit versions of libraries (or
whatever). If you don't have root access, you'll have to find where
these checks are and replace them yourself. :)
1. Modify the GCC build config:
* Open ./config/gcc.bldconf
* Change CC_HOME="/n/fs/parsec/local/gcc-4.4.0-static" to CC_HOME="/usr"
* Change BINUTIL_HOME="/usr/local" to BINUTIL_HOME="/usr"
* Make sure GNUTOOL_HOME is set to ="/usr"
* Make sure BINARY_PREFIX is set to =""
* Add '-m32' to CFLAGS, CXXFLAGS, CPPFLAGS, CXXCPPFLAGS, and LDFLAGS
* Add in 'export INCLUDES="-m32"'
* Remove '-L${CC_HOME}/lib64' from LDFLAGS
2. Change the environment variable HOSTTYPE to i386
* In bash: 'HOSTTYPE=i386' 'export HOSTTYPE'
* In csh: 'setenv HOSTTYPE i386'
3. Make sure /usr/lib/libXmu.so and /usr/lib/libX11.so exist. If they don't:
* 'ln -s /usr/lib/libXmu.so.6 /usr/lib/libXmu.so'
* 'ln -s /usr/lib/libX11.so.6 /usr/lib/libX11.so'
4. Make a copy of uname
* 'sudo mv /bin/uname /bin/uname.orig'
5. Make a wrapper shell script to make uname return i686 instaed of x86_64:
* Open a new file /bin/uname and add in:
!/bin/sh
/bin/uname.orig $* | sed 's/x86_64/i686/g'
* 'sudo chmod a+x uname'
6. Change ./pkgs/apps/facesim/src/TaskQ/lib/Makefile 'CXXARGS' to 'CXXFLAGS'
7. Modify ./pkgs/libs/ssl/src/Configure.pl
* Add '$cflags .= " -m32 ";' to line 976 (below the big list of "my"
variable declarations.
8. Change ./pkgs/libs/mesa/src/configure line 4685 to 'asm_arch=x86'
9. Change ./pkgs/libs/glib/src/configure line 40390 to 'G_ATOMIC_I486'
10. Run compilation
* ./bin/parsecmgmt -a build -p all -c gcc
* Note that you'll need to do "./bin/parsecmgmt -a build -p freqmine
-c gcc-openmp" if you want freqmine to compile, as it doesn't use pthreads.
11. Return the original uname
* 'sudo mv /bin/uname.orig /bin/uname'
Good luck!
-Joe
Added by TK:
In parsec-2.1/pkgs/libs/ssl/parsec/gcc.bldconf, change line 20 to build_env="PATH=\"${PATH}\""
If something goes wrong, try not to use -jxxx when make
沒有留言:
張貼留言