Implementing R on IBM p690 cluster Jump
From: Kurt Hornik
Brian D Ripley writes:
As far as I know R 2.0.1 was built on AIX. A quick diff gannet% diff ~/R/R-2.0.1/src/modules/X11/Makefile ~/R/R-2.1.0/src/modules/X11/Makefile 54c54 < $(SHLIB_LINK) -o $@ $(R_X11_la_LDFLAGS) $(R_X11_la_OBJECTS) $(R_X11_la_LIBADD) $(LIBS) ---
$(SHLIB_LINK) -o $@ $(R_X11_la_LDFLAGS) $(R_X11_la_OBJECTS)
$(R_X11_la_LIBADD) 128c128,129 < ../../../src/include/Rmodules/RX11.h ---
../../../src/include/Rmodules/RX11.h \ ../../../src/include/Rconnections.h
suggests that AIX (alone) required $(LIBS) there. As it is
harmful on
some other platforms (the intention is to pick up entry points in R.bin/libR rather than duplicate copies of static
libraries) I suspect we
need an AIX-specific workaround (in particular the libintl
library is not
going to be in LIBS).
This probably applies to other modules and even shared objects in packages.
Yes. It would still be good if someone on AIX could provide us with the output of BUILDDIR/libtool --config. -k
Is there anyone with an AIX machine who is able to work through this and provide appropriate diffs?
Sorry for being dense: could you explain what diff is needed?
I unpacked R-patched_2005-05-12, and set:
OBJECT_MODE=64
CC=xlc_r
F77=xlf_r
CXX=xlC_r
CFLAGS/FLAGS/CXXFLAGS="-O -qstrict"
Running make gave similar error, namely symbols that should be in libm
not found. Below is output from BUILDDIR/libtool --config:
---------------------------------
# Libtool was configured on host hpc2b.merck.com:
# Shell to use when invoking shell scripts.
SHELL="/bin/sh"
# Whether or not to build shared libraries.
build_libtool_libs=yes
# Whether or not to build static libraries.
build_old_libs=no
# Whether or not to add -lc for building shared libraries.
build_libtool_need_lc=yes
# Whether or not to disallow shared libs when runtime libs are static
allow_libtool_libs_with_static_runtimes=no
# Whether or not to optimize for fast installation.
fast_install=yes
# The host system.
host_alias=
host=powerpc-ibm-aix5.1.0.0
# An echo program that does not interpret backslashes.
echo="print -r"
# The archiver.
AR="ar"
AR_FLAGS="cru"
# A C compiler.
LTCC="xlc_r"
# A language-specific compiler.
CC="xlc_r"
# Is the compiler the GNU C compiler?
with_gcc=
# An ERE matcher.
EGREP="grep -E"
# The linker used to build libraries.
LD="/bin/ld"
# Whether we need hard or soft links.
LN_S="ln -s"
# A BSD-compatible nm program.
NM="/bin/nm -B"
# A symbol stripping program
STRIP="strip"
# Used to examine libraries when file_magic_cmd begins "file"
MAGIC_CMD=file
# Used on cygwin: DLL creation program.
DLLTOOL="dlltool"
# Used on cygwin: object dumper.
OBJDUMP="objdump"
# Used on cygwin: assembler.
AS="as"
# The name of the directory that contains temporary libtool files.
objdir=.libs
# How to create reloadable object files.
reload_flag=" -r"
reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs"
# How to pass a linker flag through the compiler.
wl="-Wl,"
# Object file suffix (normally "o").
objext="o"
# Old archive suffix (normally "a").
libext="a"
# Shared library suffix (normally ".so").
shrext_cmds='.so'
# Executable file suffix (normally "").
exeext=""
# Additional compiler flags for building library objects.
pic_flag=" -DPIC"
pic_mode=default
# What is the maximum length of a command?
max_cmd_len=8192
# Does compiler simultaneously support -c and -o options?
compiler_c_o="yes"
# Must we lock files when doing compilation ?
need_locks="no"
# Do we need the lib prefix for modules?
need_lib_prefix=no
# Do we need a version for libraries?
need_version=no
# Whether dlopen is supported.
dlopen_support=unknown
# Whether dlopen of programs is supported.
dlopen_self=unknown
# Whether dlopen of statically linked programs is supported.
dlopen_self_static=unknown
# Compiler flag to prevent dynamic linking.
link_static_flag="-bnso -bI:/lib/syscalls.exp"
# Compiler flag to turn off builtin functions.
no_builtin_flag=""
# Compiler flag to allow reflexive dlopens.
export_dynamic_flag_spec=""
# Compiler flag to generate shared objects directly from archives.
whole_archive_flag_spec=" "
# Compiler flag to generate thread-safe objects.
thread_safe_flag_spec=""
# Library versioning type.
version_type=linux
# Format of library name prefix.
libname_spec="lib\$name"
# List of archive names. First name is the real one, the rest are links.
# The last name is the one that the linker finds with -lNAME.
library_names_spec="\${libname}\${release}.a \$libname.a"
# The coded name of the library, if different from the real name.
soname_spec="\${libname}\${release}\${shared_ext}\$major"
# Commands used to build and install an old-style archive.
RANLIB="ranlib"
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB
\$oldlib"
old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib"
old_postuninstall_cmds=""
# Create an old-style archive from a shared archive.
old_archive_from_new_cmds=""
# Create a temporary old-style archive to link instead of a shared archive.
old_archive_from_expsyms_cmds=""
# Commands used to build and install a shared archive.
archive_cmds=""
archive_expsym_cmds="\$CC \${wl}-bM:SRE -o \$output_objdir/\$soname
\$libobjs \$deplibs \$compiler_flags \${wl}-bE:\$export_symbols
\${wl}-bnoentry\${allow_undefined_flag}~\$AR \$AR_FLAGS
\$output_objdir/\$libname\$release.a \$output_objdir/\$soname"
postinstall_cmds=""
postuninstall_cmds=""
# Commands used to build a loadable module (assumed same as above if empty)
module_cmds=""
module_expsym_cmds=""
# Commands to strip libraries.
old_striplib=""
striplib=""
# Dependencies to place before the objects being linked to create a
# shared library.
predep_objects=""
# Dependencies to place after the objects being linked to create a
# shared library.
postdep_objects=""
# Dependencies to place before the objects being linked to create a
# shared library.
predeps=""
# Dependencies to place after the objects being linked to create a
# shared library.
postdeps=""
# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=""
# Method to check whether dependent libraries are shared objects.
deplibs_check_method="pass_all"
# Command to use when deplibs_check_method == file_magic.
file_magic_cmd="\$MAGIC_CMD"
# Flag that allows shared libraries with undefined symbols to be built.
allow_undefined_flag=" \${wl}-berok"
# Flag that forces no undefined symbols.
no_undefined_flag=" \${wl}-bernotok"
# Commands used to finish a libtool library installation in a directory.
finish_cmds=""
# Same as above, but a single script fragment to be evaled but not shown.
finish_eval=""
# Take the output of nm and produce a listing of raw symbols and C names.
global_symbol_pipe="sed -n -e 's/^.*[ ]\\([BCDT][BCDT]*\\)[ ][
]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'"
# Transform the output of nm in a proper C declaration
global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'"
# Transform the output of nm in a C name address pair
global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/
{\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/
{\"\\2\", (lt_ptr) \\&\\2},/p'"
# This is the shared library runtime path variable.
runpath_var=
# This is the shared library path variable.
shlibpath_var=LIBPATH
# Is shlibpath searched before the hard-coded library search path?
shlibpath_overrides_runpath=unknown
# How to hardcode a shared library path into an executable.
hardcode_action=immediate
# Whether we should hardcode library paths into libraries.
hardcode_into_libs=yes
# Flag to hardcode $libdir into a binary during linking.
# This must work even if $libdir does not exist.
hardcode_libdir_flag_spec="\${wl}-blibpath:\$libdir:/usr/local/lib:/usr/lpp/
xlopt:/usr/lib/threads:/usr/lib:/lib
"
# If ld is used when linking, flag to hardcode $libdir into
# a binary during linking. This must work even if $libdir does
# not exist.
hardcode_libdir_flag_spec_ld=""
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator=":"
# Set to yes if using DIR/libNAME during linking hardcodes DIR into the
# resulting binary.
hardcode_direct=yes
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L=no
# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
# the resulting binary.
hardcode_shlibpath_var=unsupported
# Set to yes if building a shared library automatically hardcodes DIR into
the library
# and all subsequent libraries and executables linked against it.
hardcode_automatic=no
# Variables whose values should be saved in libtool wrapper scripts and
# restored at relink time.
variables_saved_for_relink="PATH "
# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=yes
# Compile-time system search path for libraries
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
# Run-time system search path for libraries
sys_lib_dlsearch_path_spec="/lib /usr/lib"
# Fix the shell variable $srcfile for the compiler.
fix_srcfile_path=""
# Set to yes if exported symbols are required.
always_export_symbols=yes
# The commands to list exported symbols.
export_symbols_cmds="\$NM -BCpg \$libobjs \$convenience | awk '{ if (((\\\$2
== \\\"T\\\") || (\\\$2 == \\\"D\\\") || (\\\$2 == \\\"B\\\")) &&
(substr(\\\$3,1,1) != \\\".\\\")) { print \\\$3 } }' | sort -u >
\$export_symbols"
# The commands to extract the exported symbol list from a shared archive.
extract_expsyms_cmds=""
# Symbols that should not be listed in the preloaded symbols.
exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
# Symbols that must always be exported.
include_expsyms=""
-------------------------------
On Thu, 12 May 2005, Bill Northcott wrote:
On 11/05/2005, at 11:26 PM, Kurt Hornik wrote:
There seem to be problems in the autoconf stuff. cos
and sin are
being located in libm but the link line you show has no
'-lm' which
accounts for 6 of the 7 missing symbols. Also gettext
seems to have
been located by the configure script, but there is no
option on the
link line to include it in the link. Also search
configure.in for
strings like powerpc-ibm-aix to see what stuff is being done specifically for AIX. It may be out of date in relation to your system.
If it was my problem, I would have look at those bits of the configure script and the sections of configure.in that generated
them. Then I
would compare the AC_SUBST variables with the makefile.in that generated the link. It seems there is some non-
communication there.
Yes most of the undefined symbols seem to come from
libm. But they
would also be in libm on all other platforms which have such, and we do not include it there. On Linux I get