All of lore.kernel.org
 help / color / mirror / Atom feed
* Static build of alsa-lib
@ 2007-03-16 13:17 Ciaccia
  2007-03-16 14:18 ` Takashi Iwai
  0 siblings, 1 reply; 11+ messages in thread
From: Ciaccia @ 2007-03-16 13:17 UTC (permalink / raw)
  To: alsa-devel

Hi there,
I would like to compile an alsa application for an
embedded system with no shared-libraries support. My
application just needs PCM, with no plug-ins, no mixer
and no midi and the application should be a standalone
executable with no external dependencies, otherwise it
will not work.

I tried to compile alsa-lib with static support, but
without luck (-ldl is always needed in the gcc line
and gcc always prints some weird warnings). Since I
don't need external plugins nor ladspa, I think there
should be a way to compile an application in a 100%
static manner, but I still have to figure out how.

I also found this thread with a similar problem with
uClinux
http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html
but at the end I did not understand how/if the problem
was solved.

Do you think it should be possible to compile alsa-lib
with no dependencies on dl? How?

Otherwise, would it be possible to write an alsa
application that does not rely on alsa-lib (i.e.,
by using the alsa kernel APIs directly)? Has someone
already tried it? Some hints?

Every hint is extremely welcome

Thanks a lot
Best regards
Andrea


 
____________________________________________________________________________________
Food fight? Enjoy some healthy debate 
in the Yahoo! Answers Food & Drink Q&A.
http://answers.yahoo.com/dir/?link=list&sid=396545367

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-16 13:17 Static build of alsa-lib Ciaccia
@ 2007-03-16 14:18 ` Takashi Iwai
  2007-03-16 14:24   ` Takashi Iwai
  2007-03-17 10:13   ` Ciaccia
  0 siblings, 2 replies; 11+ messages in thread
From: Takashi Iwai @ 2007-03-16 14:18 UTC (permalink / raw)
  To: Ciaccia; +Cc: alsa-devel

At Fri, 16 Mar 2007 06:17:00 -0700 (PDT),
Ciaccia wrote:
> 
> Hi there,
> I would like to compile an alsa application for an
> embedded system with no shared-libraries support. My
> application just needs PCM, with no plug-ins, no mixer
> and no midi and the application should be a standalone
> executable with no external dependencies, otherwise it
> will not work.
> 
> I tried to compile alsa-lib with static support, but
> without luck (-ldl is always needed in the gcc line
> and gcc always prints some weird warnings). Since I
> don't need external plugins nor ladspa, I think there
> should be a way to compile an application in a 100%
> static manner, but I still have to figure out how.
> 
> I also found this thread with a similar problem with
> uClinux
> http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html
> but at the end I did not understand how/if the problem
> was solved.
> 
> Do you think it should be possible to compile alsa-lib
> with no dependencies on dl? How?
> 
> Otherwise, would it be possible to write an alsa
> application that does not rely on alsa-lib (i.e.,
> by using the alsa kernel APIs directly)? Has someone
> already tried it? Some hints?
> 
> Every hint is extremely welcome

I worked on this sometime ago, and made a patch to build alsa-lib
without pthread and libdl.  I don't remember why this wasn't applied.
IIRC, ulibc has the wrappers for pthread and libdl, so this wasn't
needed at that time in the end.

Otherwise, it should work.  Build with --enable-static
--disable-shared, --disble-mixer, --disable-hwdep, etc.


Takashi

diff -r f1203eb7eb48 configure.in
--- a/configure.in	Tue Mar 13 10:44:28 2007 +0100
+++ b/configure.in	Fri Mar 16 15:07:51 2007 +0100
@@ -148,6 +148,23 @@ else
 else
   AC_MSG_RESULT(no)
 fi
+
+AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
+AC_CHECK_LIB([pthread], [pthread_join], [HAVE_LIBPTHREAD="yes"])
+
+ALSA_DEPLIBS=""
+if test "$softfloat" != "yes"; then
+  ALSA_DEPLIBS="-lm"
+fi
+if test "$HAVE_LIBDL" = "yes"; then
+  ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
+  AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
+fi
+if test "$HAVE_LIBPTHREAD" = "yes"; then
+  ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
+  AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have libpthread])
+fi
+AC_SUBST(ALSA_DEPLIBS)
 
 dnl Check for architecture
 AC_MSG_CHECKING(for architecture)
diff -r f1203eb7eb48 include/local.h
--- a/include/local.h	Tue Mar 13 10:44:28 2007 +0100
+++ b/include/local.h	Fri Mar 16 15:07:51 2007 +0100
@@ -36,6 +36,11 @@
 #include "config.h"
 #ifdef SUPPORT_RESMGR
 #include <resmgr.h>
+#endif
+#ifdef HAVE_LIBDL
+#include <dlfcn.h>
+#else
+#define RTLD_NOW	0
 #endif
 
 #define _snd_config_iterator list_head
diff -r f1203eb7eb48 src/Makefile.am
--- a/src/Makefile.am	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/Makefile.am	Fri Mar 16 15:07:51 2007 +0100
@@ -41,7 +41,7 @@ libasound_la_LIBADD += alisp/libalisp.la
 libasound_la_LIBADD += alisp/libalisp.la
 endif
 SUBDIRS += compat conf
-libasound_la_LIBADD += compat/libcompat.la -lm -ldl -lpthread
+libasound_la_LIBADD += compat/libcompat.la @ALSA_DEPLIBS@
 
 libasound_la_LDFLAGS = -version-info $(COMPATNUM) $(VSYMS)
 
diff -r f1203eb7eb48 src/async.c
--- a/src/async.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/async.c	Fri Mar 16 15:07:51 2007 +0100
@@ -151,9 +151,11 @@ int snd_async_del_handler(snd_async_hand
 	if (!list_empty(&handler->hlist))
 		goto _end;
 	switch (handler->type) {
+#ifdef BUILD_PCM
 	case SND_ASYNC_HANDLER_PCM:
 		err = snd_pcm_async(handler->u.pcm, -1, 1);
 		break;
+#endif
 	case SND_ASYNC_HANDLER_CTL:
 		err = snd_ctl_async(handler->u.ctl, -1, 1);
 		break;
diff -r f1203eb7eb48 src/conf.c
--- a/src/conf.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/conf.c	Fri Mar 16 15:07:51 2007 +0100
@@ -415,12 +415,13 @@ beginning:</P>
 
 
 #include <stdarg.h>
-#include <dlfcn.h>
 #include <limits.h>
 #include <sys/stat.h>
-#include <pthread.h>
 #include <locale.h>
 #include "local.h"
+#ifdef HAVE_LIBPTHREAD
+#include <pthread.h>
+#endif
 
 #ifndef DOC_HIDDEN
 
@@ -3080,7 +3081,9 @@ int snd_config_update_r(snd_config_t **_
 	return 1;
 }
 
+#ifdef HAVE_LIBPTHREAD
 static pthread_mutex_t snd_config_update_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
 
 /** 
  * \brief Updates #snd_config by rereading the global configuration files (if needed).
@@ -3099,9 +3102,13 @@ int snd_config_update(void)
 {
 	int err;
 
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_lock(&snd_config_update_mutex);
+#endif
 	err = snd_config_update_r(&snd_config, &snd_config_global_update, NULL);
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_unlock(&snd_config_update_mutex);
+#endif
 	return err;
 }
 
@@ -3128,15 +3135,18 @@ int snd_config_update_free(snd_config_up
  */
 int snd_config_update_free_global(void)
 {
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_lock(&snd_config_update_mutex);
+#endif
 	if (snd_config)
 		snd_config_delete(snd_config);
 	snd_config = NULL;
 	if (snd_config_global_update)
 		snd_config_update_free(snd_config_global_update);
 	snd_config_global_update = NULL;
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_unlock(&snd_config_update_mutex);
-
+#endif
 	/* FIXME: better to place this in another place... */
 	snd_dlobj_cache_cleanup();
 
diff -r f1203eb7eb48 src/confmisc.c
--- a/src/confmisc.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/confmisc.c	Fri Mar 16 15:07:51 2007 +0100
@@ -946,6 +946,8 @@ SND_DLSYM_BUILD_VERSION(snd_func_card_na
 SND_DLSYM_BUILD_VERSION(snd_func_card_name, SND_CONFIG_DLSYM_VERSION_EVALUATE);
 #endif
 
+#ifdef BUILD_PCM
+
 /**
  * \brief Returns the pcm identification of a device.
  * \param dst The function puts the handle to the result configuration node
@@ -1198,6 +1200,8 @@ int snd_func_private_pcm_subdevice(snd_c
 #ifndef DOC_HIDDEN
 SND_DLSYM_BUILD_VERSION(snd_func_private_pcm_subdevice, SND_CONFIG_DLSYM_VERSION_EVALUATE);
 #endif
+
+#endif /* BUILD_PCM */
 
 /**
  * \brief Copies the specified configuration node.
diff -r f1203eb7eb48 src/control/control.c
--- a/src/control/control.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/control/control.c	Fri Mar 16 15:07:51 2007 +0100
@@ -47,7 +47,6 @@ and IEC958 structure.
 #include <string.h>
 #include <fcntl.h>
 #include <signal.h>
-#include <dlfcn.h>
 #include <sys/poll.h>
 #include "control_local.h"
 
diff -r f1203eb7eb48 src/control/hcontrol.c
--- a/src/control/hcontrol.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/control/hcontrol.c	Fri Mar 16 15:07:51 2007 +0100
@@ -48,11 +48,13 @@ to reduce overhead accessing the real co
 #include <string.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
-#include <pthread.h>
 #ifndef DOC_HIDDEN
 #define __USE_GNU
 #endif
 #include "control_local.h"
+#ifdef HAVE_LIBPTHREAD
+#include <pthread.h>
+#endif
 
 #ifndef DOC_HIDDEN
 #define NOT_FOUND 1000000000
@@ -420,17 +422,22 @@ static void snd_hctl_sort(snd_hctl_t *hc
 static void snd_hctl_sort(snd_hctl_t *hctl)
 {
 	unsigned int k;
+#ifdef HAVE_LIBPTHREAD
 	static pthread_mutex_t sync_lock = PTHREAD_MUTEX_INITIALIZER;
+#endif
 
 	assert(hctl);
 	assert(hctl->compare);
 	INIT_LIST_HEAD(&hctl->elems);
 
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_lock(&sync_lock);
+#endif
 	compare_hctl = hctl;
 	qsort(hctl->pelems, hctl->count, sizeof(*hctl->pelems), hctl_compare);
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_unlock(&sync_lock);
-
+#endif
 	for (k = 0; k < hctl->count; k++)
 		list_add_tail(&hctl->pelems[k]->list, &hctl->elems);
 }
diff -r f1203eb7eb48 src/dlmisc.c
--- a/src/dlmisc.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/dlmisc.c	Fri Mar 16 15:07:51 2007 +0100
@@ -28,7 +28,6 @@
  */
 
 #define _GNU_SOURCE
-#include <dlfcn.h>
 #include "list.h"
 #include "local.h"
 
@@ -53,13 +52,19 @@ void *snd_dlopen(const char *name, int m
 	if (name == NULL)
 		return &snd_dlsym_start;
 #else
+#ifdef HAVE_LIBDL
 	if (name == NULL) {
 		Dl_info dlinfo;
 		if (dladdr(snd_dlopen, &dlinfo) > 0)
 			name = dlinfo.dli_fname;
 	}
 #endif
+#endif
+#ifdef HAVE_LIBDL
 	return dlopen(name, mode);
+#else
+	return NULL;
+#endif
 }
 
 /**
@@ -76,7 +81,11 @@ int snd_dlclose(void *handle)
 	if (handle == &snd_dlsym_start)
 		return 0;
 #endif
+#ifdef HAVE_LIBDL
 	return dlclose(handle);
+#else
+	return 0;
+#endif
 }
 
 /**
@@ -91,6 +100,7 @@ int snd_dlclose(void *handle)
  */
 static int snd_dlsym_verify(void *handle, const char *name, const char *version)
 {
+#ifdef HAVE_LIBDL
 	int res;
 	char *vname;
 	
@@ -107,6 +117,9 @@ static int snd_dlsym_verify(void *handle
 	if (res < 0)
 		SNDERR("unable to verify version for symbol %s", name);
 	return res;
+#else
+	return 0;
+#endif
 }
 
 /**
@@ -139,10 +152,14 @@ void *snd_dlsym(void *handle, const char
 		return NULL;
 	}
 #endif
+#ifdef HAVE_LIBDL
 	err = snd_dlsym_verify(handle, name, version);
 	if (err < 0)
 		return NULL;
 	return dlsym(handle, name);
+#else
+	return NULL;
+#endif
 }
 
 /*
diff -r f1203eb7eb48 src/hwdep/hwdep.c
--- a/src/hwdep/hwdep.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/hwdep/hwdep.c	Fri Mar 16 15:07:52 2007 +0100
@@ -33,7 +33,6 @@
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
-#include <dlfcn.h>
 #include <sys/ioctl.h>
 #include "hwdep_local.h"
 
diff -r f1203eb7eb48 src/pcm/pcm.c
--- a/src/pcm/pcm.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/pcm/pcm.c	Fri Mar 16 15:07:52 2007 +0100
@@ -634,7 +634,6 @@ playback devices.
 #include <malloc.h>
 #include <stdarg.h>
 #include <signal.h>
-#include <dlfcn.h>
 #include <sys/poll.h>
 #include <sys/shm.h>
 #include <sys/mman.h>
diff -r f1203eb7eb48 src/pcm/pcm_hooks.c
--- a/src/pcm/pcm_hooks.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/pcm/pcm_hooks.c	Fri Mar 16 15:07:52 2007 +0100
@@ -27,7 +27,6 @@
  *
  */
   
-#include <dlfcn.h>
 #include "pcm_local.h"
 #include "pcm_generic.h"
 
diff -r f1203eb7eb48 src/pcm/pcm_ladspa.c
--- a/src/pcm/pcm_ladspa.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/pcm/pcm_ladspa.c	Fri Mar 16 15:07:52 2007 +0100
@@ -33,7 +33,6 @@
  */
   
 #include <dirent.h>
-#include <dlfcn.h>
 #include <locale.h>
 #include <math.h>
 #include "pcm_local.h"
diff -r f1203eb7eb48 src/pcm/pcm_meter.c
--- a/src/pcm/pcm_meter.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/pcm/pcm_meter.c	Fri Mar 16 15:07:52 2007 +0100
@@ -29,11 +29,12 @@
 
 #include <byteswap.h>
 #include <time.h>
-#include <pthread.h>
-#include <dlfcn.h>
 #include "pcm_local.h"
 #include "pcm_plugin.h"
 #include "iatomic.h"
+#ifdef HAVE_LIBPTHREAD
+#include <pthread.h>
+#endif
 
 #ifndef PIC
 /* entry for static linking */
@@ -42,6 +43,20 @@ const char *_snd_module_pcm_meter = "";
 
 #ifndef DOC_HIDDEN
 #define FREQUENCY 50
+
+#ifndef HAVE_LIBPTHREAD
+#define pthread_mutex_trylock(x)	1
+#define pthread_mutex_lock(x)
+#define pthread_mutex_unlock(x)
+#define pthread_mutex_init(x, y)
+#define pthread_mutex_destroy(x)
+#define pthread_cond_init(x, y)
+#define pthread_cond_destroy(x)
+#define pthread_cond_wait(x, y)
+#define pthread_cond_signal(x)
+#define pthread_create(a, b, c, d)
+#define pthread_join(a, b)
+#endif
 
 struct _snd_pcm_scope {
 	int enabled;
@@ -62,10 +77,12 @@ typedef struct _snd_pcm_meter {
 	int closed;
 	int running;
 	atomic_t reset;
+#ifdef HAVE_LIBPTHREAD
 	pthread_t thread;
 	pthread_mutex_t update_mutex;
 	pthread_mutex_t running_mutex;
 	pthread_cond_t running_cond;
+#endif
 	struct timespec delay;
 	void *dl_handle;
 } snd_pcm_meter_t;
diff -r f1203eb7eb48 src/pcm/pcm_rate.c
--- a/src/pcm/pcm_rate.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/pcm/pcm_rate.c	Fri Mar 16 15:07:52 2007 +0100
@@ -29,7 +29,6 @@
  */
 #include <inttypes.h>
 #include <byteswap.h>
-#include <dlfcn.h>
 #include "pcm_local.h"
 #include "pcm_plugin.h"
 #include "pcm_rate.h"
diff -r f1203eb7eb48 src/pcm/pcm_share.c
--- a/src/pcm/pcm_share.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/pcm/pcm_share.c	Fri Mar 16 15:07:52 2007 +0100
@@ -36,8 +36,10 @@
 #include <sys/socket.h>
 #include <sys/poll.h>
 #include <sys/shm.h>
+#include "pcm_local.h"
+#ifdef HAVE_LIBPTHREAD
 #include <pthread.h>
-#include "pcm_local.h"
+#endif
 
 #ifndef PIC
 /* entry for static linking */
@@ -47,8 +49,11 @@ const char *_snd_module_pcm_share = "";
 #ifndef DOC_HIDDEN
 
 static LIST_HEAD(snd_pcm_share_slaves);
+#ifdef HAVE_LIBPTHREAD
 static pthread_mutex_t snd_pcm_share_slaves_mutex = PTHREAD_MUTEX_INITIALIZER;
-
+#endif
+
+#ifdef HAVE_LIBPTHREAD
 #ifdef MUTEX_DEBUG
 #define Pthread_mutex_lock(mutex) \
 char *snd_pcm_share_slaves_mutex_holder;
@@ -71,6 +76,18 @@ do { \
 #define Pthread_mutex_lock(mutex) pthread_mutex_lock(mutex)
 #define Pthread_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
 #endif
+#else /* !HAVE_LIBPTHREAD */
+#define Pthread_mutex_lock(mutex)
+#define Pthread_mutex_unlock(mutex)
+#define pthread_create(a, b, c, d)
+#define pthread_join(a, b)
+#define pthread_mutex_init(a, b)
+#define pthread_mutex_destroy(a)
+#define pthread_cond_init(a, b)
+#define pthread_cond_destroy(a)
+#define pthread_cond_wait(a, b)
+#define pthread_cond_signal(a)
+#endif /* HAVE_LIBPTHREAD */
 
 typedef struct {
 	struct list_head clients;
@@ -91,12 +108,14 @@ typedef struct {
 	snd_pcm_uframes_t hw_ptr;
 	int poll[2];
 	int polling;
+#ifdef HAVE_LIBPTHREAD
 	pthread_t thread;
 	pthread_mutex_t mutex;
 #ifdef MUTEX_DEBUG
 	char *mutex_holder;
 #endif
 	pthread_cond_t poll_cond;
+#endif
 } snd_pcm_share_slave_t;
 
 typedef struct {
diff -r f1203eb7eb48 src/rawmidi/rawmidi.c
--- a/src/rawmidi/rawmidi.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/rawmidi/rawmidi.c	Fri Mar 16 15:07:52 2007 +0100
@@ -139,7 +139,6 @@ This example shows open and read/write r
 #include <stdarg.h>
 #include <unistd.h>
 #include <string.h>
-#include <dlfcn.h>
 #include "rawmidi_local.h"
 
 /**
diff -r f1203eb7eb48 src/seq/seq.c
--- a/src/seq/seq.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/seq/seq.c	Fri Mar 16 15:07:52 2007 +0100
@@ -777,7 +777,6 @@ void event_filter(snd_seq_t *seq, snd_se
 
 */
 
-#include <dlfcn.h>
 #include <sys/poll.h>
 #include "seq_local.h"
 
diff -r f1203eb7eb48 src/timer/timer.c
--- a/src/timer/timer.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/timer/timer.c	Fri Mar 16 15:07:52 2007 +0100
@@ -72,7 +72,6 @@ This example shows opening a timer devic
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
-#include <dlfcn.h>
 #include <signal.h>
 #include <sys/ioctl.h>
 #include "timer_local.h"
diff -r f1203eb7eb48 src/timer/timer_query.c
--- a/src/timer/timer_query.c	Tue Mar 13 10:44:28 2007 +0100
+++ b/src/timer/timer_query.c	Fri Mar 16 15:07:52 2007 +0100
@@ -31,7 +31,6 @@
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
-#include <dlfcn.h>
 #include <sys/ioctl.h>
 #include "timer_local.h"
 
diff -r f1203eb7eb48 utils/alsa.pc.in
--- a/utils/alsa.pc.in	Tue Mar 13 10:44:28 2007 +0100
+++ b/utils/alsa.pc.in	Fri Mar 16 15:07:52 2007 +0100
@@ -8,7 +8,7 @@ Version: @VERSION@
 Version: @VERSION@
 Requires: 
 Libs: -L${libdir} -lasound
-Libs.private: -lm -ldl -lpthread
+Libs.private: @ALSA_DEPLIBS@
 # -I${includedir}/alsa below is just for backward compatibility
 # (it was set so mistakely in the older version)
 Cflags: -I${includedir} -I${includedir}/alsa

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-16 14:18 ` Takashi Iwai
@ 2007-03-16 14:24   ` Takashi Iwai
  2007-03-16 15:11     ` Ciaccia
  2007-03-17 10:13   ` Ciaccia
  1 sibling, 1 reply; 11+ messages in thread
From: Takashi Iwai @ 2007-03-16 14:24 UTC (permalink / raw)
  To: Ciaccia; +Cc: alsa-devel

At Fri, 16 Mar 2007 15:18:04 +0100,
I wrote:
> 
> At Fri, 16 Mar 2007 06:17:00 -0700 (PDT),
> Ciaccia wrote:
> > 
> > Hi there,
> > I would like to compile an alsa application for an
> > embedded system with no shared-libraries support. My
> > application just needs PCM, with no plug-ins, no mixer
> > and no midi and the application should be a standalone
> > executable with no external dependencies, otherwise it
> > will not work.
> > 
> > I tried to compile alsa-lib with static support, but
> > without luck (-ldl is always needed in the gcc line
> > and gcc always prints some weird warnings). Since I
> > don't need external plugins nor ladspa, I think there
> > should be a way to compile an application in a 100%
> > static manner, but I still have to figure out how.
> > 
> > I also found this thread with a similar problem with
> > uClinux
> > http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html
> > but at the end I did not understand how/if the problem
> > was solved.
> > 
> > Do you think it should be possible to compile alsa-lib
> > with no dependencies on dl? How?
> > 
> > Otherwise, would it be possible to write an alsa
> > application that does not rely on alsa-lib (i.e.,
> > by using the alsa kernel APIs directly)? Has someone
> > already tried it? Some hints?
> > 
> > Every hint is extremely welcome
> 
> I worked on this sometime ago, and made a patch to build alsa-lib
> without pthread and libdl.  I don't remember why this wasn't applied.
> IIRC, ulibc has the wrappers for pthread and libdl, so this wasn't
> needed at that time in the end.
> 
> Otherwise, it should work.  Build with --enable-static
> --disable-shared, --disble-mixer, --disable-hwdep, etc.

... oh, not perfectly if really no pcm plugin is used.
The patch below fixes the build problem.  Already applied to HG tree.


Takashi

diff -r f1203eb7eb48 configure.in
--- a/configure.in	Tue Mar 13 10:44:28 2007 +0100
+++ b/configure.in	Fri Mar 16 15:18:21 2007 +0100
@@ -371,6 +371,7 @@ fi
 
 dnl Create PCM plugin symbol list for static library
 rm -f "$srcdir"/src/pcm/pcm_symbols_list.c
+touch "$srcdir"/src/pcm/pcm_symbols_list.c
 for t in $PCM_PLUGIN_LIST; do
   if eval test \$build_pcm_$t = yes; then
     echo \&_snd_module_pcm_$t, >> "$srcdir"/src/pcm/pcm_symbols_list.c

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-16 14:24   ` Takashi Iwai
@ 2007-03-16 15:11     ` Ciaccia
  2007-03-16 15:20       ` Takashi Iwai
  0 siblings, 1 reply; 11+ messages in thread
From: Ciaccia @ 2007-03-16 15:11 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel

Hi Takashi,
Thanks for the answer. To I need both the patches or
just the first one? Which alsa-lib release should I
use with the patch, 1.0.13?

PS: sorry, what is the HG tree?

--- Takashi Iwai <tiwai@suse.de> wrote:

> At Fri, 16 Mar 2007 15:18:04 +0100,
> I wrote:
> > 
> > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT),
> > Ciaccia wrote:
> > > 
> > > Hi there,
> > > I would like to compile an alsa application for
> an
> > > embedded system with no shared-libraries
> support. My
> > > application just needs PCM, with no plug-ins, no
> mixer
> > > and no midi and the application should be a
> standalone
> > > executable with no external dependencies,
> otherwise it
> > > will not work.
> > > 
> > > I tried to compile alsa-lib with static support,
> but
> > > without luck (-ldl is always needed in the gcc
> line
> > > and gcc always prints some weird warnings).
> Since I
> > > don't need external plugins nor ladspa, I think
> there
> > > should be a way to compile an application in a
> 100%
> > > static manner, but I still have to figure out
> how.
> > > 
> > > I also found this thread with a similar problem
> with
> > > uClinux
> > >
>
http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html
> > > but at the end I did not understand how/if the
> problem
> > > was solved.
> > > 
> > > Do you think it should be possible to compile
> alsa-lib
> > > with no dependencies on dl? How?
> > > 
> > > Otherwise, would it be possible to write an alsa
> > > application that does not rely on alsa-lib
> (i.e.,
> > > by using the alsa kernel APIs directly)? Has
> someone
> > > already tried it? Some hints?
> > > 
> > > Every hint is extremely welcome
> > 
> > I worked on this sometime ago, and made a patch to
> build alsa-lib
> > without pthread and libdl.  I don't remember why
> this wasn't applied.
> > IIRC, ulibc has the wrappers for pthread and
> libdl, so this wasn't
> > needed at that time in the end.
> > 
> > Otherwise, it should work.  Build with
> --enable-static
> > --disable-shared, --disble-mixer, --disable-hwdep,
> etc.
> 
> ... oh, not perfectly if really no pcm plugin is
> used.
> The patch below fixes the build problem.  Already
> applied to HG tree.
> 
> 
> Takashi
> 
> diff -r f1203eb7eb48 configure.in
> --- a/configure.in	Tue Mar 13 10:44:28 2007 +0100
> +++ b/configure.in	Fri Mar 16 15:18:21 2007 +0100
> @@ -371,6 +371,7 @@ fi
>  
>  dnl Create PCM plugin symbol list for static
> library
>  rm -f "$srcdir"/src/pcm/pcm_symbols_list.c
> +touch "$srcdir"/src/pcm/pcm_symbols_list.c
>  for t in $PCM_PLUGIN_LIST; do
>    if eval test \$build_pcm_$t = yes; then
>      echo \&_snd_module_pcm_$t, >>
> "$srcdir"/src/pcm/pcm_symbols_list.c
> 



 
____________________________________________________________________________________
Don't get soaked.  Take a quick peek at the forecast
with the Yahoo! Search weather shortcut.
http://tools.search.yahoo.com/shortcuts/#loc_weather

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-16 15:11     ` Ciaccia
@ 2007-03-16 15:20       ` Takashi Iwai
  0 siblings, 0 replies; 11+ messages in thread
From: Takashi Iwai @ 2007-03-16 15:20 UTC (permalink / raw)
  To: Ciaccia; +Cc: alsa-devel

At Fri, 16 Mar 2007 08:11:20 -0700 (PDT),
Ciaccia wrote:
> 
> Hi Takashi,
> Thanks for the answer. To I need both the patches or
> just the first one?

The second one is for the fix to build without any extra pcm plugins
(i.e. --with-pcm-plugins=hw or so).

> Which alsa-lib release should I
> use with the patch, 1.0.13?

Better to use the latest HG version.

> PS: sorry, what is the HG tree?

HG (Mercurial) is what we are currently using as the source tree
management.  See www.alsa-project.org download section.

The daily snapshot tarballs are available at
	ftp://ftp.suse.com/pub/projects/alsa/snapshot/


Takashi

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-16 14:18 ` Takashi Iwai
  2007-03-16 14:24   ` Takashi Iwai
@ 2007-03-17 10:13   ` Ciaccia
  2007-03-20 10:48     ` Takashi Iwai
  1 sibling, 1 reply; 11+ messages in thread
From: Ciaccia @ 2007-03-17 10:13 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel

Hi Takashi,
I downloaded the last snapshot from hg
(alsa-lib-hg20070317) and I applied the patch you
included in your email. Then I configured alsa-lib as
following:

./configure --enable-static --disable-shared
--disable-mixer --disable-hwdep --disable-rawmidi
--disable-seq --disable-instr --disable-alisp
-with-pcm-plugins=no


I just need PCM, so I disable all the packages but
PCM. Then I compiled my mini application (just
snd_pcm_open, configure it and write some data to it)
with the following command-line (I'm using gcc 4.1):

$ gcc -o test test.c
-L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -lm
-lpthread -static
          
and I got the following errors/warnings:

/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(control_shm.o):
In function `_snd_ctl_shm_open':
/tmp/alsa-lib-hg20070317/src/control/control_shm.c:664:
warning: Using 'gethostbyname' in statically linked
applications requires at runtime the shared libraries
from the glibc version used for linking
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
In function `snd_dlsym_verify':
/tmp/alsa-lib-hg20070317/src/dlmisc.c:115: undefined
reference to `dlsym'
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
In function `snd_dlsym':
/tmp/alsa-lib-hg20070317/src/dlmisc.c:159: undefined
reference to `dlsym'
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
In function `snd_dlclose':
/tmp/alsa-lib-hg20070317/src/dlmisc.c:85: undefined
reference to `dlclose'
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
In function `snd_dlopen':
/tmp/alsa-lib-hg20070317/src/dlmisc.c:64: undefined
reference to `dlopen'
collect2: ld returned 1 exit status
                                      
Am I doing something wrong?!?

Thanks
Bye
Andrea

--- Takashi Iwai <tiwai@suse.de> wrote:

> At Fri, 16 Mar 2007 06:17:00 -0700 (PDT),
> Ciaccia wrote:
> > 
> > Hi there,
> > I would like to compile an alsa application for an
> > embedded system with no shared-libraries support.
> My
> > application just needs PCM, with no plug-ins, no
> mixer
> > and no midi and the application should be a
> standalone
> > executable with no external dependencies,
> otherwise it
> > will not work.
> > 
> > I tried to compile alsa-lib with static support,
> but
> > without luck (-ldl is always needed in the gcc
> line
> > and gcc always prints some weird warnings). Since
> I
> > don't need external plugins nor ladspa, I think
> there
> > should be a way to compile an application in a
> 100%
> > static manner, but I still have to figure out how.
> > 
> > I also found this thread with a similar problem
> with
> > uClinux
> >
>
http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html
> > but at the end I did not understand how/if the
> problem
> > was solved.
> > 
> > Do you think it should be possible to compile
> alsa-lib
> > with no dependencies on dl? How?
> > 
> > Otherwise, would it be possible to write an alsa
> > application that does not rely on alsa-lib (i.e.,
> > by using the alsa kernel APIs directly)? Has
> someone
> > already tried it? Some hints?
> > 
> > Every hint is extremely welcome
> 
> I worked on this sometime ago, and made a patch to
> build alsa-lib
> without pthread and libdl.  I don't remember why
> this wasn't applied.
> IIRC, ulibc has the wrappers for pthread and libdl,
> so this wasn't
> needed at that time in the end.
> 
> Otherwise, it should work.  Build with
> --enable-static
> --disable-shared, --disble-mixer, --disable-hwdep,
> etc.
> 
> 
> Takashi
> 
> diff -r f1203eb7eb48 configure.in
> --- a/configure.in	Tue Mar 13 10:44:28 2007 +0100
> +++ b/configure.in	Fri Mar 16 15:07:51 2007 +0100
> @@ -148,6 +148,23 @@ else
>  else
>    AC_MSG_RESULT(no)
>  fi
> +
> +AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
> +AC_CHECK_LIB([pthread], [pthread_join],
> [HAVE_LIBPTHREAD="yes"])
> +
> +ALSA_DEPLIBS=""
> +if test "$softfloat" != "yes"; then
> +  ALSA_DEPLIBS="-lm"
> +fi
> +if test "$HAVE_LIBDL" = "yes"; then
> +  ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
> +  AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
> +fi
> +if test "$HAVE_LIBPTHREAD" = "yes"; then
> +  ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
> +  AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have
> libpthread])
> +fi
> +AC_SUBST(ALSA_DEPLIBS)
>  
>  dnl Check for architecture
>  AC_MSG_CHECKING(for architecture)
> diff -r f1203eb7eb48 include/local.h
> --- a/include/local.h	Tue Mar 13 10:44:28 2007 +0100
> +++ b/include/local.h	Fri Mar 16 15:07:51 2007 +0100
> @@ -36,6 +36,11 @@
>  #include "config.h"
>  #ifdef SUPPORT_RESMGR
>  #include <resmgr.h>
> +#endif
> +#ifdef HAVE_LIBDL
> +#include <dlfcn.h>
> +#else
> +#define RTLD_NOW	0
>  #endif
>  
>  #define _snd_config_iterator list_head
> diff -r f1203eb7eb48 src/Makefile.am
> --- a/src/Makefile.am	Tue Mar 13 10:44:28 2007 +0100
> +++ b/src/Makefile.am	Fri Mar 16 15:07:51 2007 +0100
> @@ -41,7 +41,7 @@ libasound_la_LIBADD +=
> alisp/libalisp.la
>  libasound_la_LIBADD += alisp/libalisp.la
>  endif
>  SUBDIRS += compat conf
> -libasound_la_LIBADD += compat/libcompat.la -lm -ldl
> -lpthread
> +libasound_la_LIBADD += compat/libcompat.la
> @ALSA_DEPLIBS@
>  
>  libasound_la_LDFLAGS = -version-info $(COMPATNUM)
> $(VSYMS)
>  
> diff -r f1203eb7eb48 src/async.c
> --- a/src/async.c	Tue Mar 13 10:44:28 2007 +0100
> +++ b/src/async.c	Fri Mar 16 15:07:51 2007 +0100
> @@ -151,9 +151,11 @@ int
> snd_async_del_handler(snd_async_hand
>  	if (!list_empty(&handler->hlist))
>  		goto _end;
>  	switch (handler->type) {
> +#ifdef BUILD_PCM
>  	case SND_ASYNC_HANDLER_PCM:
>  		err = snd_pcm_async(handler->u.pcm, -1, 1);
>  		break;
> +#endif
>  	case SND_ASYNC_HANDLER_CTL:
>  		err = snd_ctl_async(handler->u.ctl, -1, 1);
>  		break;
> diff -r f1203eb7eb48 src/conf.c
> --- a/src/conf.c	Tue Mar 13 10:44:28 2007 +0100
> +++ b/src/conf.c	Fri Mar 16 15:07:51 2007 +0100
> @@ -415,12 +415,13 @@ beginning:</P>
>  
>  
>  #include <stdarg.h>
> -#include <dlfcn.h>
>  #include <limits.h>
>  #include <sys/stat.h>
> -#include <pthread.h>
>  #include <locale.h>
>  #include "local.h"
> +#ifdef HAVE_LIBPTHREAD
> +#include <pthread.h>
> +#endif
>  
>  #ifndef DOC_HIDDEN
>  
> @@ -3080,7 +3081,9 @@ int
> snd_config_update_r(snd_config_t **_
>  	return 1;
>  }
>  
> +#ifdef HAVE_LIBPTHREAD
>  static pthread_mutex_t snd_config_update_mutex =
> PTHREAD_MUTEX_INITIALIZER;
> +#endif
>  
>  /** 
>   * \brief Updates #snd_config by rereading the
> global configuration files (if needed).
> @@ -3099,9 +3102,13 @@ int snd_config_update(void)
>  {
>  	int err;
>  
> +#ifdef HAVE_LIBPTHREAD
>  	pthread_mutex_lock(&snd_config_update_mutex);
> +#endif
>  	err = snd_config_update_r(&snd_config,
> &snd_config_global_update, NULL);
> +#ifdef HAVE_LIBPTHREAD
>  	pthread_mutex_unlock(&snd_config_update_mutex);
> +#endif
>  	return err;
>  }
>  
> @@ -3128,15 +3135,18 @@ int
> snd_config_update_free(snd_config_up
>   */
>  int snd_config_update_free_global(void)
>  {
> +#ifdef HAVE_LIBPTHREAD
>  	pthread_mutex_lock(&snd_config_update_mutex);
> +#endif
>  	if (snd_config)
>  		snd_config_delete(snd_config);
>  	snd_config = NULL;
>  	if (snd_config_global_update)
>  		snd_config_update_free(snd_config_global_update);
>  	snd_config_global_update = NULL;
> 
=== message truncated ===



 
____________________________________________________________________________________
Bored stiff? Loosen up... 
Download and play hundreds of games for free on Yahoo! Games.
http://games.yahoo.com/games/front

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-17 10:13   ` Ciaccia
@ 2007-03-20 10:48     ` Takashi Iwai
  2007-03-20 12:00       ` Rene Herman
  2007-03-20 15:13       ` Ciaccia
  0 siblings, 2 replies; 11+ messages in thread
From: Takashi Iwai @ 2007-03-20 10:48 UTC (permalink / raw)
  To: Ciaccia; +Cc: alsa-devel

At Sat, 17 Mar 2007 03:13:06 -0700 (PDT),
Ciaccia wrote:
> 
> Hi Takashi,
> I downloaded the last snapshot from hg
> (alsa-lib-hg20070317) and I applied the patch you
> included in your email. Then I configured alsa-lib as
> following:
> 
> ./configure --enable-static --disable-shared
> --disable-mixer --disable-hwdep --disable-rawmidi
> --disable-seq --disable-instr --disable-alisp
> -with-pcm-plugins=no
> 
> 
> I just need PCM, so I disable all the packages but
> PCM. Then I compiled my mini application (just
> snd_pcm_open, configure it and write some data to it)
> with the following command-line (I'm using gcc 4.1):
> 
> $ gcc -o test test.c
> -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -lm
> -lpthread -static
>           
> and I got the following errors/warnings:
> 
> /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(control_shm.o):
> In function `_snd_ctl_shm_open':
> /tmp/alsa-lib-hg20070317/src/control/control_shm.c:664:
> warning: Using 'gethostbyname' in statically linked
> applications requires at runtime the shared libraries
> from the glibc version used for linking
> /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> In function `snd_dlsym_verify':
> /tmp/alsa-lib-hg20070317/src/dlmisc.c:115: undefined
> reference to `dlsym'
> /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> In function `snd_dlsym':
> /tmp/alsa-lib-hg20070317/src/dlmisc.c:159: undefined
> reference to `dlsym'
> /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> In function `snd_dlclose':
> /tmp/alsa-lib-hg20070317/src/dlmisc.c:85: undefined
> reference to `dlclose'
> /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> In function `snd_dlopen':
> /tmp/alsa-lib-hg20070317/src/dlmisc.c:64: undefined
> reference to `dlopen'
> collect2: ld returned 1 exit status
>                                       
> Am I doing something wrong?!?

No.  But, as you find in my patch, the configure checks whether libdl
and pthread are available and doesn't provide the flag to disable
them.  That's why these functions are still there.

Note that the concept of dynamic loading doesn't conflict with static
library.  So, unconditionally disabling libdl with a static lib is a
bad idea.  Rather we can add options to disable libdl and libpthread,
not only detecting them.


Takashi

> 
> Thanks
> Bye
> Andrea
> 
> --- Takashi Iwai <tiwai@suse.de> wrote:
> 
> > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT),
> > Ciaccia wrote:
> > > 
> > > Hi there,
> > > I would like to compile an alsa application for an
> > > embedded system with no shared-libraries support.
> > My
> > > application just needs PCM, with no plug-ins, no
> > mixer
> > > and no midi and the application should be a
> > standalone
> > > executable with no external dependencies,
> > otherwise it
> > > will not work.
> > > 
> > > I tried to compile alsa-lib with static support,
> > but
> > > without luck (-ldl is always needed in the gcc
> > line
> > > and gcc always prints some weird warnings). Since
> > I
> > > don't need external plugins nor ladspa, I think
> > there
> > > should be a way to compile an application in a
> > 100%
> > > static manner, but I still have to figure out how.
> > > 
> > > I also found this thread with a similar problem
> > with
> > > uClinux
> > >
> >
> http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html
> > > but at the end I did not understand how/if the
> > problem
> > > was solved.
> > > 
> > > Do you think it should be possible to compile
> > alsa-lib
> > > with no dependencies on dl? How?
> > > 
> > > Otherwise, would it be possible to write an alsa
> > > application that does not rely on alsa-lib (i.e.,
> > > by using the alsa kernel APIs directly)? Has
> > someone
> > > already tried it? Some hints?
> > > 
> > > Every hint is extremely welcome
> > 
> > I worked on this sometime ago, and made a patch to
> > build alsa-lib
> > without pthread and libdl.  I don't remember why
> > this wasn't applied.
> > IIRC, ulibc has the wrappers for pthread and libdl,
> > so this wasn't
> > needed at that time in the end.
> > 
> > Otherwise, it should work.  Build with
> > --enable-static
> > --disable-shared, --disble-mixer, --disable-hwdep,
> > etc.
> > 
> > 
> > Takashi
> > 
> > diff -r f1203eb7eb48 configure.in
> > --- a/configure.in	Tue Mar 13 10:44:28 2007 +0100
> > +++ b/configure.in	Fri Mar 16 15:07:51 2007 +0100
> > @@ -148,6 +148,23 @@ else
> >  else
> >    AC_MSG_RESULT(no)
> >  fi
> > +
> > +AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
> > +AC_CHECK_LIB([pthread], [pthread_join],
> > [HAVE_LIBPTHREAD="yes"])
> > +
> > +ALSA_DEPLIBS=""
> > +if test "$softfloat" != "yes"; then
> > +  ALSA_DEPLIBS="-lm"
> > +fi
> > +if test "$HAVE_LIBDL" = "yes"; then
> > +  ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
> > +  AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
> > +fi
> > +if test "$HAVE_LIBPTHREAD" = "yes"; then
> > +  ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
> > +  AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have
> > libpthread])
> > +fi
> > +AC_SUBST(ALSA_DEPLIBS)
> >  
> >  dnl Check for architecture
> >  AC_MSG_CHECKING(for architecture)
> > diff -r f1203eb7eb48 include/local.h
> > --- a/include/local.h	Tue Mar 13 10:44:28 2007 +0100
> > +++ b/include/local.h	Fri Mar 16 15:07:51 2007 +0100
> > @@ -36,6 +36,11 @@
> >  #include "config.h"
> >  #ifdef SUPPORT_RESMGR
> >  #include <resmgr.h>
> > +#endif
> > +#ifdef HAVE_LIBDL
> > +#include <dlfcn.h>
> > +#else
> > +#define RTLD_NOW	0
> >  #endif
> >  
> >  #define _snd_config_iterator list_head
> > diff -r f1203eb7eb48 src/Makefile.am
> > --- a/src/Makefile.am	Tue Mar 13 10:44:28 2007 +0100
> > +++ b/src/Makefile.am	Fri Mar 16 15:07:51 2007 +0100
> > @@ -41,7 +41,7 @@ libasound_la_LIBADD +=
> > alisp/libalisp.la
> >  libasound_la_LIBADD += alisp/libalisp.la
> >  endif
> >  SUBDIRS += compat conf
> > -libasound_la_LIBADD += compat/libcompat.la -lm -ldl
> > -lpthread
> > +libasound_la_LIBADD += compat/libcompat.la
> > @ALSA_DEPLIBS@
> >  
> >  libasound_la_LDFLAGS = -version-info $(COMPATNUM)
> > $(VSYMS)
> >  
> > diff -r f1203eb7eb48 src/async.c
> > --- a/src/async.c	Tue Mar 13 10:44:28 2007 +0100
> > +++ b/src/async.c	Fri Mar 16 15:07:51 2007 +0100
> > @@ -151,9 +151,11 @@ int
> > snd_async_del_handler(snd_async_hand
> >  	if (!list_empty(&handler->hlist))
> >  		goto _end;
> >  	switch (handler->type) {
> > +#ifdef BUILD_PCM
> >  	case SND_ASYNC_HANDLER_PCM:
> >  		err = snd_pcm_async(handler->u.pcm, -1, 1);
> >  		break;
> > +#endif
> >  	case SND_ASYNC_HANDLER_CTL:
> >  		err = snd_ctl_async(handler->u.ctl, -1, 1);
> >  		break;
> > diff -r f1203eb7eb48 src/conf.c
> > --- a/src/conf.c	Tue Mar 13 10:44:28 2007 +0100
> > +++ b/src/conf.c	Fri Mar 16 15:07:51 2007 +0100
> > @@ -415,12 +415,13 @@ beginning:</P>
> >  
> >  
> >  #include <stdarg.h>
> > -#include <dlfcn.h>
> >  #include <limits.h>
> >  #include <sys/stat.h>
> > -#include <pthread.h>
> >  #include <locale.h>
> >  #include "local.h"
> > +#ifdef HAVE_LIBPTHREAD
> > +#include <pthread.h>
> > +#endif
> >  
> >  #ifndef DOC_HIDDEN
> >  
> > @@ -3080,7 +3081,9 @@ int
> > snd_config_update_r(snd_config_t **_
> >  	return 1;
> >  }
> >  
> > +#ifdef HAVE_LIBPTHREAD
> >  static pthread_mutex_t snd_config_update_mutex =
> > PTHREAD_MUTEX_INITIALIZER;
> > +#endif
> >  
> >  /** 
> >   * \brief Updates #snd_config by rereading the
> > global configuration files (if needed).
> > @@ -3099,9 +3102,13 @@ int snd_config_update(void)
> >  {
> >  	int err;
> >  
> > +#ifdef HAVE_LIBPTHREAD
> >  	pthread_mutex_lock(&snd_config_update_mutex);
> > +#endif
> >  	err = snd_config_update_r(&snd_config,
> > &snd_config_global_update, NULL);
> > +#ifdef HAVE_LIBPTHREAD
> >  	pthread_mutex_unlock(&snd_config_update_mutex);
> > +#endif
> >  	return err;
> >  }
> >  
> > @@ -3128,15 +3135,18 @@ int
> > snd_config_update_free(snd_config_up
> >   */
> >  int snd_config_update_free_global(void)
> >  {
> > +#ifdef HAVE_LIBPTHREAD
> >  	pthread_mutex_lock(&snd_config_update_mutex);
> > +#endif
> >  	if (snd_config)
> >  		snd_config_delete(snd_config);
> >  	snd_config = NULL;
> >  	if (snd_config_global_update)
> >  		snd_config_update_free(snd_config_global_update);
> >  	snd_config_global_update = NULL;
> > 
> === message truncated ===
> 
> 
> 
>  
> ____________________________________________________________________________________
> Bored stiff? Loosen up... 
> Download and play hundreds of games for free on Yahoo! Games.
> http://games.yahoo.com/games/front
> 

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-20 10:48     ` Takashi Iwai
@ 2007-03-20 12:00       ` Rene Herman
  2007-03-20 15:13       ` Ciaccia
  1 sibling, 0 replies; 11+ messages in thread
From: Rene Herman @ 2007-03-20 12:00 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel, Jaroslav Kysela

On 03/20/2007 11:48 AM, Takashi Iwai wrote:

> No.  But, as you find in my patch, the configure checks [ ... ]

Takashi, Jaroslav, list: something isnt right with that moderation 
interface on sourceforge. This was one of 3 messages I approved in one 
go yet this is the only one that has made it onto the list until now. I 
even have a message from Rask Ingemann Lambertsen in my inbox, sent 
yesterday, that I havent seen appear on the list either (yet, but I 
doubt its going to show up).

If sourceforge keeps bugging/lagging like this, moderation may not be a 
solution either.

Rene.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Static build of alsa-lib
  2007-03-20 10:48     ` Takashi Iwai
  2007-03-20 12:00       ` Rene Herman
@ 2007-03-20 15:13       ` Ciaccia
  2007-03-20 16:01         ` [Alsa-devel] " Takashi Iwai
  1 sibling, 1 reply; 11+ messages in thread
From: Ciaccia @ 2007-03-20 15:13 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel, alsa-devel

Hi Takashi,
It's clear that the concept of dynamic loading doesn't
conflict with static library, I think my original
question was not completely clear. 

I would like to port a sound application (just PCM, no
midi or other stuff) to an embedded system. The core
of this embedded system is a Cirrus EP9302 ARM
processor, which supports hardware floating points.

ARM processors have several ABIs (EABI, OABI, ???) and
programs compiled using one ABI are not linkable
(neither at compile time, nor at run time) with other
binaries, because of the different format. This is a
problem for binary distributions (such as Debian),
since the same binary does not work on all ARM
architectures.

For a reason I really don't understand, EP9302
hardware floating point binaries only work when
compiled with -static (don't ask me why...), and
therefore I wanted to have a "static" (=without shared
libraries) ALSA application. If this would not be
possible I can always use OSS (which does not requires
shared objects to be loaded at run time), but I still
think it should be possible to develop ALSA
applications for architectures where dynamic loading
is not available...

Is there a way to achieve this?

Thanks again
Andrea

--- Takashi Iwai <tiwai@suse.de> wrote:

> At Sat, 17 Mar 2007 03:13:06 -0700 (PDT),
> Ciaccia wrote:
> > 
> > Hi Takashi,
> > I downloaded the last snapshot from hg
> > (alsa-lib-hg20070317) and I applied the patch you
> > included in your email. Then I configured alsa-lib
> as
> > following:
> > 
> > ./configure --enable-static --disable-shared
> > --disable-mixer --disable-hwdep --disable-rawmidi
> > --disable-seq --disable-instr --disable-alisp
> > -with-pcm-plugins=no
> > 
> > 
> > I just need PCM, so I disable all the packages but
> > PCM. Then I compiled my mini application (just
> > snd_pcm_open, configure it and write some data to
> it)
> > with the following command-line (I'm using gcc
> 4.1):
> > 
> > $ gcc -o test test.c
> > -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -lm
> > -lpthread -static
> >           
> > and I got the following errors/warnings:
> > 
> >
>
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(control_shm.o):
> > In function `_snd_ctl_shm_open':
> >
>
/tmp/alsa-lib-hg20070317/src/control/control_shm.c:664:
> > warning: Using 'gethostbyname' in statically
> linked
> > applications requires at runtime the shared
> libraries
> > from the glibc version used for linking
> >
>
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> > In function `snd_dlsym_verify':
> > /tmp/alsa-lib-hg20070317/src/dlmisc.c:115:
> undefined
> > reference to `dlsym'
> >
>
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> > In function `snd_dlsym':
> > /tmp/alsa-lib-hg20070317/src/dlmisc.c:159:
> undefined
> > reference to `dlsym'
> >
>
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> > In function `snd_dlclose':
> > /tmp/alsa-lib-hg20070317/src/dlmisc.c:85:
> undefined
> > reference to `dlclose'
> >
>
/tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o):
> > In function `snd_dlopen':
> > /tmp/alsa-lib-hg20070317/src/dlmisc.c:64:
> undefined
> > reference to `dlopen'
> > collect2: ld returned 1 exit status
> >                                       
> > Am I doing something wrong?!?
> 
> No.  But, as you find in my patch, the configure
> checks whether libdl
> and pthread are available and doesn't provide the
> flag to disable
> them.  That's why these functions are still there.
> 
> Note that the concept of dynamic loading doesn't
> conflict with static
> library.  So, unconditionally disabling libdl with a
> static lib is a
> bad idea.  Rather we can add options to disable
> libdl and libpthread,
> not only detecting them.
> 
> 
> Takashi
> 
> > 
> > Thanks
> > Bye
> > Andrea
> > 
> > --- Takashi Iwai <tiwai@suse.de> wrote:
> > 
> > > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT),
> > > Ciaccia wrote:
> > > > 
> > > > Hi there,
> > > > I would like to compile an alsa application
> for an
> > > > embedded system with no shared-libraries
> support.
> > > My
> > > > application just needs PCM, with no plug-ins,
> no
> > > mixer
> > > > and no midi and the application should be a
> > > standalone
> > > > executable with no external dependencies,
> > > otherwise it
> > > > will not work.
> > > > 
> > > > I tried to compile alsa-lib with static
> support,
> > > but
> > > > without luck (-ldl is always needed in the gcc
> > > line
> > > > and gcc always prints some weird warnings).
> Since
> > > I
> > > > don't need external plugins nor ladspa, I
> think
> > > there
> > > > should be a way to compile an application in a
> > > 100%
> > > > static manner, but I still have to figure out
> how.
> > > > 
> > > > I also found this thread with a similar
> problem
> > > with
> > > > uClinux
> > > >
> > >
> >
>
http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html
> > > > but at the end I did not understand how/if the
> > > problem
> > > > was solved.
> > > > 
> > > > Do you think it should be possible to compile
> > > alsa-lib
> > > > with no dependencies on dl? How?
> > > > 
> > > > Otherwise, would it be possible to write an
> alsa
> > > > application that does not rely on alsa-lib
> (i.e.,
> > > > by using the alsa kernel APIs directly)? Has
> > > someone
> > > > already tried it? Some hints?
> > > > 
> > > > Every hint is extremely welcome
> > > 
> > > I worked on this sometime ago, and made a patch
> to
> > > build alsa-lib
> > > without pthread and libdl.  I don't remember why
> > > this wasn't applied.
> > > IIRC, ulibc has the wrappers for pthread and
> libdl,
> > > so this wasn't
> > > needed at that time in the end.
> > > 
> > > Otherwise, it should work.  Build with
> > > --enable-static
> > > --disable-shared, --disble-mixer,
> --disable-hwdep,
> > > etc.
> > > 
> > > 
> > > Takashi
> > > 
> > > diff -r f1203eb7eb48 configure.in
> > > --- a/configure.in	Tue Mar 13 10:44:28 2007
> +0100
> > > +++ b/configure.in	Fri Mar 16 15:07:51 2007
> +0100
> > > @@ -148,6 +148,23 @@ else
> > >  else
> > >    AC_MSG_RESULT(no)
> > >  fi
> > > +
> > > +AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
> > > +AC_CHECK_LIB([pthread], [pthread_join],
> > > [HAVE_LIBPTHREAD="yes"])
> > > +
> > > +ALSA_DEPLIBS=""
> > > +if test "$softfloat" != "yes"; then
> > > +  ALSA_DEPLIBS="-lm"
> > > +fi
> > > +if test "$HAVE_LIBDL" = "yes"; then
> > > +  ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
> > > +  AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
> > > +fi
> > > +if test "$HAVE_LIBPTHREAD" = "yes"; then
> > > +  ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
> > > +  AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have
> > > libpthread])
> > > +fi
> > > +AC_SUBST(ALSA_DEPLIBS)
> > >  
> > >  dnl Check for architecture
> > >  AC_MSG_CHECKING(for architecture)
> 
=== message truncated ===



 
____________________________________________________________________________________
Don't get soaked.  Take a quick peek at the forecast
with the Yahoo! Search weather shortcut.
http://tools.search.yahoo.com/shortcuts/#loc_weather

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Alsa-devel] Static build of alsa-lib
  2007-03-20 15:13       ` Ciaccia
@ 2007-03-20 16:01         ` Takashi Iwai
  2007-03-21 19:00           ` Ciaccia
  0 siblings, 1 reply; 11+ messages in thread
From: Takashi Iwai @ 2007-03-20 16:01 UTC (permalink / raw)
  To: Ciaccia; +Cc: alsa-devel, alsa-devel

At Tue, 20 Mar 2007 08:13:41 -0700 (PDT),
Ciaccia wrote:
> 
> Hi Takashi,
> It's clear that the concept of dynamic loading doesn't
> conflict with static library, I think my original
> question was not completely clear. 
> 
> I would like to port a sound application (just PCM, no
> midi or other stuff) to an embedded system. The core
> of this embedded system is a Cirrus EP9302 ARM
> processor, which supports hardware floating points.
> 
> ARM processors have several ABIs (EABI, OABI, ???) and
> programs compiled using one ABI are not linkable
> (neither at compile time, nor at run time) with other
> binaries, because of the different format. This is a
> problem for binary distributions (such as Debian),
> since the same binary does not work on all ARM
> architectures.
> 
> For a reason I really don't understand, EP9302
> hardware floating point binaries only work when
> compiled with -static (don't ask me why...), and
> therefore I wanted to have a "static" (=without shared
> libraries) ALSA application. If this would not be
> possible I can always use OSS (which does not requires
> shared objects to be loaded at run time), but I still
> think it should be possible to develop ALSA
> applications for architectures where dynamic loading
> is not available...
> 
> Is there a way to achieve this?

Sure, what I meant is that the patch had no function to disable the
libdl and libpthread explicitly but only checked.  The new patch
below, for example, can give you options --with-libdl and
--with-pthread.  For disabling libdl, pass --with-libdl=no.

If this works for you, I'll apply it to the upstream.


Takashi


diff -r 6d0a999aef24 Makefile.am
--- a/Makefile.am	Fri Mar 16 15:22:27 2007 +0100
+++ b/Makefile.am	Tue Mar 20 16:55:23 2007 +0100
@@ -1,4 +1,7 @@ SUBDIRS=doc include src modules
-SUBDIRS=doc include src modules
+SUBDIRS=doc include src
+if BUILD_MODULES
+SUBDIRS += modules
+endif
 if BUILD_PCM_PLUGIN_SHM
 SUBDIRS += aserver
 endif
diff -r 6d0a999aef24 configure.in
--- a/configure.in	Fri Mar 16 15:22:27 2007 +0100
+++ b/configure.in	Tue Mar 20 16:55:00 2007 +0100
@@ -148,6 +148,44 @@ else
 else
   AC_MSG_RESULT(no)
 fi
+
+ALSA_DEPLIBS=""
+if test "$softfloat" != "yes"; then
+  ALSA_DEPLIBS="-lm"
+fi
+
+dnl Check for libdl
+AC_MSG_CHECKING(for libdl)
+AC_ARG_WITH(libdl,
+  [  --with-libdl        Use libdl for plugins (default = yes)],
+  [ have_libdl="$withval" ], [ have_libdl="yes" ])
+if test "$have_libdl" = "yes"; then
+  AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
+  if test "$HAVE_LIBDL" = "yes" ; then
+    ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
+    AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
+  fi
+else
+  AC_MSG_RESULT(no)
+fi
+AM_CONDITIONAL(BUILD_MODULES, test "$HAVE_LIBDL"="yes")
+
+dnl Check for pthread
+AC_MSG_CHECKING(for pthread)
+AC_ARG_WITH(pthread,
+  [  --with-pthread      Use pthread (default = yes)],
+  [ have_pthread="$withval" ], [ have_pthread="yes" ])
+if test "$have_pthread" = "yes"; then
+  AC_CHECK_LIB([pthread], [pthread_join], [HAVE_LIBPTHREAD="yes"])
+  if test "$HAVE_LIBPTHREAD" = "yes"; then
+    ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
+    AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have libpthread])
+  fi
+else
+  AC_MSG_RESULT(no)
+fi
+
+AC_SUBST(ALSA_DEPLIBS)
 
 dnl Check for architecture
 AC_MSG_CHECKING(for architecture)
@@ -318,6 +356,21 @@ fi
 
 if test "$build_pcm_ioplug" = "yes"; then
   build_pcm_extplug="yes"
+fi
+
+if test "$HAVE_LIBDL" != "yes"; then
+  build_pcm_meter="no"
+  build_pcm_ladspa="no"
+  build_pcm_pcm_ioplug="no"
+  build_pcm_pcm_extplug="no"
+fi
+
+if test "$HAVE_LIBPTHREAD" != "yes"; then
+  build_pcm_share="no"
+fi
+
+if test "$softfloat" != "yes"; then
+  build_pcm_lfloat="no"
 fi
 
 AM_CONDITIONAL(BUILD_PCM_PLUGIN, test x$build_pcm_plugin = xyes)
diff -r 6d0a999aef24 include/local.h
--- a/include/local.h	Fri Mar 16 15:22:27 2007 +0100
+++ b/include/local.h	Tue Mar 20 16:16:36 2007 +0100
@@ -36,6 +36,11 @@
 #include "config.h"
 #ifdef SUPPORT_RESMGR
 #include <resmgr.h>
+#endif
+#ifdef HAVE_LIBDL
+#include <dlfcn.h>
+#else
+#define RTLD_NOW	0
 #endif
 
 #define _snd_config_iterator list_head
diff -r 6d0a999aef24 src/Makefile.am
--- a/src/Makefile.am	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/Makefile.am	Tue Mar 20 16:16:36 2007 +0100
@@ -41,7 +41,7 @@ libasound_la_LIBADD += alisp/libalisp.la
 libasound_la_LIBADD += alisp/libalisp.la
 endif
 SUBDIRS += compat conf
-libasound_la_LIBADD += compat/libcompat.la -lm -ldl -lpthread
+libasound_la_LIBADD += compat/libcompat.la @ALSA_DEPLIBS@
 
 libasound_la_LDFLAGS = -version-info $(COMPATNUM) $(VSYMS)
 
diff -r 6d0a999aef24 src/async.c
--- a/src/async.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/async.c	Tue Mar 20 16:16:36 2007 +0100
@@ -151,9 +151,11 @@ int snd_async_del_handler(snd_async_hand
 	if (!list_empty(&handler->hlist))
 		goto _end;
 	switch (handler->type) {
+#ifdef BUILD_PCM
 	case SND_ASYNC_HANDLER_PCM:
 		err = snd_pcm_async(handler->u.pcm, -1, 1);
 		break;
+#endif
 	case SND_ASYNC_HANDLER_CTL:
 		err = snd_ctl_async(handler->u.ctl, -1, 1);
 		break;
diff -r 6d0a999aef24 src/conf.c
--- a/src/conf.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/conf.c	Tue Mar 20 16:16:36 2007 +0100
@@ -415,12 +415,13 @@ beginning:</P>
 
 
 #include <stdarg.h>
-#include <dlfcn.h>
 #include <limits.h>
 #include <sys/stat.h>
-#include <pthread.h>
 #include <locale.h>
 #include "local.h"
+#ifdef HAVE_LIBPTHREAD
+#include <pthread.h>
+#endif
 
 #ifndef DOC_HIDDEN
 
@@ -3080,7 +3081,9 @@ int snd_config_update_r(snd_config_t **_
 	return 1;
 }
 
+#ifdef HAVE_LIBPTHREAD
 static pthread_mutex_t snd_config_update_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
 
 /** 
  * \brief Updates #snd_config by rereading the global configuration files (if needed).
@@ -3099,9 +3102,13 @@ int snd_config_update(void)
 {
 	int err;
 
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_lock(&snd_config_update_mutex);
+#endif
 	err = snd_config_update_r(&snd_config, &snd_config_global_update, NULL);
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_unlock(&snd_config_update_mutex);
+#endif
 	return err;
 }
 
@@ -3128,15 +3135,18 @@ int snd_config_update_free(snd_config_up
  */
 int snd_config_update_free_global(void)
 {
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_lock(&snd_config_update_mutex);
+#endif
 	if (snd_config)
 		snd_config_delete(snd_config);
 	snd_config = NULL;
 	if (snd_config_global_update)
 		snd_config_update_free(snd_config_global_update);
 	snd_config_global_update = NULL;
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_unlock(&snd_config_update_mutex);
-
+#endif
 	/* FIXME: better to place this in another place... */
 	snd_dlobj_cache_cleanup();
 
diff -r 6d0a999aef24 src/confmisc.c
--- a/src/confmisc.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/confmisc.c	Tue Mar 20 16:16:36 2007 +0100
@@ -946,6 +946,8 @@ SND_DLSYM_BUILD_VERSION(snd_func_card_na
 SND_DLSYM_BUILD_VERSION(snd_func_card_name, SND_CONFIG_DLSYM_VERSION_EVALUATE);
 #endif
 
+#ifdef BUILD_PCM
+
 /**
  * \brief Returns the pcm identification of a device.
  * \param dst The function puts the handle to the result configuration node
@@ -1198,6 +1200,8 @@ int snd_func_private_pcm_subdevice(snd_c
 #ifndef DOC_HIDDEN
 SND_DLSYM_BUILD_VERSION(snd_func_private_pcm_subdevice, SND_CONFIG_DLSYM_VERSION_EVALUATE);
 #endif
+
+#endif /* BUILD_PCM */
 
 /**
  * \brief Copies the specified configuration node.
diff -r 6d0a999aef24 src/control/control.c
--- a/src/control/control.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/control/control.c	Tue Mar 20 16:16:36 2007 +0100
@@ -47,7 +47,6 @@ and IEC958 structure.
 #include <string.h>
 #include <fcntl.h>
 #include <signal.h>
-#include <dlfcn.h>
 #include <sys/poll.h>
 #include "control_local.h"
 
diff -r 6d0a999aef24 src/control/hcontrol.c
--- a/src/control/hcontrol.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/control/hcontrol.c	Tue Mar 20 16:16:36 2007 +0100
@@ -48,11 +48,13 @@ to reduce overhead accessing the real co
 #include <string.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
-#include <pthread.h>
 #ifndef DOC_HIDDEN
 #define __USE_GNU
 #endif
 #include "control_local.h"
+#ifdef HAVE_LIBPTHREAD
+#include <pthread.h>
+#endif
 
 #ifndef DOC_HIDDEN
 #define NOT_FOUND 1000000000
@@ -420,17 +422,22 @@ static void snd_hctl_sort(snd_hctl_t *hc
 static void snd_hctl_sort(snd_hctl_t *hctl)
 {
 	unsigned int k;
+#ifdef HAVE_LIBPTHREAD
 	static pthread_mutex_t sync_lock = PTHREAD_MUTEX_INITIALIZER;
+#endif
 
 	assert(hctl);
 	assert(hctl->compare);
 	INIT_LIST_HEAD(&hctl->elems);
 
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_lock(&sync_lock);
+#endif
 	compare_hctl = hctl;
 	qsort(hctl->pelems, hctl->count, sizeof(*hctl->pelems), hctl_compare);
+#ifdef HAVE_LIBPTHREAD
 	pthread_mutex_unlock(&sync_lock);
-
+#endif
 	for (k = 0; k < hctl->count; k++)
 		list_add_tail(&hctl->pelems[k]->list, &hctl->elems);
 }
diff -r 6d0a999aef24 src/dlmisc.c
--- a/src/dlmisc.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/dlmisc.c	Tue Mar 20 16:51:13 2007 +0100
@@ -28,7 +28,6 @@
  */
 
 #define _GNU_SOURCE
-#include <dlfcn.h>
 #include "list.h"
 #include "local.h"
 
@@ -53,13 +52,19 @@ void *snd_dlopen(const char *name, int m
 	if (name == NULL)
 		return &snd_dlsym_start;
 #else
+#ifdef HAVE_LIBDL
 	if (name == NULL) {
 		Dl_info dlinfo;
 		if (dladdr(snd_dlopen, &dlinfo) > 0)
 			name = dlinfo.dli_fname;
 	}
 #endif
+#endif
+#ifdef HAVE_LIBDL
 	return dlopen(name, mode);
+#else
+	return NULL;
+#endif
 }
 
 /**
@@ -76,7 +81,11 @@ int snd_dlclose(void *handle)
 	if (handle == &snd_dlsym_start)
 		return 0;
 #endif
+#ifdef HAVE_LIBDL
 	return dlclose(handle);
+#else
+	return 0;
+#endif
 }
 
 /**
@@ -91,6 +100,7 @@ int snd_dlclose(void *handle)
  */
 static int snd_dlsym_verify(void *handle, const char *name, const char *version)
 {
+#ifdef HAVE_LIBDL
 	int res;
 	char *vname;
 	
@@ -107,6 +117,9 @@ static int snd_dlsym_verify(void *handle
 	if (res < 0)
 		SNDERR("unable to verify version for symbol %s", name);
 	return res;
+#else
+	return 0;
+#endif
 }
 
 /**
@@ -139,10 +152,16 @@ void *snd_dlsym(void *handle, const char
 		return NULL;
 	}
 #endif
-	err = snd_dlsym_verify(handle, name, version);
-	if (err < 0)
-		return NULL;
+#ifdef HAVE_LIBDL
+	if (version) {
+		err = snd_dlsym_verify(handle, name, version);
+		if (err < 0)
+			return NULL;
+	}
 	return dlsym(handle, name);
+#else
+	return NULL;
+#endif
 }
 
 /*
diff -r 6d0a999aef24 src/hwdep/hwdep.c
--- a/src/hwdep/hwdep.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/hwdep/hwdep.c	Tue Mar 20 16:16:36 2007 +0100
@@ -33,7 +33,6 @@
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
-#include <dlfcn.h>
 #include <sys/ioctl.h>
 #include "hwdep_local.h"
 
diff -r 6d0a999aef24 src/mixer/simple_abst.c
--- a/src/mixer/simple_abst.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/mixer/simple_abst.c	Tue Mar 20 16:52:35 2007 +0100
@@ -82,14 +82,14 @@ static int try_open(snd_mixer_class_t *c
 		free(xlib);
 		return -ENXIO;
 	}
-	event_func = dlsym(h, "alsa_mixer_simple_event");
+	event_func = snd_dlsym(h, "alsa_mixer_simple_event", NULL);
 	if (event_func == NULL) {
 		SNDERR("Symbol 'alsa_mixer_simple_event' was not found in '%s'", xlib);
 		snd_dlclose(h);
 		free(xlib);
 		return -ENXIO;
 	}
-	init_func = dlsym(h, "alsa_mixer_simple_init");
+	init_func = snd_dlsym(h, "alsa_mixer_simple_init", NULL);
 	if (init_func == NULL) {
 		SNDERR("Symbol 'alsa_mixer_simple_init' was not found in '%s'", xlib);
 		snd_dlclose(h);
diff -r 6d0a999aef24 src/pcm/pcm.c
--- a/src/pcm/pcm.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/pcm/pcm.c	Tue Mar 20 16:16:36 2007 +0100
@@ -634,7 +634,6 @@ playback devices.
 #include <malloc.h>
 #include <stdarg.h>
 #include <signal.h>
-#include <dlfcn.h>
 #include <sys/poll.h>
 #include <sys/shm.h>
 #include <sys/mman.h>
diff -r 6d0a999aef24 src/pcm/pcm_hooks.c
--- a/src/pcm/pcm_hooks.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/pcm/pcm_hooks.c	Tue Mar 20 16:16:36 2007 +0100
@@ -27,7 +27,6 @@
  *
  */
   
-#include <dlfcn.h>
 #include "pcm_local.h"
 #include "pcm_generic.h"
 
diff -r 6d0a999aef24 src/pcm/pcm_ladspa.c
--- a/src/pcm/pcm_ladspa.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/pcm/pcm_ladspa.c	Tue Mar 20 16:16:36 2007 +0100
@@ -33,7 +33,6 @@
  */
   
 #include <dirent.h>
-#include <dlfcn.h>
 #include <locale.h>
 #include <math.h>
 #include "pcm_local.h"
diff -r 6d0a999aef24 src/pcm/pcm_rate.c
--- a/src/pcm/pcm_rate.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/pcm/pcm_rate.c	Tue Mar 20 16:51:41 2007 +0100
@@ -29,7 +29,6 @@
  */
 #include <inttypes.h>
 #include <byteswap.h>
-#include <dlfcn.h>
 #include "pcm_local.h"
 #include "pcm_plugin.h"
 #include "pcm_rate.h"
@@ -1326,7 +1325,7 @@ int snd_pcm_rate_open(snd_pcm_t **pcmp, 
 			free(rate);
 			return -ENOENT;
 		}
-		open_func = dlsym(h, open_name);
+		open_func = snd_dlsym(h, open_name, NULL);
 		if (! open_func) {
 			SNDERR("Cannot find function %s", open_name);
 			snd_dlclose(h);
diff -r 6d0a999aef24 src/rawmidi/rawmidi.c
--- a/src/rawmidi/rawmidi.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/rawmidi/rawmidi.c	Tue Mar 20 16:16:36 2007 +0100
@@ -139,7 +139,6 @@ This example shows open and read/write r
 #include <stdarg.h>
 #include <unistd.h>
 #include <string.h>
-#include <dlfcn.h>
 #include "rawmidi_local.h"
 
 /**
diff -r 6d0a999aef24 src/seq/seq.c
--- a/src/seq/seq.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/seq/seq.c	Tue Mar 20 16:16:36 2007 +0100
@@ -777,7 +777,6 @@ void event_filter(snd_seq_t *seq, snd_se
 
 */
 
-#include <dlfcn.h>
 #include <sys/poll.h>
 #include "seq_local.h"
 
diff -r 6d0a999aef24 src/timer/timer.c
--- a/src/timer/timer.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/timer/timer.c	Tue Mar 20 16:16:36 2007 +0100
@@ -72,7 +72,6 @@ This example shows opening a timer devic
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
-#include <dlfcn.h>
 #include <signal.h>
 #include <sys/ioctl.h>
 #include "timer_local.h"
diff -r 6d0a999aef24 src/timer/timer_query.c
--- a/src/timer/timer_query.c	Fri Mar 16 15:22:27 2007 +0100
+++ b/src/timer/timer_query.c	Tue Mar 20 16:16:36 2007 +0100
@@ -31,7 +31,6 @@
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
-#include <dlfcn.h>
 #include <sys/ioctl.h>
 #include "timer_local.h"
 
diff -r 6d0a999aef24 utils/alsa.pc.in
--- a/utils/alsa.pc.in	Fri Mar 16 15:22:27 2007 +0100
+++ b/utils/alsa.pc.in	Tue Mar 20 16:16:36 2007 +0100
@@ -8,7 +8,7 @@ Version: @VERSION@
 Version: @VERSION@
 Requires: 
 Libs: -L${libdir} -lasound
-Libs.private: -lm -ldl -lpthread
+Libs.private: @ALSA_DEPLIBS@
 # -I${includedir}/alsa below is just for backward compatibility
 # (it was set so mistakely in the older version)
 Cflags: -I${includedir} -I${includedir}/alsa

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Alsa-devel] Static build of alsa-lib
  2007-03-20 16:01         ` [Alsa-devel] " Takashi Iwai
@ 2007-03-21 19:00           ` Ciaccia
  0 siblings, 0 replies; 11+ messages in thread
From: Ciaccia @ 2007-03-21 19:00 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel, alsa-devel

Hi Takashi,
I have just tried the patch you provided me. I applied
the patch and then I configured alsa-lib as following:

./configure --enable-static --disable-shared
--disable-mixer --disable-hwdep --disable-rawmidi
--disable-seq --disable-instr --disable-alisp
--with-pcm-plugins=no --with-libdl=no
--with-pthread=no 

The compilation works fine, ant the static library is
created. When I try to link my application to it, I
get the following warning:

~/alsa $ gcc -Wall -O2 -o test test.c
-L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -static

/tmp/alsa-lib-hg20070317/src/.libs/libasound.a(control_shm.o):
In function `_snd_ctl_shm_open':
/tmp/alsa-lib-hg20070317/src/control/control_shm.c:664:
warning: Using 'gethostbyname' in statically linked
applications requires at runtime the shared libraries
from the glibc version used for linking

I think we are getting closer, but I could not figure
out how to exclude this from the compilation. The file
control_shm.c contains only few macro #IFDEFS, and
none for it.

Takashi, could you tell me why/when the pthread lib is
needed? Do I need it for PCM, or is it used just for
MIDI?

Last but not least, the ./configure --help does not
give information about the the new switches
(--with-libdl=no --with-pthread=no), shouldn't they be
visible in the "help" page?

Thanks again,
Bye bye

Andrea

--- Takashi Iwai <tiwai@suse.de> wrote:

> At Tue, 20 Mar 2007 08:13:41 -0700 (PDT),
> Ciaccia wrote:
> > 
> > Hi Takashi,
> > It's clear that the concept of dynamic loading
> doesn't
> > conflict with static library, I think my original
> > question was not completely clear. 
> > 
> > I would like to port a sound application (just
> PCM, no
> > midi or other stuff) to an embedded system. The
> core
> > of this embedded system is a Cirrus EP9302 ARM
> > processor, which supports hardware floating
> points.
> > 
> > ARM processors have several ABIs (EABI, OABI, ???)
> and
> > programs compiled using one ABI are not linkable
> > (neither at compile time, nor at run time) with
> other
> > binaries, because of the different format. This is
> a
> > problem for binary distributions (such as Debian),
> > since the same binary does not work on all ARM
> > architectures.
> > 
> > For a reason I really don't understand, EP9302
> > hardware floating point binaries only work when
> > compiled with -static (don't ask me why...), and
> > therefore I wanted to have a "static" (=without
> shared
> > libraries) ALSA application. If this would not be
> > possible I can always use OSS (which does not
> requires
> > shared objects to be loaded at run time), but I
> still
> > think it should be possible to develop ALSA
> > applications for architectures where dynamic
> loading
> > is not available...
> > 
> > Is there a way to achieve this?
> 
> Sure, what I meant is that the patch had no function
> to disable the
> libdl and libpthread explicitly but only checked. 
> The new patch
> below, for example, can give you options
> --with-libdl and
> --with-pthread.  For disabling libdl, pass
> --with-libdl=no.
> 
> If this works for you, I'll apply it to the
> upstream.
> 
> 
> Takashi
> 
> 
> diff -r 6d0a999aef24 Makefile.am
> --- a/Makefile.am	Fri Mar 16 15:22:27 2007 +0100
> +++ b/Makefile.am	Tue Mar 20 16:55:23 2007 +0100
> @@ -1,4 +1,7 @@ SUBDIRS=doc include src modules
> -SUBDIRS=doc include src modules
> +SUBDIRS=doc include src
> +if BUILD_MODULES
> +SUBDIRS += modules
> +endif
>  if BUILD_PCM_PLUGIN_SHM
>  SUBDIRS += aserver
>  endif
> diff -r 6d0a999aef24 configure.in
> --- a/configure.in	Fri Mar 16 15:22:27 2007 +0100
> +++ b/configure.in	Tue Mar 20 16:55:00 2007 +0100
> @@ -148,6 +148,44 @@ else
>  else
>    AC_MSG_RESULT(no)
>  fi
> +
> +ALSA_DEPLIBS=""
> +if test "$softfloat" != "yes"; then
> +  ALSA_DEPLIBS="-lm"
> +fi
> +
> +dnl Check for libdl
> +AC_MSG_CHECKING(for libdl)
> +AC_ARG_WITH(libdl,
> +  [  --with-libdl        Use libdl for plugins
> (default = yes)],
> +  [ have_libdl="$withval" ], [ have_libdl="yes" ])
> +if test "$have_libdl" = "yes"; then
> +  AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
> +  if test "$HAVE_LIBDL" = "yes" ; then
> +    ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
> +    AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
> +  fi
> +else
> +  AC_MSG_RESULT(no)
> +fi
> +AM_CONDITIONAL(BUILD_MODULES, test
> "$HAVE_LIBDL"="yes")
> +
> +dnl Check for pthread
> +AC_MSG_CHECKING(for pthread)
> +AC_ARG_WITH(pthread,
> +  [  --with-pthread      Use pthread (default =
> yes)],
> +  [ have_pthread="$withval" ], [ have_pthread="yes"
> ])
> +if test "$have_pthread" = "yes"; then
> +  AC_CHECK_LIB([pthread], [pthread_join],
> [HAVE_LIBPTHREAD="yes"])
> +  if test "$HAVE_LIBPTHREAD" = "yes"; then
> +    ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
> +    AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have
> libpthread])
> +  fi
> +else
> +  AC_MSG_RESULT(no)
> +fi
> +
> +AC_SUBST(ALSA_DEPLIBS)
>  
>  dnl Check for architecture
>  AC_MSG_CHECKING(for architecture)
> @@ -318,6 +356,21 @@ fi
>  
>  if test "$build_pcm_ioplug" = "yes"; then
>    build_pcm_extplug="yes"
> +fi
> +
> +if test "$HAVE_LIBDL" != "yes"; then
> +  build_pcm_meter="no"
> +  build_pcm_ladspa="no"
> +  build_pcm_pcm_ioplug="no"
> +  build_pcm_pcm_extplug="no"
> +fi
> +
> +if test "$HAVE_LIBPTHREAD" != "yes"; then
> +  build_pcm_share="no"
> +fi
> +
> +if test "$softfloat" != "yes"; then
> +  build_pcm_lfloat="no"
>  fi
>  
>  AM_CONDITIONAL(BUILD_PCM_PLUGIN, test
> x$build_pcm_plugin = xyes)
> diff -r 6d0a999aef24 include/local.h
> --- a/include/local.h	Fri Mar 16 15:22:27 2007 +0100
> +++ b/include/local.h	Tue Mar 20 16:16:36 2007 +0100
> @@ -36,6 +36,11 @@
>  #include "config.h"
>  #ifdef SUPPORT_RESMGR
>  #include <resmgr.h>
> +#endif
> +#ifdef HAVE_LIBDL
> +#include <dlfcn.h>
> +#else
> +#define RTLD_NOW	0
>  #endif
>  
>  #define _snd_config_iterator list_head
> diff -r 6d0a999aef24 src/Makefile.am
> --- a/src/Makefile.am	Fri Mar 16 15:22:27 2007 +0100
> +++ b/src/Makefile.am	Tue Mar 20 16:16:36 2007 +0100
> @@ -41,7 +41,7 @@ libasound_la_LIBADD +=
> alisp/libalisp.la
>  libasound_la_LIBADD += alisp/libalisp.la
>  endif
>  SUBDIRS += compat conf
> -libasound_la_LIBADD += compat/libcompat.la -lm -ldl
> -lpthread
> +libasound_la_LIBADD += compat/libcompat.la
> @ALSA_DEPLIBS@
>  
>  libasound_la_LDFLAGS = -version-info $(COMPATNUM)
> $(VSYMS)
>  
> diff -r 6d0a999aef24 src/async.c
> --- a/src/async.c	Fri Mar 16 15:22:27 2007 +0100
> +++ b/src/async.c	Tue Mar 20 16:16:36 2007 +0100
> @@ -151,9 +151,11 @@ int
> snd_async_del_handler(snd_async_hand
>  	if (!list_empty(&handler->hlist))
>  		goto _end;
>  	switch (handler->type) {
> +#ifdef BUILD_PCM
>  	case SND_ASYNC_HANDLER_PCM:
>  		err = snd_pcm_async(handler->u.pcm, -1, 1);
>  		break;
> +#endif
>  	case SND_ASYNC_HANDLER_CTL:
>  		err = snd_ctl_async(handler->u.ctl, -1, 1);
>  		break;
> diff -r 6d0a999aef24 src/conf.c
> --- a/src/conf.c	Fri Mar 16 15:22:27 2007 +0100
> +++ b/src/conf.c	Tue Mar 20 16:16:36 2007 +0100
> @@ -415,12 +415,13 @@ beginning:</P>
> 
=== message truncated ===



 
____________________________________________________________________________________
Bored stiff? Loosen up... 
Download and play hundreds of games for free on Yahoo! Games.
http://games.yahoo.com/games/front

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2007-03-21 19:00 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-16 13:17 Static build of alsa-lib Ciaccia
2007-03-16 14:18 ` Takashi Iwai
2007-03-16 14:24   ` Takashi Iwai
2007-03-16 15:11     ` Ciaccia
2007-03-16 15:20       ` Takashi Iwai
2007-03-17 10:13   ` Ciaccia
2007-03-20 10:48     ` Takashi Iwai
2007-03-20 12:00       ` Rene Herman
2007-03-20 15:13       ` Ciaccia
2007-03-20 16:01         ` [Alsa-devel] " Takashi Iwai
2007-03-21 19:00           ` Ciaccia

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.