#-------------------------------------------------------------------------------
# Makefile
#
#    Provides a wrapper to compile drivers in DDK
#
#    This is a generic Makefile and no changes are required to compile 
#    drivers
#-------------------------------------------------------------------------------

DDKBASE = /opt/vmware/ddk-5.5.0-1198610
export KEYPATH=/opt/vmware/vibtools/testcerts/vmware.key
export CERTPATH=/opt/vmware/vibtools/testcerts/vmware.cert
include $(DDKBASE)/includes/ddk.inc

#-------------------------------------------------------------------------------
# Targets
#-------------------------------------------------------------------------------
default: vib

vib: driver-vib # Legacy target

driver-vib: clean
	@make -f $(RULES) driver-pre
	@make -f $(RULES) copy-sc
	@make -f $(RULES) SCONS_TARGET=$(DRIVER_TARGET) do-scons
	@make -f $(RULES) driver-copyout

ima-vib: clean ima-check
	@make -f $(RULES) copy-sc
	@make -f $(RULES) SCONS_TARGET=$(IMA_TARGET) do-scons
	@make -f $(RULES) ima-copyout

all-vib: clean ima-check
	@make -f $(RULES) driver-pre
	@make -f $(RULES) copy-sc
	@make -f $(RULES) SCONS_TARGET="$(DRIVER_TARGET) $(IMA_TARGET)" do-scons
	@make -f $(RULES) driver-copyout
	@make -f $(RULES) ima-copyout

driver-iso:
	@echo Using deprecated target '"driver-iso"'.
	@echo Please use '"driver-bundle"' instead.
	@exit 1

driver-bundle:
	@if [[ -f $(IMA_SC) ]]; then \
		make all-vib; \
		$(MKDIR) -p $(STAGE); \
		if [[ -z $${DDK_IMA_OVERRIDE} ]]; then \
			$(CP) $(CURRENT_DIR)/build/VIB/`$(IMACMD) | xargs $(BASENAME)` $(STAGE); \
		else \
			$(CP) $${DDK_IMA_OVERRIDE} $(STAGE); \
		fi; \
	else \
		make driver-vib; \
		$(MKDIR) -p $(STAGE); \
	fi;
	@if [[ -z $${DDK_DRIVER_OVERRIDE} ]]; then \
		$(CP) $(CURRENT_DIR)/build/VIB/`$(VIBCMD) | xargs $(BASENAME)` $(STAGE); \
	else \
		$(CP) $${DDK_DRIVER_OVERRIDE} $(STAGE); \
	fi;
	$(VIBPUBLISH) --group=$(BUNDLE)/metadata.zip \
		--create-offline-bundle=$(BUNDLE)/$(MODULE).zip \
		--target="embeddedEsx,$(TARGET_ESX)" \
		--bulletin=$(BULLETINXML) \
		--vendor=`$(VNDCMD)` \
		--vendor-code=`$(VNDCODECMD)` \
		--vib-dir=$(CURRENT_DIR)/build/VIB
	@echo
	@echo "Offline bundle $(MODULE).zip is available in directory $(BUNDLE)/"
	@echo

clean: 
	@$(RM) -rf $(CURRENT_DIR)/build
	@$(RM) -rf $(XMLPATH)/$(XML)
	@$(RM) -rf $(SCPATH)/$(DRIVER_SC)
	@$(RM) -rf $(IMASCPATH)/$(IMA_SC)
	@$(RM) -rf $(CURRENT_DIR)/$(LOG)
	@cd $(SRC); $(SCONS) PRODUCT=$(PRODUCT) \
           BUILDTYPE=$(BUILDTYPE) BUILD_NUMBER=$(BUILDNUMBER) \
           SKIP_BIG_BROTHER=1 clobber

ima-check:
	@if [[ ! -f $(IMA_SC) ]]; then \
		echo "No IMA scons file ($(IMA_SC))!"; \
		echo "Use another makefile target."; \
		exit 1; \
	fi

code-check:	   
	@if [ "$(TOCLEAN)" != "" ]; then \
		$(RM) -rf $(DRIVER_SRC)/$(DRIVER_DIR)/$(CCHECK); \
		$(MKDIR) -p $(DRIVER_SRC)/$(DRIVER_DIR)/$(CCHECK); \
		$(MKDIR) -p $(XMLPATH); \
		$(MKDIR) -p $(SCPATH); \
		$(CP) $(XML) $(XMLPATH); \
		$(CP) $(DRIVER_SC) $(SCPATH); \
		$(MKDIR) -p /opt/vmware/ddk/src/bora/build/scons/build/HEADERS/vmkapi-current-vmkdrivers/vmkernel64/$(BUILDTYPE); \
		$(CP) -r /opt/vmware/ddk/src/bora/vmkernel/include/vmkapi/* /opt/vmware/ddk/src/bora/build/scons/build/HEADERS/vmkapi-current-vmkdrivers/vmkernel64/$(BUILDTYPE)/; \
		cd $(SRC); $(SCONS) PRODUCT=$(PRODUCT) SKIP_BIG_BROTHER=1 BUILDTYPE=$(BUILDTYPE) $(CCTARGET); \
		cd $(SRC); for i in `ls $(DRIVER_SRC)/$(DRIVER_DIR)/$(CCHECK)/*.sh`; \
		do echo "Checking $$i"; . $$i 2>&1 | \
		$(TEE) -a $(DRIVER_SRC)/$(DRIVER_DIR)/$(CCHECK)/warnings.txt ; done; \
		if [ -d $(SCPATH) ]; then $(RM) -f $(SCPATH)/$(DRIVER_SC); fi; \
		echo "Results in $(DRIVER_SRC)/$(DRIVER_DIR)/$(CCHECK)/warnings.txt"; \
	else \
		echo "Driver source directory not found. Skipping code-check"; \
	fi


