Android has its own build system like GNU make . However, most developers are not very happy when they have to add support for a new build system in open source projects (in most cases autotools are used), which, moreover, must be constantly monitored (and suddenly something will break in another version). Androgenizer was created to avoid such situations.
')
Instead of adding an Android.mk file to each module of a project, you can add only one Android.mk file at the topmost level for automatic configuration for the pre-build stage. Perform all steps in autoconf / automake / configure , and then call make in the appropriate directories to create Android.mk files in them.
Each Makefile.am module that you want to compile for Android should contain a small snippet to generate Android.mk using androgenizer .
Sometimes the contents of the Android.mk file depend on how the project will be built: using NDK or as part of AOSP. Androgenizer takes this into account too.
Androgenizer detects the build system based on the ANDROID_BUILD_TOP environment variable , if it is not installed or empty, then it is assumed to be built from under the NDK.
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
GSTREAMER_AGGREGATE_TOP := $(abspath $(LOCAL_PATH))/..
ifneq ($(SYSROOT),) NDK_BUILD := true else NDK_BUILD := false endif
ifeq ($(gstreamer_TOP),) gstreamer_TOP := $(GSTREAMER_AGGREGATE_TOP)/gstreamer endif ifeq ($(GST_PLUGINS_GOOD_TOP),) GST_PLUGINS_GOOD_TOP := $(GSTREAMER_AGGREGATE_TOP)/gst-plugins-bad endif ifeq ($(GST_PLUGINS_BAD_TOP),) GST_PLUGINS_BAD_TOP := $(GSTREAMER_AGGREGATE_TOP)/gst-plugins-bad endif
CONFIGURE_CC := $(TARGET_CC) CONFIGURE_CXX := $(TARGET_CXX) CONFIGURE_INCLUDES := CONFIGURE_LDFLAGS := -lc -ldl # as ndk-build ifeq ($(NDK_BUILD),true) CONFIGURE_CFLAGS := \ -nostdlib -Bdynamic \ -Wl,-dynamic-linker,/system/bin/linker \ -Wl,--gc-sections \ -Wl,-z,nocopyreloc \ $(call host-path,\ $(TARGET_CRTBEGIN_DYNAMIC_O) \ $(PRIVATE_OBJECTS)) \ $(call link-whole-archives,$(PRIVATE_WHOLE_STATIC_LIBRARIES))\ $(call host-path,\ $(PRIVATE_STATIC_LIBRARIES) \ $(TARGET_LIBGCC) \ $(PRIVATE_SHARED_LIBRARIES)) \ $(PRIVATE_LDFLAGS) \ $(PRIVATE_LDLIBS) \ $(call host-path,\ $(TARGET_CRTEND_O)) \ $(CONFIGURE_INCLUDES) CONFIGURE_LDFLAGS += -L$(SYSROOT)/usr/lib -L$(TARGET_OUT) CONFIGURE_INCLUDES += -I$(SYSROOT)/usr/include \ -I$(GSTREAMER_AGGREGATE_TOP)/libid3tag \ -I$(GSTREAMER_AGGREGATE_TOP)/libmad \ -I$(GSTREAMER_AGGREGATE_TOP)/faad/include CONFIGURE_CPP := $(TOOLCHAIN_PREFIX)cpp CONFIGURE_CXX := $(TOOLCHAIN_PREFIX)c++ LIB := $(SYSROOT)/usr/lib # as AOSP build else LIB := $(TARGET_OUT_SHARED_LIBRARIES) CONFIGURE_CC := $(patsubst %,$(PWD)/%,$(TARGET_CC)) CONFIGURE_CXX := $(patsubst %,$(PWD)/%,$(TARGET_CXX)) CONFIGURE_LDFLAGS += -L$(PWD)/$(TARGET_OUT_INTERMEDIATE_LIBRARIES) CONFIGURE_CFLAGS := \ -nostdlib -Bdynamic \ -Wl,-dynamic-linker,/system/bin/linker \ -Wl,--gc-sections \ -Wl,-z,nocopyreloc CONFIGURE_LDFLAGS += \ $(PWD)/$(TARGET_CRTBEGIN_DYNAMIC_O) \ $(call link-whole-archives,$(PRIVATE_WHOLE_STATIC_LIBRARIES))\ $(PRIVATE_STATIC_LIBRARIES) \ $(PWD)/$(TARGET_LIBGCC) \ $(PRIVATE_SHARED_LIBRARIES) \ $(PWD)/$(TARGET_CRTEND_O) CONFIGURE_CPP := $(PWD)/$(TARGET_TOOLS_PREFIX)cpp CONFIGURE_INCLUDES += \ $(foreach incdir, $(realpath $(C_INCLUDES) $(TARGET_C_INCLUDES)), -I$(incdir)) \ -I$(abspath $(TOP)/external/zlib) \ -I$(GSTREAMER_AGGREGATE_TOP)/libid3tag \ -I$(GSTREAMER_AGGREGATE_TOP)/libmad \ -I$(GSTREAMER_AGGREGATE_TOP)/faad/include endif CONFIGURE_CPPFLAGS := \ $(CONFIGURE_INCLUDES) CONFIGURE_CXXFLAGS := \ $(CONFIGURE_INCLUDES)
# configure as ./autogen.sh CONFIGURE := autogen.sh # or configure as ./configure CONFIGURE := configure
CONFIGURE_PKG_CONFIG_LIBDIR := $(GLIB_TOP):$(gstreamer_TOP)/pkgconfig:$(GST_PLUGINS_BASE_TOP)/pkgconfig:$(GST_PLUGINS_GOOD_TOP)/pkgconfig:$(GST_PLUGINS_BAD_TOP)/pkgconfig:$(GSTREAMER_AGGREGATE_TOP)/x264 PKG_CONFIG := PKG_CONFIG_LIBDIR=$(CONFIGURE_PKG_CONFIG_LIBDIR) PKG_CONFIG_TOP_BUILD_DIR="/" pkg-config
GST_CFLAGS := \ -DD_GNU_SOURCE \ -DGST_DISABLE_DEPRECATED \ -DHAVE_CONFIG_H \ -I$(gstreamer_TOP)
GST_CFLAGS += \ $(shell $(PKG_CONFIG) gstreamer --cflags)
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
GST_PLUGINS_BAD_TOP := $(LOCAL_PATH)
GST_PLUGINS_BAD_BUILT_SOURCES := \ pkgconfig/gstreamer-plugins-bad-1.0-uninstalled.pc \ pkgconfig/gstreamer-plugins-bad-1.0.pc \ gst-libs/gst/baseparse/Android.mk \ gst-libs/gst/basecamerabinsrc/Android.mk \ gst-libs/gst/codecparsers/Android.mk \ gst-libs/gst/interfaces/Android.mk \ gst/h264parse/Android.mk \ ...
GST_PLUGINS_BAD_BUILT_SOURCES := $(patsubst %, $(abspath $(GST_PLUGINS_BAD_TOP))/%, $(GST_PLUGINS_BAD_BUILT_SOURCES))
.PHONY: gst-plugins-bad-configure
gst-plugins-bad-configure: cd $(GST_PLUGINS_BAD_TOP) ; \ CC="$(CONFIGURE_CC)" \ CFLAGS="$(CONFIGURE_CFLAGS)" \ CXX="$(CONFIGURE_CXX)" \ CXXFLAGS="$(CONFIGURE_CXXFLAGS)" \ LD=$(TARGET_LD) \ LDFLAGS="$(CONFIGURE_LDFLAGS)" \ CPP=$(CONFIGURE_CPP) \ CPPFLAGS="$(CONFIGURE_CPPFLAGS)" \ PKG_CONFIG_LIBDIR="$(CONFIGURE_PKG_CONFIG_LIBDIR)" \ PKG_CONFIG_TOP_BUILD_DIR=/ \ $(abspath $(GST_PLUGINS_BAD_TOP))/$(CONFIGURE) \ --prefix=/system --host=arm-linux-androideabi \ --disable-gtk-doc \ --disable-valgrind && \ for file in $(GST_PLUGINS_BAD_BUILT_SOURCES); do \ rm -f $$file && \ make -C $$(dirname $$file) $$(basename $$file) ; \ done
-include $(GST_PLUGINS_BAD_TOP)/gst-libs/gst/baseparse/Android.mk -include $(GST_PLUGINS_BAD_TOP)/gst-libs/gst/basecamerabinsrc/Android.mk -include $(GST_PLUGINS_BAD_TOP)/gst-libs/gst/codecparsers/Android.mk -include $(GST_PLUGINS_BAD_TOP)/gst-libs/gst/interfaces/Android.mk -include $(GST_PLUGINS_BAD_TOP)/gst/h264parse/Android.mk ...
plugin_LTLIBRARIES = libgstmpeg2enc.la
libgstmpeg2enc_la_SOURCES = \ gstmpeg2enc.cc \ gstmpeg2encoptions.cc \ gstmpeg2encoder.cc \ gstmpeg2encstreamwriter.cc \ gstmpeg2encpicturereader.cc
libgstmpeg2enc_la_CXXFLAGS = \ $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CXXFLAGS) $(MPEG2ENC_CFLAGS) libgstmpeg2enc_la_LIBADD = \ $(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_API_VERSION@ \ $(GST_LIBS) $(MPEG2ENC_LIBS) libgstmpeg2enc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstmpeg2enc_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = \ gstmpeg2enc.hh \ gstmpeg2encoder.hh \ gstmpeg2encoptions.hh \ gstmpeg2encstreamwriter.hh \ gstmpeg2encpicturereader.hh
Android.mk: Makefile.am $(BUILT_SOURCES) androgenizer \ -:PROJECT libgstmpeg2enc -:SHARED libgstmpeg2enc \ -:TAGS eng debug \ -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ -:SOURCES $(libgstmpeg2enc_la_SOURCES) \ -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstmpeg2enc_la_CXXFLAGS) \ -:LDFLAGS $(libgstmpeg2enc_la_LDFLAGS) \ $(libgstmpeg2enc_la_LIBADD) \ -ldl \ -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ LOCAL_CPP_EXTENSION:='.cc' \ > $@
make gst-plugins-bad-configure
LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:=libgstmpeg2enc LOCAL_MODULE_TAGS:=eng debug LOCAL_SRC_FILES := \ gstmpeg2enc.cc \ gstmpeg2encoptions.cc \ gstmpeg2encoder.cc \ gstmpeg2encstreamwriter.cc \ gstmpeg2encpicturereader.cc LOCAL_SHARED_LIBRARIES:=\ libglib-2.0 \ libgobject-2.0 \ libgstreamer-0.10 \ libgstbase-0.10 \ libgstriff-0.10 \ libgsttag-0.10 \ libgstvideo-0.10 \ libdl LOCAL_LDFLAGS:=\ -module\ -avoid-version\ -export-symbols-regex\ -no-undefined\ -Wl,-Bsymbolic-functions LOCAL_CFLAGS := \ -DHAVE_CONFIG_H \ -I. \ -I/path/to/AOSP/external/gstreamer-aggregate/gst-plugins-bad \ -I/path/to/AOSP/external/gstreamer-aggregate/gst-plugins-bad/gst-libs \ -I/path/to/AOSP/external/gstreamer-aggregate/gst-plugins-base \ -I/path/to/AOSP/external/gstreamer-aggregate/gst-plugins-base/gst-libs \ -I/path/to/AOSP/external/gstreamer-aggregate/gstreamer \ -I/path/to/AOSP/external/gstreamer-aggregate/glib/glib \ -I/path/to/AOSP/external/gstreamer-aggregate/glib \ -I/path/to/AOSP/external/gstreamer-aggregate/glib/gmodule \ -I/path/to/AOSP/external/gstreamer-aggregate/gstreamer/libs \ -DG_THREADS_MANDATORY \ -DG_DISABLE_DEPRECATED \ -Wall \ -Wdeclaration-after-statement \ -Wvla \ -Wpointer-arith \ -Wmissing-declarations \ -Wmissing-prototypes \ -Wredundant-decls \ -Wundef \ -Wwrite-strings \ -Wformat-nonliteral \ -Wformat-security \ -Winit-self \ -Wmissing-include-dirs \ -Waddress \ -Waggregate-return \ -Wno-multichar \ -Wnested-externs \ -Wno-unused \ -g \ -DGST_DISABLE_DEPRECATED LOCAL_PRELINK_MODULE := false LOCAL_ARM_MODE:=arm LOCAL_MODULE_PATH:=$(TARGET_OUT)/lib/gstreamer-0.10 LOCAL_CPP_EXTENSION:=.cc include $(BUILD_SHARED_LIBRARY)
Source: https://habr.com/ru/post/164139/