
#****************************************************************************#
# Copyright 2014 QLogic Corporation                                          # 
# The contents of this file are subject to the terms of the                  #
# QLogic End User License (the "License").                                   # 
# You may not use this file except in compliance with the License.           #
#                                                                            # 
# You can obtain a copy of the License at                                    #
# http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/              #
# QLogic_End_User_Software_License.txt                                       #
# See the License for the specific language governing permissions            #
# and limitations under the License.                                         # 
#****************************************************************************#

VERSION_FILE = "src/version.h"
include Makefile.inc

LD = /usr/ccs/bin/ld

CTFC_I386  = /opt/onbld/bin/i386/ctfconvert
CTFM_I386  = /opt/onbld/bin/i386/ctfmerge
CTFC_SPARC = /opt/onbld/bin/sparc/ctfconvert
CTFM_SPARC = /opt/onbld/bin/sparc/ctfmerge

CTFC_FLAGS = -i
CTFM_FLAGS = -g -l bnx

DRV_FLAGS = -D_KERNEL \
            -DBNX_ENABLE_IOCTL \
            -D_USE_FRIENDLY_NAME \
            -DEXCLUDE_RSS_SUPPORT \
            -DEXCLUDE_KQE_SUPPORT \
            -DL2_ONLY \
            -DSOLARIS \
            -D_ANSI_C_ \
            -DLM_MAX_MC_TABLE_SIZE=256 \
            -D__${SOLARIS_VER} \
            -DBRCMVERSION="\"$(REL_BRCMVERSION)\""

DBG_DRV_FLAGS = -DDBG -DLOG_REG_ACCESS

INCLUDES = -I./src \
           -I./include \
           -I./common/include \
           -I./570x/common/include \
           -I./570x/driver/common/lmdev

CC               = /usr/bin/cc
CFLAGS           = -g -xO3 -v -Xa -xc99=%all -xspace -xdebugformat=stabs -errtags=yes -errwarn=%all -erroff=E_MACRO_REDEFINED -W0,-noglobal -W0,-xglobalstatic -xstrconst -xildoff
CFLAGS_32        = ${CFLAGS}
CFLAGS_64        = ${CFLAGS} -m64
CFLAGS_32_I386   = -DLM_PAGE_BITS=12 ${CFLAGS_32}
CFLAGS_64_I386   = -DLM_PAGE_BITS=12 ${CFLAGS_64} -xmodel=kernel -Wu,-save_args
CFLAGS_64_SPARC  = -DLM_PAGE_BITS=13 ${CFLAGS_64}
CFLAGS_DBG       = -DDEBUG ${DBG_DRV_FLAGS}
CFLAGS_REL       =
MDB_CFLAGS       = -D__SunOS_MDB -G
MDB_CFLAGS_I386  = ${MDB_CFLAGS} -Kpic
MDB_CFLAGS_SPARC = ${MDB_CFLAGS} -xcode=pic13
OBJDUMP          = /usr/bin/er_src -disasm all -1

ENDIAN_I386  = -DLITTLE_ENDIAN -DLITTLE_ENDIAN_HOST -D__LITTLE_ENDIAN
ENDIAN_SPARC = -DBIG_ENDIAN -DBIG_ENDIAN_HOST -D__BIG_ENDIAN

REL_CFLAGS_32_I386 = ${DRV_FLAGS} ${CFLAGS_32_I386} ${CFLAGS_REL} ${INCLUDES} ${ENDIAN_I386}
DBG_CFLAGS_32_I386 = ${DRV_FLAGS} ${CFLAGS_32_I386} ${CFLAGS_DBG} ${INCLUDES} ${ENDIAN_I386}

REL_CFLAGS_64_I386 = ${DRV_FLAGS} ${CFLAGS_64_I386} ${CFLAGS_REL} ${INCLUDES} ${ENDIAN_I386}
DBG_CFLAGS_64_I386 = ${DRV_FLAGS} ${CFLAGS_64_I386} ${CFLAGS_DBG} ${INCLUDES} ${ENDIAN_I386}

REL_CFLAGS_64_SPARC = ${DRV_FLAGS} ${CFLAGS_64_SPARC} ${CFLAGS_REL} ${INCLUDES} ${ENDIAN_SPARC}
DBG_CFLAGS_64_SPARC = ${DRV_FLAGS} ${CFLAGS_64_SPARC} ${CFLAGS_DBG} ${INCLUDES} ${ENDIAN_SPARC}

# Flags for LD plus GLDv3 module references
LDFLAGS     = -dy -Qn -B reduce -r -N drv/ip -N misc/mac
MDB_LDFLAGS = -dy -Qn -r

SRCFILES = src/bnxmod.c \
           src/bnxcfg.c \
           src/bnxdbg.c \
           src/bnxgldv3.c \
           src/bnxhwi.c \
           src/bnxint.c \
           src/bnxndd.c \
           src/bnxrcv.c \
           src/bnxsnd.c \
           src/bnxtmr.c \
           src/bnx_kstat.c \
           src/bnx_mm.c \
           src/crc.c \
           570x/driver/common/lmdev/hw_cpu.c \
           570x/driver/common/lmdev/hw_misc.c \
           570x/driver/common/lmdev/hw_nvram.c \
           570x/driver/common/lmdev/hw_phy.c \
           570x/driver/common/lmdev/hw_reset.c \
           570x/driver/common/lmdev/lm_main.c \
           570x/driver/common/lmdev/lm_recv.c \
           570x/driver/common/lmdev/lm_send.c

MDBFILES = src/bnxmdb.c

MAPFILE = src/bnx.map

# Release version 32-bit i386
REL_32_I386_DIR           = build_rel_32_i386-${SOLARIS_VER}
REL_32_I386_MAPFILE       = ${REL_32_I386_DIR}/bnx.map
REL_32_I386_DRV_OBJ_FILES = ${SRCFILES:%.c=${REL_32_I386_DIR}/%.o}
REL_32_I386_DRV_FILE      = ${REL_32_I386_DIR}/bnx32
REL_32_I386_MDB_OBJ_FILES = ${MDBFILES:%.c=${REL_32_I386_DIR}/mdb/%.o}
REL_32_I386_MDB_FILE      = ${REL_32_I386_DIR}/bnx_mdb32

# Debug version 32-bit i386
DBG_32_I386_DIR           = build_dbg_32_i386-${SOLARIS_VER}
DBG_32_I386_MAPFILE       = ${DBG_32_I386_DIR}/bnx.map
DBG_32_I386_DRV_OBJ_FILES = ${SRCFILES:%.c=${DBG_32_I386_DIR}/%.o}
DBG_32_I386_DRV_FILE      = ${DBG_32_I386_DIR}/bnx32
DBG_32_I386_MDB_OBJ_FILES = ${MDBFILES:%.c=${DBG_32_I386_DIR}/mdb/%.o}
DBG_32_I386_MDB_FILE      = ${DBG_32_I386_DIR}/bnx_mdb32

# Release version 64-bit i386
REL_64_I386_DIR           = build_rel_64_i386-${SOLARIS_VER}
REL_64_I386_MAPFILE       = ${REL_64_I386_DIR}/bnx.map
REL_64_I386_DRV_OBJ_FILES = ${SRCFILES:%.c=${REL_64_I386_DIR}/%.o}
REL_64_I386_DRV_FILE      = ${REL_64_I386_DIR}/bnx64
REL_64_I386_MDB_OBJ_FILES = ${MDBFILES:%.c=${REL_64_I386_DIR}/mdb/%.o}
REL_64_I386_MDB_FILE      = ${REL_64_I386_DIR}/bnx_mdb64

# Debug version 64-bit i386
DBG_64_I386_DIR           = build_dbg_64_i386-${SOLARIS_VER}
DBG_64_I386_MAPFILE       = ${DBG_64_I386_DIR}/bnx.map
DBG_64_I386_DRV_OBJ_FILES = ${SRCFILES:%.c=${DBG_64_I386_DIR}/%.o}
DBG_64_I386_DRV_FILE      = ${DBG_64_I386_DIR}/bnx64
DBG_64_I386_MDB_OBJ_FILES = ${MDBFILES:%.c=${DBG_64_I386_DIR}/mdb/%.o}
DBG_64_I386_MDB_FILE      = ${DBG_64_I386_DIR}/bnx_mdb64

# Release version 64-bit Sparc
REL_64_SPARC_DIR           = build_rel_64_sparc-${SOLARIS_VER}
REL_64_SPARC_MAPFILE       = ${REL_64_SPARC_DIR}/bnx.map
REL_64_SPARC_DRV_OBJ_FILES = ${SRCFILES:%.c=${REL_64_SPARC_DIR}/%.o}
REL_64_SPARC_DRV_FILE      = ${REL_64_SPARC_DIR}/bnx64
REL_64_SPARC_MDB_OBJ_FILES = ${MDBFILES:%.c=${REL_64_SPARC_DIR}/mdb/%.o}
REL_64_SPARC_MDB_FILE      = ${REL_64_SPARC_DIR}/bnx_mdb64

# Debug version 64-bit Sparc
DBG_64_SPARC_DIR           = build_dbg_64_sparc-${SOLARIS_VER}
DBG_64_SPARC_MAPFILE       = ${DBG_64_SPARC_DIR}/bnx.map
DBG_64_SPARC_DRV_OBJ_FILES = ${SRCFILES:%.c=${DBG_64_SPARC_DIR}/%.o}
DBG_64_SPARC_DRV_FILE      = ${DBG_64_SPARC_DIR}/bnx64
DBG_64_SPARC_MDB_OBJ_FILES = ${MDBFILES:%.c=${DBG_64_SPARC_DIR}/mdb/%.o}
DBG_64_SPARC_MDB_FILE      = ${DBG_64_SPARC_DIR}/bnx_mdb64

TARGETS_SRC = \
    if test "${OSARCH}" = "i386"; then \
        if test "${OSREL}" = "5.11"; then \
            echo "${REL_64_I386_DRV_FILE} ${REL_64_I386_MDB_FILE} ${DBG_64_I386_DRV_FILE} ${DBG_64_I386_MDB_FILE}"; \
		else \
            echo "${REL_32_I386_DRV_FILE} ${REL_32_I386_MDB_FILE} ${DBG_32_I386_DRV_FILE} ${DBG_32_I386_MDB_FILE} ${REL_64_I386_DRV_FILE} ${REL_64_I386_MDB_FILE} ${DBG_64_I386_DRV_FILE} ${DBG_64_I386_MDB_FILE}"; \
		fi \
    elif test "${OSARCH}" = "sparc"; then \
        echo "${REL_64_SPARC_DRV_FILE} ${REL_64_SPARC_MDB_FILE} ${DBG_64_SPARC_DRV_FILE} ${DBG_64_SPARC_MDB_FILE}"; \
    else \
        echo "unknown"; \
    fi
TARGETS = $(TARGETS_SRC:sh)


all: ${TARGETS}
	cd pkg; $(MAKE)

unknown:
	@echo "ERROR: Unknown architecture - ${OSARCH}"



${REL_32_I386_DIR}/%.o: %.c
	@mkdir -p ${REL_32_I386_DIR}/`dirname $<`
	${CC} ${REL_CFLAGS_32_I386} -c $< -o $@
	${CTFC_I386} ${CTFC_FLAGS} ${CTFM_FLAGS} $@

${REL_32_I386_MAPFILE}: ${MAPFILE}
	sed -e "s/^bnx.*/bnx-$(REL_BRCMVERSION)/" ${MAPFILE} > $@

${REL_32_I386_DRV_FILE}: ${REL_32_I386_DRV_OBJ_FILES} ${REL_32_I386_MAPFILE}
	${LD} -M ${REL_32_I386_MAPFILE} ${LDFLAGS} -o $@ ${REL_32_I386_DRV_OBJ_FILES}
	${OBJDUMP} $@ > $@.asm
	${CTFM_I386} ${CTFM_FLAGS} -o $@ ${REL_32_I386_DRV_OBJ_FILES}

${REL_32_I386_DIR}/mdb/%.o: %.c
	@mkdir -p ${REL_32_I386_DIR}/mdb/`dirname $<`
	${CC} ${REL_CFLAGS_32_I386} ${MDB_CFLAGS_I386} -c $< -o $@

${REL_32_I386_MDB_FILE}: ${REL_32_I386_MDB_OBJ_FILES}
	${LD} ${MDB_LDFLAGS} -o $@ ${REL_32_I386_MDB_OBJ_FILES}



${DBG_32_I386_DIR}/%.o: %.c
	@mkdir -p ${DBG_32_I386_DIR}/`dirname $<`
	${CC} ${DBG_CFLAGS_32_I386} -c $< -o $@
	${CTFC_I386} ${CTFC_FLAGS} ${CTFM_FLAGS} $@

${DBG_32_I386_MAPFILE}: ${MAPFILE}
	sed -e "s/^bnx.*/bnx-$(DBG_BRCMVERSION)/" ${MAPFILE} > $@

${DBG_32_I386_DRV_FILE}: ${DBG_32_I386_DRV_OBJ_FILES} ${DBG_32_I386_MAPFILE}
	${LD} -M ${DBG_32_I386_MAPFILE} ${LDFLAGS} -o $@ ${DBG_32_I386_DRV_OBJ_FILES}
	${OBJDUMP} $@ > $@.asm
	${CTFM_I386} ${CTFM_FLAGS} -o $@ ${DBG_32_I386_DRV_OBJ_FILES}

${DBG_32_I386_DIR}/mdb/%.o: %.c
	@mkdir -p ${DBG_32_I386_DIR}/mdb/`dirname $<`
	${CC} ${DBG_CFLAGS_32_I386} ${MDB_CFLAGS_I386} -c $< -o $@

${DBG_32_I386_MDB_FILE}: ${DBG_32_I386_MDB_OBJ_FILES}
	${LD} ${MDB_LDFLAGS} -o $@ ${DBG_32_I386_MDB_OBJ_FILES}



${REL_64_I386_DIR}/%.o: %.c
	@mkdir -p ${REL_64_I386_DIR}/`dirname $<`
	${CC} ${REL_CFLAGS_64_I386} -c $< -o $@
	${CTFC_I386} ${CTFC_FLAGS} ${CTFM_FLAGS} $@

${REL_64_I386_MAPFILE}: ${MAPFILE}
	sed -e "s/^bnx.*/bnx-$(REL_BRCMVERSION)/" ${MAPFILE} > $@

${REL_64_I386_DRV_FILE}: ${REL_64_I386_DRV_OBJ_FILES} ${REL_64_I386_MAPFILE}
	${LD} -M ${REL_64_I386_MAPFILE} ${LDFLAGS} -o $@ ${REL_64_I386_DRV_OBJ_FILES}
	${OBJDUMP} $@ > $@.asm
	${CTFM_I386} ${CTFM_FLAGS} -o $@ ${REL_64_I386_DRV_OBJ_FILES}

${REL_64_I386_DIR}/mdb/%.o: %.c
	@mkdir -p ${REL_64_I386_DIR}/mdb/`dirname $<`
	${CC} ${REL_CFLAGS_64_I386} ${MDB_CFLAGS_I386} -c $< -o $@

${REL_64_I386_MDB_FILE}: ${REL_64_I386_MDB_OBJ_FILES}
	${LD} ${MDB_LDFLAGS} -o $@ ${REL_64_I386_MDB_OBJ_FILES}



${DBG_64_I386_DIR}/%.o: %.c
	@mkdir -p ${DBG_64_I386_DIR}/`dirname $<`
	${CC} ${DBG_CFLAGS_64_I386} -c $< -o $@
	${CTFC_I386} ${CTFC_FLAGS} ${CTFM_FLAGS} $@

${DBG_64_I386_MAPFILE}: ${MAPFILE}
	sed -e "s/^bnx.*/bnx-$(DBG_BRCMVERSION)/" ${MAPFILE} > $@

${DBG_64_I386_DRV_FILE}: ${DBG_64_I386_DRV_OBJ_FILES} ${DBG_64_I386_MAPFILE}
	${LD} -M ${DBG_64_I386_MAPFILE} ${LDFLAGS} -o $@ ${DBG_64_I386_DRV_OBJ_FILES}
	${OBJDUMP} $@ > $@.asm
	${CTFM_I386} ${CTFM_FLAGS} -o $@ ${DBG_64_I386_DRV_OBJ_FILES}

${DBG_64_I386_DIR}/mdb/%.o: %.c
	@mkdir -p ${DBG_64_I386_DIR}/mdb/`dirname $<`
	${CC} ${DBG_CFLAGS_64_I386} ${MDB_CFLAGS_I386} -c $< -o $@

${DBG_64_I386_MDB_FILE}: ${DBG_64_I386_MDB_OBJ_FILES}
	${LD} ${MDB_LDFLAGS} -o $@ ${DBG_64_I386_MDB_OBJ_FILES}



${REL_64_SPARC_DIR}/%.o: %.c
	@mkdir -p ${REL_64_SPARC_DIR}/`dirname $<`
	${CC} ${REL_CFLAGS_64_SPARC} -c $< -o $@
	${CTFC_SPARC} ${CTFC_FLAGS} ${CTFM_FLAGS} $@

${REL_64_SPARC_MAPFILE}: ${MAPFILE}
	sed -e "s/^bnx.*/bnx-$(REL_BRCMVERSION)/" ${MAPFILE} > $@

${REL_64_SPARC_DRV_FILE}: ${REL_64_SPARC_DRV_OBJ_FILES} ${REL_64_SPARC_MAPFILE}
	${LD} -M ${REL_64_SPARC_MAPFILE} ${LDFLAGS} -o $@ ${REL_64_SPARC_DRV_OBJ_FILES}
	${OBJDUMP} $@ > $@.asm
	# for some reason ctfmerge has out of memory errors on S10
	if test "${OSREL}" != "5.10"; then \
	    ${CTFM_SPARC} ${CTFM_FLAGS} -o $@ ${REL_64_SPARC_DRV_OBJ_FILES}; \
	fi

${REL_64_SPARC_DIR}/mdb/%.o: %.c
	@mkdir -p ${REL_64_SPARC_DIR}/mdb/`dirname $<`
	${CC} ${REL_CFLAGS_64_SPARC} ${MDB_CFLAGS_SPARC} -c $< -o $@

${REL_64_SPARC_MDB_FILE}: ${REL_64_SPARC_MDB_OBJ_FILES}
	${LD} ${MDB_LDFLAGS} -o $@ ${REL_64_SPARC_MDB_OBJ_FILES}



${DBG_64_SPARC_DIR}/%.o: %.c
	@mkdir -p ${DBG_64_SPARC_DIR}/`dirname $<`
	${CC} ${DBG_CFLAGS_64_SPARC} -c $< -o $@
	${CTFC_SPARC} ${CTFC_FLAGS} ${CTFM_FLAGS} $@

${DBG_64_SPARC_MAPFILE}: ${MAPFILE}
	sed -e "s/^bnx.*/bnx-$(DBG_BRCMVERSION)/" ${MAPFILE} > $@

${DBG_64_SPARC_DRV_FILE}: ${DBG_64_SPARC_DRV_OBJ_FILES} ${DBG_64_SPARC_MAPFILE}
	${LD} -M ${DBG_64_SPARC_MAPFILE} ${LDFLAGS} -o $@ ${DBG_64_SPARC_DRV_OBJ_FILES}
	${OBJDUMP} $@ > $@.asm
	# for some reason ctfmerge has out of memory errors on S10
	if test "${OSREL}" != "5.10"; then \
	    ${CTFM_SPARC} ${CTFM_FLAGS} -o $@ ${DBG_64_SPARC_DRV_OBJ_FILES}; \
	fi

${DBG_64_SPARC_DIR}/mdb/%.o: %.c
	@mkdir -p ${DBG_64_SPARC_DIR}/mdb/`dirname $<`
	${CC} ${DBG_CFLAGS_64_SPARC} ${MDB_CFLAGS_SPARC} -c $< -o $@

${DBG_64_SPARC_MDB_FILE}: ${DBG_64_SPARC_MDB_OBJ_FILES}
	${LD} ${MDB_LDFLAGS} -o $@ ${DBG_64_SPARC_MDB_OBJ_FILES}



clean:
	-rm -rf build_*
	cd pkg; $(MAKE) clean

