
At Wed, 7 Jan 2009 17:02:40 +0800, Cliff Cai wrote:
Hi all,
I'm trying to build the latest release alsa-lib-1.0.18 on Blackfin with option '--with-softfloat', but it failed with message:
libtool: install: warning: remember to run `libtool --finish /usr/lib/alsa-lib/smixer' ../src/.libs/libasound.so: undefined reference to `_sqrtf' ../src/.libs/libasound.so: undefined reference to `_exp' ../src/.libs/libasound.so: undefined reference to `_log' ../src/.libs/libasound.so: undefined reference to `_sqrt' ../src/.libs/libasound.so: undefined reference to `_fmod' ../src/.libs/libasound.so: undefined reference to `_floor'
Since I've selected --with-softfloat, '-lm' should be excluded from ALSA_DEPLIBS. but some source files still depend on libm, such as .../pcm/pcm_ladspa.c;.../mixer/ simple_none.c .../alisp/alisp.c.These there files cause undefined reference as above.
Bah, at least, simple_none.c should be without math stuff.
pcm_ladspa.c can't be build without libm, I guess. This should be excluded with the softfload option. Ditto for alisp.
How about the patch below?
thanks,
Takashi
--- diff --git a/configure.in b/configure.in index 5bc0c01..cc1109f 100644 --- a/configure.in +++ b/configure.in @@ -367,6 +367,7 @@ AC_ARG_ENABLE(seq, AC_ARG_ENABLE(alisp, AS_HELP_STRING([--disable-alisp], [disable the alisp component]), [build_alisp="$enableval"], [build_alisp="yes"]) +test "$softfloat" = "yes" && build_alisp="no" AC_ARG_ENABLE(old-symbols, AS_HELP_STRING([--disable-old-symbols], [disable old obsoleted symbols]), [keep_old_symbols="$enableval"], [keep_old_symbols="yes"]) @@ -474,6 +475,7 @@ fi
if test "$softfloat" = "yes"; then build_pcm_lfloat="no" + build_pcm_ladspa="no" fi
AM_CONDITIONAL(BUILD_PCM_PLUGIN, test x$build_pcm_plugin = xyes) diff --git a/src/mixer/simple_none.c b/src/mixer/simple_none.c index 0f4dd3a..a65619d 100644 --- a/src/mixer/simple_none.c +++ b/src/mixer/simple_none.c @@ -1450,7 +1450,14 @@ static int simple_add1(snd_mixer_class_t *class, const char *name, } if (ctype != SND_CTL_ELEM_TYPE_BOOLEAN) return 0; +#ifdef HAVE_SOFT_FLOAT + /* up to 256 channels */ + for (n = 1; n < 256; n++) + if (n * n == values) + break; +#else n = sqrt((double)values); +#endif if (n * n != values) return 0; values = n;