# Copyright 2014-2021 VMware, Inc.  All rights reserved.
# -- VMware Confidential

#-------------------------------------------------------------------------------
# Makefile
#
#    Provides a wrapper to compile drivers in the VMKAPI DDK devkit.
#
#    This is a generic Makefile and no changes are required to compile
#    drivers provided that a single .sc file exists in the current directory.
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Tools
#-------------------------------------------------------------------------------

CAYMAN_EXPAT_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_expat-97f85287a444341e376eaad172c297e818b31723-toolchain)
export GOBUILD_CAYMAN_EXPAT_ROOT = $(CAYMAN_EXPAT_DIR)
CAYMAN_LLVM_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_llvm-37ee4c473fb7819c4e64773e0b7f44e4190eef1c-toolchain)
export GOBUILD_CAYMAN_LLVM_ROOT = $(CAYMAN_LLVM_DIR)
CAYMAN_ESX_PYCPARSER_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_esx_pycparser-fb3e25985be6b1a49e30b8cac6725cd5e1a660a7-toolchain)
export GOBUILD_CAYMAN_ESX_PYCPARSER_ROOT = $(CAYMAN_ESX_PYCPARSER_DIR)
CAYMAN_ESX_TOOLCHAIN_GCC9_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_esx_toolchain_gcc9-8df1c92cff5e852310cba6663a42437344e19566-toolchain)
export GOBUILD_CAYMAN_ESX_TOOLCHAIN_GCC9_ROOT = $(CAYMAN_ESX_TOOLCHAIN_GCC9_DIR)
CAYMAN_ESX_GDB_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_esx_gdb-4f3198c9bdc89a077a77b4819b931aa88eebf038-toolchain)
export GOBUILD_CAYMAN_ESX_GDB_ROOT = $(CAYMAN_ESX_GDB_DIR)
CAYMAN_PYTHON_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_python-f313ccb4823ee99650006a6f917ab23a722f2711-toolchain)
export GOBUILD_CAYMAN_PYTHON_ROOT = $(CAYMAN_PYTHON_DIR)
CAYMAN_ESX_NCURSES_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_esx_ncurses-aa9bdb49f6fb1d457342756e6152b3cc8c675288-toolchain)
export GOBUILD_CAYMAN_ESX_NCURSES_ROOT = $(CAYMAN_ESX_NCURSES_DIR)
CAYMAN_PYTHON3_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_python3-06fccd3dfada667b34aeadbae3d76109b37685c9-toolchain)
export GOBUILD_CAYMAN_PYTHON3_ROOT = $(CAYMAN_PYTHON3_DIR)
CAYMAN_URLLIB3_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_urllib3-2e524d8128a4de5b0afa3d563137dbb5bdef6653-toolchain)
export GOBUILD_CAYMAN_URLLIB3_ROOT = $(CAYMAN_URLLIB3_DIR)
CAYMAN_PYTHON_SCONS_BOOTSTRAP_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_python_scons_bootstrap-de6c84ca5d2d6c9e039699096b4943379837ea13-toolchain)
export GOBUILD_CAYMAN_PYTHON_SCONS_BOOTSTRAP_ROOT = $(CAYMAN_PYTHON_SCONS_BOOTSTRAP_DIR)
CAYMAN_SCONS_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_scons-8be8a32d0a0d9816925b2abef6a293fc8a6ddb99-toolchain)
export GOBUILD_CAYMAN_SCONS_ROOT = $(CAYMAN_SCONS_DIR)
CAYMAN_ESX_GLIBC_2_17_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_esx_glibc_2_17-0efc7d3d4c58b76e73bacfe158a61c563d6e080e-toolchain)
export GOBUILD_CAYMAN_ESX_GLIBC_2_17_ROOT = $(CAYMAN_ESX_GLIBC_2_17_DIR)
CAYMAN_LIBFFI_SCONS_BOOTSTRAP_DIR = $(shell /bin/rpm -q --qf "%{instprefixes}\n" vmware-esx-cayman_libffi_scons_bootstrap-58e4193126f37a26fa264d22caba2eec4b7ebc59-toolchain)
export GOBUILD_CAYMAN_LIBFFI_SCONS_BOOTSTRAP_ROOT = $(CAYMAN_LIBFFI_SCONS_BOOTSTRAP_DIR)
VMW_COMPONENTS = cayman_expat cayman_llvm cayman_esx_pycparser cayman_esx_toolchain_gcc9 cayman_esx_gdb cayman_python cayman_esx_ncurses cayman_python3 cayman_urllib3 cayman_python_scons_bootstrap cayman_scons cayman_esx_glibc_2_17 cayman_libffi_scons_bootstrap
VMW_COMPONENT_DIRS = $(CAYMAN_EXPAT_DIR) $(CAYMAN_LLVM_DIR) $(CAYMAN_ESX_PYCPARSER_DIR) $(CAYMAN_ESX_TOOLCHAIN_GCC9_DIR) $(CAYMAN_ESX_GDB_DIR) $(CAYMAN_PYTHON_DIR) $(CAYMAN_ESX_NCURSES_DIR) $(CAYMAN_PYTHON3_DIR) $(CAYMAN_URLLIB3_DIR) $(CAYMAN_PYTHON_SCONS_BOOTSTRAP_DIR) $(CAYMAN_SCONS_DIR) $(CAYMAN_ESX_GLIBC_2_17_DIR) $(CAYMAN_LIBFFI_SCONS_BOOTSTRAP_DIR)

AWK = /build/toolchain/lin64/gawk-3.1.5/bin/awk
BASH = /build/toolchain/lin32/bash-3.2/bin/bash
CP = /build/toolchain/lin64/coreutils-8.6/bin/cp
ECHO = /build/toolchain/lin64/coreutils-8.6/bin/echo
FIND = /build/toolchain/lin64/findutils-4.2.27/bin/find
GREP = /build/toolchain/lin64/grep-2.5.1a/bin/grep
GZIP = /build/toolchain/lin64/gzip-1.5/bin/gzip
MAKE = /build/toolchain/lin64/make-3.81/bin/make
MKDIR = /build/toolchain/lin64/coreutils-8.6/bin/mkdir
MV = /build/toolchain/lin64/coreutils-8.6/bin/mv
PERL = /build/toolchain/lin32/perl-5.8.8/bin/perl
RM = /build/toolchain/lin64/coreutils-8.6/bin/rm
SED = /build/toolchain/lin64/sed-4.1.5/bin/sed
TR = /build/toolchain/lin64/coreutils-8.6/bin/tr

#-------------------------------------------------------------------------------
# Parameters to the scons command
#-------------------------------------------------------------------------------
PRODUCT      = nativeddk
BUILDTYPE    = release
BUILD_NUMBER = 20613240
ESX_IO       = 0

VMKAPI_DIR   = $(shell /bin/rpm -q --qf '%{INSTPREFIXES}\n' vmware-esx-nativeddk-devtools-8.0.0-1.0.20613240)
SRC          = $(VMKAPI_DIR)/src
FIND_RPM     = $(VMKAPI_DIR)/tools/find_rpm_install_dir.sh
VIRTUAL_GOBUILD = $(VMKAPI_DIR)/tools/gobuild/nativeddk.cache
EPKDIR      := $(shell $(FIND_RPM) vmware-esx-packaging-kit)
ifeq ($(strip $(EPKDIR)),)
    $(error Unable to locate ESX Packaging Kit installation directory)
endif

SCONS        = cd $(SRC); $(SRC)/scons/bin/scons
FULL_PWD     := $(shell pwd)
SC           := $(shell echo *.sc | $(AWK) '{print $$1}')
MANIFEST     = $(FULL_PWD)/$(SC)
BUILD        = build
SCONS_BUILD  = .build
TARGET       = $(FULL_PWD)/$(BUILD)
SCONS_TARGET = $(FULL_PWD)/$(SCONS_BUILD)
VERSION     = $(shell cat smartpqi.sc | $(AWK) '/driverVersion = / {print$$3}' | $(SED) 's/"//g'| $(SED) 's/,//g')
VENDOR      = Microchip

# Map VIB acceptance level to canonical default signing-key file base name
ACCEPT_LEVEL = $(shell grep acceptance-level $(MANIFEST))
ifneq ($(findstring accepted,$(ACCEPT_LEVEL)),)
    VMW_KC_NAME = accepted
else
ifneq ($(findstring partner,$(ACCEPT_LEVEL)),)
    VMW_KC_NAME = vmpartner
else
ifneq ($(findstring certified,$(ACCEPT_LEVEL)),)
    VMW_KC_NAME = vmware
else
ifeq ($(findstring community,$(ACCEPT_LEVEL)),)
    $(error invalid acceptance level $(ACCEPT_LEVEL))
endif
endif
endif
endif
ifneq ($(VMW_KC_NAME),)
    KEYPATH?=$(EPKDIR)/testcerts/$(VMW_KC_NAME).key
    CERTPATH?=$(EPKDIR)/testcerts/$(VMW_KC_NAME).cert
endif

all vib:
	@$(SCONS) native-driver-modules native-driver-vibs native-driver-bundle \
	       RELEASE_PACKAGES_DIR=$(TARGET) \
	       TOOLKIT_MANIFEST=$(MANIFEST) \
	       PRODUCT=$(PRODUCT) \
	       BUILDTYPE=$(BUILDTYPE) \
	       BUILD_NUMBER=$(BUILD_NUMBER) \
	       ESX_IO=$(ESX_IO) \
	       ESX_SIGN_BINARIES=0 \
	       EPKPATH=$(EPKDIR) \
	       BUILDROOT=$(SCONS_TARGET) \
	       VIRTUAL_GOBUILD=$(VIRTUAL_GOBUILD) \
               KEYPATH=$(KEYPATH) \
               CERTPATH=$(CERTPATH)
	cd $(BUILD)/component;$(MV) MIS*.zip $(VENDOR)-smartpqi_$(VERSION)-1OEM.800.1.0.20613240.zip

clean:
	@echo Cleaning out build directories ...
	@$(RM) -rf $(TARGET) $(SCONS_TARGET)
	@echo Done.
