#############################################################
#
# Helpers for using broadcom's build environment in buildroot
#
#############################################################

BCM_COMMON_SITE=repo://vendor/broadcom/common

PLAT_NOQUOTES=$(shell echo $(BR2_PACKAGE_BCM_COMMON_PLATFORM) | sed -e s/\"//g)

# BCHP_VER is used by cairo
BCHP_VER=${BR2_PACKAGE_BCM_COMMON_PLATFORM_REV}
ifeq ($(findstring $(PLAT_NOQUOTES), 97425 97428), $(PLAT_NOQUOTES))
GOOG_SAGE_SUPPORT=n
else
GOOG_SAGE_SUPPORT=y
endif

BCM_MAKE_ENV=\
NEXUS_TOP=${BCM_NEXUS_DIR} \
PLATFORM=${BR2_PACKAGE_BCM_COMMON_PLATFORM} \
NEXUS_PLATFORM=${BR2_PACKAGE_BCM_COMMON_PLATFORM} \
BSEAV=${BCM_BSEAV_DIR} \
LINUX=${LINUX_DIR} \
BCHP_VER=${BCHP_VER} \
PLAYBACK_IP_SUPPORT=y \
NETACCEL_SUPPORT=n \
LIVEMEDIA_SUPPORT=y \
MEDIA_AVI_SUPPORT=y \
MEDIA_ASF_SUPPORT=n \
BHDM_CEC_SUPPORT=n \
BCEC_SUPPORT=y \
LIVE_STREAMING_SUPPORT=y \
HLS_PROTOCOL_SUPPORT=n \
V3D_SUPPORT=y \
KERNELMODE=n \
AUTO_PSI_SUPPORT=y \
SSL_SUPPORT=y \
NEXUS_MODE= \
DTCP_IP_SUPPORT=n \
DTCP_IP_HARDWARE_ENCRYPTION=n \
DTCP_IP_HARDWARE_DECRYPTION=n \
B_HAS_PLAYPUMP_IP=n \
MULTI_BUILD=n \
NEXUS_HDCP_SUPPORT=y \
MSDRM_PRDY_SUPPORT=n \
PRDY_ROBUSTNESS_ENABLE=y \
MSDRM_PRDY_SDK_VERSION=2.5 \
APPLIBS_PLAYREADY=y \
KEYLADDER_SUPPORT=y \
OTPMSP_SUPPORT=y \
USERCMD_SUPPORT=y \
BHSM_SECURE_RSA=OFF \
BHSM_OTPMSP=ON \
BHSM_KEYLADDER=ON \
HSM_SOURCE_AVAILABLE=y \
BSP_M2M_EXT_KEY_IV_SUPPORT=ON \
PLAYBACKDEVICE_STAND_ALONE_APPLICATION=n \
TOOLCHAIN_ROOT=$(HOST_DIR)/usr/bin/ \
SC_PLATFORM=bcm${BR2_PACKAGE_BCM_COMMON_PLATFORM}nexus \
BVDC_MACROVISION=y \
BRUNO_DEFINES="BRUNO_PLATFORM=1 BRUNO_PLATFORM_GFHD100=1" \
BSP_SC_VALUE_SUPPORT=ON \
BSID_MJPEG_SUPPORT=y \
B_REFSW_OPENSSL_IS_EXTERNAL=y \
MINICLIENT_PATH=${GOOGLE_MINICLIENT_DIR} \
GLFW_NEXUS_PATH=${GOOGLE_GLFW_NEXUS_DIR} \
NEXUS_COMMON_CRYPTO_SUPPORT=y \
URSR_TOP=${BCM_NEXUS_DIR}/.. \
COMMON_DRM_TOP=${BCM_BSEAV_DIR}/lib/security/common_drm \
SAGE_SUPPORT=${GOOG_SAGE_SUPPORT} \
SAGE_SECURE_MODE=6

ifeq ($(findstring $(PLAT_NOQUOTES), 97425 97428), $(PLAT_NOQUOTES))
BCM_MAKE_ENV += WVCDM_VERSION=2.1
BCM_MAKE_ENV += APPLIBS_WIDEVINE=y
endif

BCM_MAKE_ENV += B_REFSW_DEBUG=y
# NOTE(apenwarr): this could also be set to 'release'.
#  That disables debug logs and makes things slightly smaller/faster. 
#  However, since we capture the logs for analysis, we will probably always
#  want debug mode.
BCM_COMMON_BUILD_TYPE=debug

BCM_MAKEFLAGS=
BCM_MAKEFLAGS += CROSS_COMPILE="${TARGET_CROSS}"
BCM_MAKEFLAGS += TOOLCHAIN_DIR="${HOST_DIR}/usr/bin"
ifeq ($(BR2_mipsel),y)
BCM_MAKEFLAGS += B_REFSW_ARCH=mipsel-linux
else
BCM_MAKEFLAGS += B_REFSW_ARCH=arm-linux
endif
BCM_MAKEFLAGS += PATH=${HOST_DIR}/usr/bin:${PATH}
BCM_MAKEFLAGS += PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig:$(STAGING_DIR)/usr/share/pkgconfig"
BCM_MAKEFLAGS += HOST_DIR="${HOST_DIR}"
BCM_MAKEFLAGS += APPLIBS_TOP=${BCM_APPS_DIR}

NETFLIX_MAKEFLAGS=
NETFLIX_MAKEFLAGS += TOOLCHAIN_DIR="${HOST_DIR}/usr/bin"
ifeq ($(BR2_mipsel),y)
NETFLIX_MAKEFLAGS += B_REFSW_ARCH=mipsel-linux
else
NETFLIX_MAKEFLAGS += B_REFSW_ARCH=arm-linux
endif
NETFLIX_MAKEFLAGS += B_REFSW_TOOLCHAIN_DIR="${HOST_DIR}/usr"
NETFLIX_MAKEFLAGS += CROSS_COMPILE="${TARGET_CROSS}"
NETFLIX_MAKEFLAGS += PATH=${HOST_DIR}/usr/bin:${PATH}
NETFLIX_MAKEFLAGS += PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig:$(STAGING_DIR)/usr/share/pkgconfig"

#export NETACCEL_SUPPORT=y
#export LIVEMEDIA_SUPPORT=n
#export MEDIA_ASF_SUPPORT=y
#export B_HAS_PLAYPUMP_IP=y
#export DTCP_IP_SUPPORT=y
#export DTCP_IP_HARDWARE_ENCRYPTION=y
#export DTCP_IP_HARDWARE_DECRYPTION=y

define BCM_COMMON_USE_BUILD_SYSTEM
       $(RM) -rf $1/common
       ln -sf $(BCM_COMMON_DIR)/common $1/common
       mkdir -p $(@D)/opensource
       $(RM) -rf $1/opensource/common
       ln -sf $(BCM_COMMON_DIR)/opensource/common $1/opensource/common
endef

ifeq ($(BR2_mipsel),y)
define BCM_COMMON_BUILD_EXTRACT_TARBALL
       rm -f $(@D)/target/${BR2_PACKAGE_BCM_COMMON_PLATFORM}*.mipsel-linux*$(BCM_COMMON_BUILD_TYPE).*tgz
       $(BCM_MAKE_ENV) $(MAKE1) $(BCM_MAKEFLAGS) APPLIBS_TOP=$(@D) -C $(@D)/common bundle
       $(TAR) -xf $(@D)/target/${BR2_PACKAGE_BCM_COMMON_PLATFORM}*.mipsel-linux*$(BCM_COMMON_BUILD_TYPE).*tgz -C $(1)
endef
else
define BCM_COMMON_BUILD_EXTRACT_TARBALL
       rm -f $(@D)/target/${BR2_PACKAGE_BCM_COMMON_PLATFORM}*.arm-linux*$(BCM_COMMON_BUILD_TYPE).*tgz
       $(BCM_MAKE_ENV) $(MAKE1) $(BCM_MAKEFLAGS) APPLIBS_TOP=$(@D) -C $(@D)/common bundle
       $(TAR) -xf $(@D)/target/${BR2_PACKAGE_BCM_COMMON_PLATFORM}*.arm-linux*$(BCM_COMMON_BUILD_TYPE).*tgz -C $(1)
endef
endif

$(eval $(call GENTARGETS))
