[Buildroot] ALSA for build root Part 2
Hans-Christian Egtvedt
hcegtvedt at norway.atmel.com
Wed Jun 6 07:47:37 UTC 2007
On Wed, 2007-05-30 at 23:29 +0100, Rod Boyce wrote:
> Bernhard Fischer wrote:
> > On Tue, May 29, 2007 at 09:03:12AM +0200, Hans-Christian Egtvedt wrote:
<cut>
> Attached is an updated patch that does not offend the sensibilities of
> other ALSA people working on build root. This is just alsa-lib and
> alsa-utils I will send out a patch for more alsa stuff latter. This
> outputs to $(STAGING_DIR)/usr/lib which on my build happens to be a link
> back to $(STAGING_DIR)/lib.
Same here, AFAIK it is supposed to be that way.
> I have also removed the device links that I
> was putting in the dev directory I had not removed this since I switched
> over to udev. Just --prefix=/usr did not fix all paths all of the time
> although I think that I have the minimum custom options for configure
> and install targets for both utilities and library makefile fragments
> now.
Weird, what prefixes are not correct? I only have to give --prefix=/usr
and --sysconfdir=/etc .
> I also figured out what the "basename nonsense" was and while I
> approve of the intent I used a more makefile way of doing the same thing.
>
> Hopefully this is a more acceptable patch, if anybody has some more
> suggestions then perhaps they would like to contribute their own ALSA
> patch's so we can either pick the best or merge and get the best of both
> worlds and produce a better build-root system.
Comments below.
> diff -uN --recursive ../trunk/package/alsa-lib/alsa-lib.mk
> package/alsa-lib/alsa-lib.mk
> --- ../trunk/package/alsa-lib/alsa-lib.mk 1970-01-01
> 01:00:00.000000000 +0100
> +++ package/alsa-lib/alsa-lib.mk 2007-05-30 22:58:14.604803783
> +0100
> @@ -0,0 +1,95 @@
> +#############################################################
> +#
> +# ALSA library
> +#
> +#############################################################
> +
> +ALSA-LIB_VERSION := 1.0.14rc4
Same as for alsa-tools, I prefer the ALSA_LIB_VERSION, all underscores.
> +ALSA-LIB_SOURCE := alsa-lib-$(ALSA-LIB_VERSION).tar.bz2
> +ALSA-LIB_SITE := ftp://ftp.alsa-project.org/pub/lib/
> +ALSA-LIB_DIR := $(BUILD_DIR)/$(patsubst %.tar.bz2,%,$(ALSA-LIB_SOURCE))
Again, I prefer the all written approach, to easier see what the
variable is.
> +ALSA-LIB_CAT := $(BZCAT)
> +ALSA-LIB_PATH := /usr/lib
usr/lib, skip leading /
> +ALSA-LIB_DEBUG := yes
> +ifneq ($(BR2_PACKAGE_ALSA-LIB_DEBUG_ENABLE),y)
> +ALSA-LIB_DEBUG := no
> +endif
Nice, but better to set them as "--with-debug" or "--without-debug" and
append them to the ./configure.
> +$(DL_DIR)/$(ALSA-LIB_SOURCE):
> + $(WGET) -P $(DL_DIR) $(ALSA-LIB_SITE)/$(ALSA-LIB_SOURCE)
> +
> +$(ALSA-LIB_DIR)/.unpacked: $(DL_DIR)/$(ALSA-LIB_SOURCE)
> + $(ALSA-LIB_CAT) $(DL_DIR)/$(ALSA-LIB_SOURCE) | tar -C
> $(BUILD_DIR) $(TAR_OPTIONS) -
> + touch $@
> +
> +$(ALSA-LIB_DIR)/.configured: $(ALSA-LIB_DIR)/.unpacked
> + (cd $(ALSA-LIB_DIR); rm -rf config.cache; \
> + $(TARGET_CONFIGURE_OPTS) \
> + ./configure \
> + --target=$(GNU_TARGET_NAME) \
> + --host=$(GNU_TARGET_NAME) \
> + --build=$(GNU_HOST_NAME) \
> + --prefix=/usr \
> + --sysconfdir=/etc \
> + --libdir=$(ALSA-LIB_PATH) \
This should be set with the prefix, not needed.
Add the ALSA-LIB_DEBUG variable.
> + --disable-docs \
> + --with-debug=$(ALSA-LIB_DEBUG) \
> + $(DISABLE_NLS) \
> + );
> + touch $@
> +
> +$(ALSA-LIB_DIR)/src/libasound.la: $(ALSA-LIB_DIR)/.configured
> + rm -f $@
> + $(MAKE) CFLAGS=-g CC=$(TARGET_CC) -C $(ALSA-LIB_DIR)
Only append -g if you actually are making debug target, see comment on
debug option further up.
> +$(STAGING_DIR)$(ALSA-LIB_PATH)/libasound.so.2.0.0:
> $(ALSA-LIB_DIR)/src/libasound.la
> + $(MAKE) prefix=$(STAGING_DIR) \
> + exec_prefix=$(STAGING_DIR) \
> + libdir=$(STAGING_DIR)$(ALSA-LIB_PATH) \
> + -C $(ALSA-LIB_DIR) install;
> + @touch -c $@
> +
> +$(TARGET_DIR)$(ALSA-LIB_PATH)/libasound.so.2.0.0:
> $(STAGING_DIR)$(ALSA-LIB_PATH)/libasound.so.2.0.0
> + @mkdir -p $(TARGET_DIR)/usr/share/alsa
> + @mkdir -p $(TARGET_DIR)$(ALSA-LIB_PATH)/alsa-lib/smixer
$(TARGET_DIR)/$(ALSA-LIB_PATH) (add a / in between).
> + cp -dpf $(STAGING_DIR)/lib/libasound.so* $(TARGET_DIR)/lib
exchange /lib/ with /$(ALSA-LIB_PATH)/ on both sides.
> + cp -rdpf $(STAGING_DIR)/share/alsa/* $(TARGET_DIR)/usr/share/alsa/
> + cp -rdpf $(STAGING_DIR)$(ALSA-LIB_PATH)/alsa-lib/* $(TARGET_DIR)$(ALSA-LIB_PATH)/alsa-lib/
$(TARGET_DIR)/$(ALSA-LIB_PATH) (add a / in between).
> + -$(STRIP) --strip-unneeded $(TARGET_DIR)/lib/libasound.so*
exchange /lib/ with /$(ALSA-LIB_PATH)/
> + -$(STRIP) --strip-unneeded $(TARGET_DIR)$(ALSA-LIB_PATH)/alsa-lib/smixer/smixer-*.so
$(TARGET_DIR)/$(ALSA-LIB_PATH) (add a / in between).
> + @touch -c $@
> +
> +
> +$(TARGET_DIR)$(ALSA-LIB_PATH)/libasound.la: $(STAGING_DIR)$(ALSA-LIB_PATH)/libasound.so.2.0.0
> + @mkdir -p $(TARGET_DIR)/usr/include/alsa/sound
> + @mkdir -p $(TARGET_DIR)/usr/include/sys
> + cp -rdpf $(STAGING_DIR)/include/alsa $(TARGET_DIR)/usr/include
> + cp -dpf $(STAGING_DIR)/include/sys/asoundlib.h $(TARGET_DIR)/usr/include/sys/
> + cp -dpf $(STAGING_DIR)/lib/libasound.la $(TARGET_DIR)$(ALSA-LIB_PATH)
$(TARGET_DIR)/$(ALSA-LIB_PATH) (add a / in between).
> + @touch -c $@
> +
> +alsa-lib-headers: $(TARGET_DIR)$(ALSA-LIB_PATH)/libasound.la
$(TARGET_DIR)/$(ALSA-LIB_PATH) (add a / in between).
> +
> +alsa-lib: linux26 uclibc $(TARGET_DIR)$(ALSA-LIB_PATH)/libasound.so.2.0.0
> +
> +alsa-lib-source: $(DL_DIR)/$(ALSA-LIB_SOURCE)
> +
> +alsa-lib-clean:
> + @if [ -d $(ALSA-LIB_DIR)/Makefile ] ; then \
> + $(MAKE) -C $(ALSA-LIB_DIR) clean ; \
> + fi;
> +
> +alsa-lib-dirclean:
> + rm -rf $(ALSA-LIB_DIR) $(ALSA-LIB_DIR)
> +#############################################################
> +#
> +# Toplevel Makefile options
> +#
> +#############################################################
> +ifeq ($(strip $(BR2_PACKAGE_ALSA-LIB)),y)
> +TARGETS+=alsa-lib
> +endif
> +
> +ifeq ($(strip $(BR2_PACKAGE_ALSA-LIB_TARGET_HEADERS)),y)
> +TARGETS+=alsa-lib-headers
> +endif
> diff -uN --recursive ../trunk/package/alsa-lib/Config.in package/alsa-lib/Config.in
> --- ../trunk/package/alsa-lib/Config.in 1970-01-01 01:00:00.000000000 +0100
> +++ package/alsa-lib/Config.in 2007-05-30 18:58:51.493711408 +0100
> @@ -0,0 +1,23 @@
> +config BR2_PACKAGE_ALSA-LIB
> + bool "alsa-lib"
> + default n
> + help
> + Advanced Linux Sound Architecture
> +
> + http://www.alsa-project.org/
> +
> +config BR2_PACKAGE_ALSA-LIB_DEBUG_ENABLE
> + bool "Build alsa-lib with debug"
> + default y
> + depends on BR2_PACKAGE_ALSA-LIB
> + help
> + Build libraries with debug turned on see alsa-lib/NOTES
> +
> +config BR2_PACKAGE_ALSA-LIB_TARGET_HEADERS
> + bool "alsa-lib headers in target"
> + default n
> + depends on BR2_PACKAGE_ALSA-LIB
> + help
> + Put headers files in the target.
Other than that, alsa-lib looks good.
> diff -uN --recursive ../trunk/package/alsa-utils/alsa-utils.mk
> package/alsa-utils/alsa-utils.mk
> --- ../trunk/package/alsa-utils/alsa-utils.mk 1970-01-01
> 01:00:00.000000000 +0100
> +++ package/alsa-utils/alsa-utils.mk 2007-05-30 22:57:20.186203681
> +0100
> @@ -0,0 +1,105 @@
> +#############################################################
> +#
> +# ALSA Utils
> +#
> +#############################################################
> +ALSA-UTILS_VERSION := 1.0.14rc4
Same comment about underscores in variables.
> +ALSA-UTILS_SOURCE := alsa-utils-$(ALSA-UTILS_VERSION).tar.bz2
> +ALSA-UTILS_SITE := ftp://ftp.alsa-project.org/pub/utils/
> +ALSA-UTILS_DIR := $(BUILD_DIR)/$(patsubst %.tar.bz2,%,$(ALSA-UTILS_SOURCE))
Again, I prefer the all written approach, to easier see what the
variable is.
> +ALSA-UTILS_CAT := $(BZCAT)
> +
> +AUTOOLS :=
> +AUBIN :=
> +AUSBIN :=
> +
> +AUTOOLS += aplay/aplay
> +AUTOOLS += aplay/arecord
> +AUTOOLS += alsaconf/alsaconf
> +AUTOOLS += alsactl/alsactl
> +AUTOOLS += alsamixer/alsamixer
> +AUTOOLS += amidi/amidi
> +AUTOOLS += amixer/amixer
> +AUTOOLS += seq/aplaymidi/arecordmidi
> +AUTOOLS += seq/aseqdump/aseqdump
> +AUTOOLS += seq/aseqnet/aseqnet
> +AUTOOLS += seq/aconnect/aconnect
> +AUTOOLS += iecset/iecset
> +AUTOOLS += speaker-test/speaker-test
> +
> +AUBIN += aconnect
> +AUBIN += alsamixer
> +AUBIN += amidi
> +AUBIN += amixer
> +AUBIN += aplay
> +AUBIN += aplaymidi
> +AUBIN += arecord
> +AUBIN += arecordmidi
> +AUBIN += aseqdump
> +AUBIN += aseqnet
> +AUBIN += iecset
> +AUBIN += speaker-test
> +
> +AUSBIN += alsaconf
> +AUSBIN += alsactl
Make all this configurable in Kconfig, will save some space on targets
where you only need alsactl and a mixer.
Same approach as the tools:
LSA_UTILS_TARGETS_ :=
ALSA_UTILS_TARGETS_y :=
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSACONF) += usr/sbin/alsaconf
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSACTL) += usr/sbin/alsactl
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSAMIXER) += usr/bin/alsamixer
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_AMIDI) += usr/bin/amidi
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_AMIXER) += usr/bin/amixer
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_APLAY) += usr/bin/aplay
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ARECORD) += usr/bin/arecord
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_IECSET) += usr/bin/iecset
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ACONNECT) += usr/bin/aconnect
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_APLAYMIDI) += usr/bin/aplaymidi
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI) += usr/bin/arecordmidi
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ASEQDUMP) += usr/bin/aseqdump
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ASEQNET) += usr/bin/aseqnet
ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST) += usr/bin/speaker-test
> +$(DL_DIR)/$(ALSA-UTILS_SOURCE):
> + $(WGET) -P $(DL_DIR) $(ALSA-UTILS_SITE)/$(ALSA-UTILS_SOURCE)
> +
> +$(ALSA-UTILS_DIR)/.unpacked: $(DL_DIR)/$(ALSA-UTILS_SOURCE)
> + $(ALSA-UTILS_CAT) $(DL_DIR)/$(ALSA-UTILS_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
> + touch $(ALSA-UTILS_DIR)/.unpacked
> +
> +$(ALSA-UTILS_DIR)/.configured: $(ALSA-UTILS_DIR)/.unpacked
> + (cd $(ALSA-UTILS_DIR); rm -rf config.cache; \
> + $(TARGET_CONFIGURE_OPTS) \
> + ./configure \
> + --target=$(GNU_TARGET_NAME) \
> + --host=$(GNU_TARGET_NAME) \
> + --build=$(GNU_HOST_NAME) \
> + --disable-docs \
> + --prefix=/usr \
> + --sysconfdir=/etc \
> + --disable-alsatest \
> + $(DISABLE_NLS) \
> + );
> + touch $@
@ out the touches, I may have overseen some of them.
> +$(ALSA-UTILS_DIR)/aplay/aplay: $(ALSA-UTILS_DIR)/.configured
> + $(MAKE) CC=$(TARGET_CC) -C $(ALSA-UTILS_DIR)
> +
> +
> +$(STAGING_DIR)/usr/bin/aplay: $(ALSA-UTILS_DIR)/aplay/aplay
> + $(MAKE) prefix=$(STAGING_DIR)/usr \
> + exec_prefix=$(STAGING_DIR)/usr \
> + -C $(ALSA-UTILS_DIR) install;
Use DESTDIR=$(STAGING_DIR) instead.
> +$(TARGET_DIR)/usr/bin/aplay: $(STAGING_DIR)/usr/bin/aplay
> + @mkdir -p $(TARGET_DIR)/usr/bin
> + @mkdir -p $(TARGET_DIR)/usr/sbin
> + cp -dpf $(addprefix $(STAGING_DIR)/usr/bin/,$(AUBIN)) $(TARGET_DIR)/usr/bin/
> + cp -dpf $(addprefix $(STAGING_DIR)/usr/sbin/,$(AUSBIN)) $(TARGET_DIR)/usr/sbin/
> + for i in $(addprefix $(STAGING_DIR)/usr/bin/,$(AUBIN)) $(addprefix $(STAGING_DIR)/usr/sbin/,$(AUSBIN)); \
> + do $(STRIP) --strip-unneeded $$i > /dev/null 2>&1; done
Replace install procedure with something like:
@mkdir -p $(TARGET_DIR)/usr/bin
@mkdir -p $(TARGET_DIR)/usr/sbin
for file in $(ALSA_UTILS_TARGETS_y) ; do \
cp -dpf $(STAGING_DIR)/$$file $(TARGET_DIR)/$$file; \
$(STRIP) --strip-unneeded $(STAGING_DIR)/$$file; \
done
@if [ -x "$(TARGET_DIR)/usr/bin/speaker-test" ] ; then \
mkdir -p $(TARGET_DIR)/usr/share/alsa/speaker-test; \
mkdir -p $(TARGET_DIR)/usr/share/sounds/alsa; \
cp -rdpf $(STAGING_DIR)/usr/share/alsa/speaker-test/* $(TARGET_DIR)/usr/share/alsa/speaker-test/; \
cp -rdpf $(STAGING_DIR)/usr/share/sounds/alsa/* $(TARGET_DIR)/usr/share/sounds/alsa/; \
fi;
> +
> +alsa-utils: uclibc alsa-lib $(TARGET_DIR)/usr/bin/aplay
IMHO alsactl is the "main" util.
> +
> +alsa-utils-clean:
> + @if [ -d $(ALSA-UTILS_DIR)/Makefile ] ; then \
> + $(MAKE) -C $(ALSA-UTILS_DIR) clean ; \
> + fi;
> +
> +alsa-utils-dirclean:
> + rm -rf $(ALSA-UTILS_DIR) $(ALSA-UTILS_DIR)
> +
> +#############################################################
> +#
> +# Toplevel Makefile options
> +#
> +#############################################################
> +ifeq ($(strip $(BR2_PACKAGE_ALSA-UTILS)),y)
> +TARGETS+=alsa-utils
> +endif
> diff -uN --recursive ../trunk/package/alsa-utils/Config.in package/alsa-utils/Config.in
> --- ../trunk/package/alsa-utils/Config.in 1970-01-01 01:00:00.000000000 +0100
> +++ package/alsa-utils/Config.in 2007-05-07 22:13:02.134609691 +0100
> @@ -0,0 +1,8 @@
> +config BR2_PACKAGE_ALSA-UTILS
> + bool "alsa-utils"
> + default n
> + help
> + Utilities from Advanced Linux Sound Architecture
> +
> + http://www.alsa-project.org/
And add the configuration options:
menu "ALSA utils selection"
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ALSACONF
bool "alsaconf"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ALSACTL
bool "alsactl"
default y
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ALSAMIXER
bool "alsamixer"
default y
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_AMIDI
bool "amidi"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_AMIXER
bool "amixer"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_APLAY
bool "aplay"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ARECORD
bool "arecord"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_IECSET
bool "iecset"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ACONNECT
bool "aconnect"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_APLAYMIDI
bool "aplaymidi"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI
bool "arecordmidi"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ASEQDUMP
bool "aseqdump"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_ASEQNET
bool "aseqnet"
default n
depends on BR2_PACKAGE_ALSA_UTILS
config BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST
bool "speaker-test"
default n
depends on BR2_PACKAGE_ALSA_UTILS
endmenu
> diff -uN --recursive ../trunk/package/Config.in package/Config.in
> --- ../trunk/package/Config.in 2007-05-30 23:10:52.748747759 +0100
> +++ package/Config.in 2007-05-28 18:53:59.880317482 +0100
> @@ -239,12 +239,14 @@
> Support for audio libraries and applications
>
> if BR2_AUDIO_SUPPORT
> +source "package/alsa-lib/Config.in"
> +source "package/alsa-utils/Config.in"
> source "package/asterisk/Config.in"
> source "package/libid3tag/Config.in"
> source "package/libmad/Config.in"
> source "package/libsndfile/Config.in"
> source "package/madplay/Config.in"
> source "package/mpg123/Config.in"
> endif
>
> menuconfig BR2_GRAPHIC_SUPPORT
Again, looks nice, will be good to have full alsa support i Buildroot.
--
Mvh
Hans-Christian Egtvedt
More information about the buildroot
mailing list