blob: 7d49ce38bf78aa902fba521dabdf47d5e79ff562 [file] [log] [blame]
LOCAL_PATH := $(call my-dir)
# Only load these subdirs when 3rd party packages have been requested.
ifneq ($(PRODUCT_3RD_PARTY_PACKAGES),)
3RD_PARTY_CC := $(HOST_OUT_EXECUTABLES)/3rd-party-gcc
3RD_PARTY_CXX := $(HOST_OUT_EXECUTABLES)/3rd-party-g++
3RD_PARTY_PKG_CONFIG := $(HOST_OUT_EXECUTABLES)/3rd-party-pkg-config
TARGET_OUT_GENTOO := $(TARGET_OUT_INTERMEDIATES)/gentoo
TARGET_OUT_COMMON_GENTOO := $(TARGET_OUT_COMMON_INTERMEDIATES)/gentoo
3RD_PARTY_ROOT := $(TARGET_OUT_GENTOO)/root
3RD_PARTY_ROOT_SUBDIR := $(patsubst $(PRODUCT_OUT)/%,%,$(3RD_PARTY_ROOT))
# These are system packages that we assume are always available before we can
# compile anything at all. Basically we need a functional C/C++ compiler.
3RD_PARTY_SYSTEM_DEPS := libc libc++ libdl libm libstdc++
# We have to include subdirs first as they set up some vars we use below.
3RD_PARTY_CONFIGS :=
3RD_PARTY_WRAPPERS :=
include $(call all-subdir-makefiles)
# Some libraries are available in external/ already.
# Note: Keep this in sync with gentoo/integration/portage/package.provided.in.
# We do not list packages that do not provide libs/headers.
3RD_PARTY_EXTERNAL_LIBS := \
libavahi-client libavahi-common libavahi-core \
libbz \
libcrypto libssl \
libcares \
libcurl \
libdbus \
libext2_blkid libext2_com_err libext2_e2p libext2fs libext2_quota libext2_uuid libtune2fs \
libdw libdwelf libdwfl libebl libelf \
libexpat \
libFLAC \
libgmock \
libgtest \
libicui18n libicuuc \
libiprouteutil libnetlink \
libip4tc libip6tc libxtables \
libjemalloc \
libjpeg \
libcap \
libcap-ng \
libdaemon \
libdivsufsort libdivsufsort64 \
libevent \
libmicrohttpd \
libnl \
libogg \
libopus \
libselinux \
libunwind \
libvpx libwebm \
libpcre libpcrecpp \
libsepol \
libspeex \
libtinyxml \
libtinyxml2 \
libwpa_client \
libz \
$(NULL)
# Only depend on the packages that are actually requested.
3RD_PARTY_EXTERNAL_DEPS += $(filter $(3RD_PARTY_EXTERNAL_LIBS),$(product_MODULES) $(PRODUCT_PACKAGES))
# Actually run the emerge command for the specific package.
%.emerge: TARGET_TO_ATOM = $(notdir $(patsubst %/,%,$(dir $(1))))/$(notdir $(1:.emerge=))
%.emerge: | $(3RD_PARTY_WRAPPERS) $(3RD_PARTY_CONFIGS) $(3RD_PARTY_EXTERNAL_DEPS)
$(hide)mkdir -p $(dir $@) $(TARGET_OUT_GENTOO)/tmp
$(hide)emerge $(call TARGET_TO_ATOM,$@)
$(hide)3rd-party-merge \
--package $(call TARGET_TO_ATOM,$@) \
--input-root $(3RD_PARTY_ROOT) \
--output-root $(TARGET_OUT) \
--make-root $(TARGET_OUT_GENTOO)/mk-installed
$(hide)touch $@
# Set up a module for each requested package.
define 3rd-party-merge
include $(CLEAR_VARS)
LOCAL_MODULE := mk-installed/$(1).emerge
LOCAL_MODULE_CLASS := GENTOO
LOCAL_UNINSTALLABLE_MODULE := true
include $$(BUILD_SYSTEM)/base_rules.mk
endef
$(foreach p,$(PRODUCT_3RD_PARTY_PACKAGES),$(eval $(call 3rd-party-merge,$(p))))
# A pseudo target that depends on all the generated packages above.
# The board can use this in their PRODUCT_PACKAGES list.
include $(CLEAR_VARS)
LOCAL_MODULE := 3rd-party-packages
LOCAL_MODULE_CLASS := GENTOO
LOCAL_ADDITIONAL_DEPENDENCIES := $(foreach p,$(PRODUCT_3RD_PARTY_PACKAGES),mk-installed/$(p).emerge)
include $(BUILD_SYSTEM)/base_rules.mk
LOCAL_BUILT_MODULE := $(intermediates)/$(LOCAL_MODULE)
$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
$(hide)mkdir -p $(dir $@)
$(hide)touch $@
endif