Jaroslav Kysela perex@perex.cz 於 2019年3月15日 週五 下午8:20寫道:
Dne 15. 03. 19 v 10:17 Chih-Wei Huang napsal(a):
This is the initial porting of alsa-lib 1.1.8 to Android.
Signed-off-by: Chih-Wei Huang cwhuang@linux.org.tw
android/Android.mk | 55 ++++++++++++ android/config.h | 217 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 272 insertions(+) create mode 100644 android/Android.mk create mode 100644 android/config.h
diff --git a/android/Android.mk b/android/Android.mk new file mode 100644 index 00000000..e12fd3a6 --- /dev/null +++ b/android/Android.mk @@ -0,0 +1,55 @@ +# +# Copyright (C) 2019 The Android-x86 Open Source Project +# +# Licensed under the GNU Lesser General Public License Version 2.1. +# You may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.gnu.org/licenses/lgpl.html +#
+LOCAL_PATH := $(dir $(call my-dir)) +include $(CLEAR_VARS)
+LOCAL_MODULE := libasound +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+intermediates := $(call local-generated-sources-dir)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)include $(LOCAL_PATH)android +LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
+LOCAL_CFLAGS := -DPIC \
-Wno-absolute-value -Wno-address-of-packed-member -Wno-missing-braces \
-Wno-pointer-arith -Wno-sign-compare -Wno-unused-function \
-Wno-unused-const-variable -Wno-unused-parameter -Wno-unused-variable \
-finline-limit=300 -finline-functions -fno-inline-functions-called-once
+# list of files to be excluded +EXCLUDE_SRC_FILES := \
src/alisp/alisp_snd.c \
src/compat/hsearch_r.c \
src/control/control_shm.c \
src/pcm/pcm_d%.c \
src/pcm/pcm_ladspa.c \
src/pcm/pcm_shm.c \
src/pcm/scopes/level.c \
+LOCAL_SRC_FILES := $(filter-out $(EXCLUDE_SRC_FILES),$(call all-c-files-under,src))
+GEN := $(intermediates)/alsa/asoundlib.h +$(GEN): $(LOCAL_PATH)configure.ac $(wildcard $(LOCAL_PATH)include/*.h)
rm -rf $(@D); mkdir -p $(@D); cd $(@D); \
ln -s ../../../../../../../../$(<D)/include/*.h .
cat $(@D)/asoundlib-head.h > $@; \
sed -n "/.*\(#include <[ae].*.h>\).*/s//\1/p" $< >> $@; \
cat $(@D)/asoundlib-tail.h >> $@
sed -n "/^AC_INIT.* \([0-9.]*\))/s//\#define SND_LIB_VERSION_STR \"\1\"/p" $< > $(@D)/version.h; \
ln -sf alsa/version.h $(@D)/..
+LOCAL_GENERATED_SOURCES := $(GEN)
+LOCAL_SHARED_LIBRARIES := libdl
+include $(BUILD_SHARED_LIBRARY) diff --git a/android/config.h b/android/config.h new file mode 100644 index 00000000..53d50396 --- /dev/null +++ b/android/config.h @@ -0,0 +1,217 @@ +/* include/config.h. Generated from config.h.in by configure. */ +/* include/config.h.in. Generated from configure.ac by autoheader. */
+/* Directory with aload* device files */ +#define ALOAD_DEVICE_DIRECTORY "/dev/"
+/* directory containing ALSA configuration database */ +#define ALSA_CONFIG_DIR "/system/usr/share/alsa"
+/* Enable assert at error message handler */ +/* #undef ALSA_DEBUG_ASSERT */
+/* Directory with ALSA device files */ +#define ALSA_DEVICE_DIRECTORY "/dev/snd/"
+/* directory containing ALSA add-on modules */ +#define ALSA_PLUGIN_DIR "/system/usr/lib/alsa-lib"
+/* Build hwdep component */ +#define BUILD_HWDEP "1"
+/* Build mixer component */ +#define BUILD_MIXER "1"
+/* Build PCM component */ +#define BUILD_PCM "1"
+/* Build PCM adpcm plugin */ +#define BUILD_PCM_PLUGIN_ADPCM "1"
+/* Build PCM alaw plugin */ +#define BUILD_PCM_PLUGIN_ALAW "1"
+/* Build PCM lfloat plugin */ +#define BUILD_PCM_PLUGIN_LFLOAT "1"
+/* Build PCM mmap-emul plugin */ +#define BUILD_PCM_PLUGIN_MMAP_EMUL "1"
+/* Build PCM mulaw plugin */ +#define BUILD_PCM_PLUGIN_MULAW "1"
+/* Build PCM rate plugin */ +#define BUILD_PCM_PLUGIN_RATE "1"
+/* Build PCM route plugin */ +#define BUILD_PCM_PLUGIN_ROUTE "1"
+/* Build raw MIDI component */ +/* #undef BUILD_RAWMIDI */
+/* Build sequencer component */ +/* #undef BUILD_SEQ */
+/* Build DSP Topology component */ +#define BUILD_TOPOLOGY "1"
+/* Build UCM component */ +#define BUILD_UCM "1"
+/* Have clock gettime */ +#define HAVE_CLOCK_GETTIME 1
+/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1
+/* Define to 1 if you have the <endian.h> header file. */ +#define HAVE_ENDIAN_H 1
+/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1
+/* Have libdl */ +#define HAVE_LIBDL 1
+/* Have libpthread */ +#define HAVE_LIBPTHREAD 1
+/* Define to 1 if you have the `resmgr' library (-lresmgr). */ +/* #undef HAVE_LIBRESMGR */
+/* Have librt */ +/* #undef HAVE_LIBRT */
+/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1
+/* Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE */ +#define HAVE_PTHREAD_MUTEX_RECURSIVE /**/
+/* Avoid calculation in float */ +/* #undef HAVE_SOFT_FLOAT */
+/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1
+/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1
+/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1
+/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1
+/* Define to 1 if you have the <sys/endian.h> header file. */ +/* #undef HAVE_SYS_ENDIAN_H */
+/* Define to 1 if you have the <sys/shm.h> header file. */ +#define HAVE_SYS_SHM_H 1
+/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1
+/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1
+/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1
+/* Define to 1 if you have the `uselocale' function. */ +#define HAVE_USELOCALE 1
+/* Enable use of wordexp */ +/* #undef HAVE_WORDEXP */
+/* Define to 1 if compiler supports __thread */ +#define HAVE___THREAD 1
+/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/"
+/* No assert debug */ +/* #undef NDEBUG */
+/* Name of package */ +#define PACKAGE "alsa-lib"
+/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT ""
+/* Define to the full name of this package. */ +#define PACKAGE_NAME "alsa-lib"
+/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "alsa-lib"
+/* Define to the home page for this package. */ +#define PACKAGE_URL ""
+/* Max number of cards */ +#define SND_MAX_CARDS 32
+/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1
+/* Support /dev/aload* access for auto-loading */ +/* #undef SUPPORT_ALOAD */
+/* Support resmgr with alsa-lib */ +/* #undef SUPPORT_RESMGR */
+/* Disable thread-safe API functions */ +#define THREAD_SAFE_API "1"
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#define TIME_WITH_SYS_TIME 1
+/* directory to put tmp socket files */ +#define TMPDIR "/tmp"
+/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif
+/* compiled with versioned symbols */ +/* #undef VERSIONED_SYMBOLS */
+/* Define to 1 if on MINIX. */ +/* #undef _MINIX */
+/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
+/* #undef _POSIX_1_SOURCE */
+/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef _POSIX_SOURCE */
+/* Toolchain Symbol Prefix */ +#define __SYMBOL_PREFIX ""
+/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */
+/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus +/* #undef inline */ +#endif
I am afraid, but those changes do not belong to the universal source package. You may create an androidcompile script (something like gitcompile) with some reasonable defaults for configure / autoconf / automake.
If something is missing in the autoconf/automake files - just add it there.
Thank you for review the patches.
Android doesn't use autoconf/automake. Android uses non-recursive build system. The main makefile will include all Android.mk found in the source tree and make all necessary targets to build the final image.
This patch just adds two files to the android/ subfolder which intends to work with Android build system. We just pull the alsa-lib (and alsa-utils, will send later) code to Android source tree and build them. It won't affect others. I hope to upstream them so other people don't need to re-invent the wheel.
Several upstream projects we use have accepted such patches. For examples:
efivar: https://github.com/rhboot/efivar/pull/125 libva: https://github.com/intel/libva/pull/37 vaapi: https://github.com/intel/intel-vaapi-driver/pull/446 exfat: https://github.com/relan/exfat/pull/53 libdrm: https://cgit.freedesktop.org/mesa/drm/tree/Android.mk mesa: https://cgit.freedesktop.org/mesa/mesa/tree/Android.mk
In particular, libdrm / mesa have added Android makefiles and maintained them for years. I hope you can consider to accept it.
Best Regards,
-- Chih-Wei Android-x86 project http://www.android-x86.org