
#****************************************************************************#
# The information contained in this file is confidential and proprietary to  #
# Broadcom Corporation.  No part of this file may be reproduced or           #
# distributed, in any form or by any means for any purpose, without the      #
# express written permission of Broadcom Corporation.                        #
#                                                                            #
# (c) COPYRIGHT 2010-2011 Broadcom Corporation, ALL RIGHTS RESERVED.         #
#****************************************************************************#

include Makefile.inc
include Makefile.os

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

DMAKE_OUTPUT_MODE=TXT2
DMAKE_ADJUST_MAX_JOBS=YES
DMAKE_MAX_JOBS=8

DRV_FLAGS = -D_KERNEL \
            -D__${SOLARIS_VER} \
            -DBRCMVERSION="\"$(REL_BRCMVERSION)\""

INCLUDES = -I./src

# SunStudio CC
CC               = /opt/SUNWspro/bin/cc
CFLAGS           = -g -xO3 -v -Xa -xc99=%all -xspace -xdebugformat=stabs -errtags=yes -errwarn=%all -W0,-noglobal -W0,-xglobalstatic -xstrconst -xildoff
CFLAGS_32        = ${CFLAGS}
CFLAGS_64        = ${CFLAGS} -m64
CFLAGS_32_I386   = ${CFLAGS_32}
CFLAGS_64_I386   = ${CFLAGS_64} -xmodel=kernel -Wu,-save_args
CFLAGS_64_SPARC  = ${CFLAGS_64}
CFLAGS_DBG       = -DDEBUG
CFLAGS_REL       =
OBJDUMP          = /opt/SUNWspro/bin/er_src -disasm all -1

ENDIAN_I386  = -D_LITTLE_ENDIAN
ENDIAN_SPARC = -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

SRCFILES = src/bge_atomic.c \
           src/bge_chip2.c \
           src/bge_kstats.c \
           src/bge_log.c \
           src/bge_main2.c \
           src/bge_mii_5906.c \
           src/bge_mii.c \
           src/bge_ndd.c \
           src/bge_recv2.c \
           src/bge_send.c

# Release version 32-bit i386
REL_32_I386_DIR        = build_rel_32_i386-${SOLARIS_VER}
REL_32_I386_MAPFILE    = ${REL_32_I386_DIR}/bge.map
REL_32_I386_OBJ_FILES  = ${SRCFILES:%.c=${REL_32_I386_DIR}/%.o}
REL_32_I386_DRV_FILE   = ${REL_32_I386_DIR}/bge32

# Debug version 32-bit i386
DBG_32_I386_DIR        = build_dbg_32_i386-${SOLARIS_VER}
DBG_32_I386_MAPFILE    = ${DBG_32_I386_DIR}/bge.map
DBG_32_I386_OBJ_FILES  = ${SRCFILES:%.c=${DBG_32_I386_DIR}/%.o}
DBG_32_I386_DRV_FILE   = ${DBG_32_I386_DIR}/bge32

# Release version 64-bit i386
REL_64_I386_DIR        = build_rel_64_i386-${SOLARIS_VER}
REL_64_I386_MAPFILE    = ${REL_64_I386_DIR}/bge.map
REL_64_I386_OBJ_FILES  = ${SRCFILES:%.c=${REL_64_I386_DIR}/%.o}
REL_64_I386_DRV_FILE   = ${REL_64_I386_DIR}/bge64

# Debug version 64-bit i386
DBG_64_I386_DIR        = build_dbg_64_i386-${SOLARIS_VER}
DBG_64_I386_MAPFILE    = ${DBG_64_I386_DIR}/bge.map
DBG_64_I386_OBJ_FILES  = ${SRCFILES:%.c=${DBG_64_I386_DIR}/%.o}
DBG_64_I386_DRV_FILE   = ${DBG_64_I386_DIR}/bge64

# Release version 64-bit Sparc
REL_64_SPARC_DIR        = build_rel_64_sparc-${SOLARIS_VER}
REL_64_SPARC_MAPFILE    = ${REL_64_SPARC_DIR}/bge.map
REL_64_SPARC_OBJ_FILES  = ${SRCFILES:%.c=${REL_64_SPARC_DIR}/%.o}
REL_64_SPARC_DRV_FILE   = ${REL_64_SPARC_DIR}/bge64

# Debug version 64-bit Sparc
DBG_64_SPARC_DIR        = build_dbg_64_sparc-${SOLARIS_VER}
DBG_64_SPARC_MAPFILE    = ${DBG_64_SPARC_DIR}/bge.map
DBG_64_SPARC_OBJ_FILES  = ${SRCFILES:%.c=${DBG_64_SPARC_DIR}/%.o}
DBG_64_SPARC_DRV_FILE   = ${DBG_64_SPARC_DIR}/bge64

TARGETS_SRC = \
    if test "${OSARCH}" = "i386"; then \
        echo "${REL_32_I386_DRV_FILE} ${DBG_32_I386_DRV_FILE} ${REL_64_I386_DRV_FILE} ${DBG_64_I386_DRV_FILE}"; \
    elif test "${OSARCH}" = "sparc"; then \
        echo "${REL_64_SPARC_DRV_FILE} ${DBG_64_SPARC_DRV_FILE}"; \
    else \
        echo "unknown"; \
    fi
TARGETS = $(TARGETS_SRC:sh)


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

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} -i -l bge $@

${REL_32_I386_MAPFILE}: src/bge.map
	sed -e "s/^bge.*/bge-$(REL_BRCMVERSION)/" src/bge.map > $@

${REL_32_I386_DRV_FILE}: ${REL_32_I386_OBJ_FILES} ${REL_32_I386_MAPFILE}
	${LD} -M ${REL_32_I386_MAPFILE} ${LDFLAGS} -o $@ ${REL_32_I386_OBJ_FILES}
	#${OBJDUMP} $@ > $@.asm
	${CTFM_I386} -l bge -o $@ ${REL_32_I386_OBJ_FILES}



${DBG_32_I386_DIR}/%.o: %.c
	@mkdir -p ${DBG_32_I386_DIR}/`dirname $<`
	${CC} ${DBG_CFLAGS_32_I386} -c $< -o $@
	if test `dirname $<` != "mdb"; then ${CTFC_I386} -i -l bge $@; fi

${DBG_32_I386_MAPFILE}: src/bge.map
	sed -e "s/^bge.*/bge-$(DBG_BRCMVERSION)/" src/bge.map > $@

${DBG_32_I386_DRV_FILE}: ${DBG_32_I386_OBJ_FILES} ${DBG_32_I386_MAPFILE}
	${LD} -M ${DBG_32_I386_MAPFILE} ${LDFLAGS} -o $@ ${DBG_32_I386_OBJ_FILES}
	#${OBJDUMP} $@ > $@.asm
	${CTFM_I386} -l bge -o $@ ${DBG_32_I386_OBJ_FILES}



${REL_64_I386_DIR}/%.o: %.c
	@mkdir -p ${REL_64_I386_DIR}/`dirname $<`
	${CC} ${REL_CFLAGS_64_I386} -c $< -o $@
	if test `dirname $<` != "mdb"; then ${CTFC_I386} -i -l bge $@; fi

${REL_64_I386_MAPFILE}: src/bge.map
	sed -e "s/^bge.*/bge-$(REL_BRCMVERSION)/" src/bge.map > $@

${REL_64_I386_DRV_FILE}: ${REL_64_I386_OBJ_FILES} ${REL_64_I386_MAPFILE}
	${LD} -M ${REL_64_I386_MAPFILE} ${LDFLAGS} -o $@ ${REL_64_I386_OBJ_FILES}
	#${OBJDUMP} $@ > $@.asm
	${CTFM_I386} -l bge -o $@ ${REL_64_I386_OBJ_FILES}



${DBG_64_I386_DIR}/%.o: %.c
	@mkdir -p ${DBG_64_I386_DIR}/`dirname $<`
	${CC} ${DBG_CFLAGS_64_I386} -c $< -o $@
	if test `dirname $<` != "mdb"; then ${CTFC_I386} -i -l bge $@; fi

${DBG_64_I386_MAPFILE}: src/bge.map
	sed -e "s/^bge.*/bge-$(DBG_BRCMVERSION)/" src/bge.map > $@

${DBG_64_I386_DRV_FILE}: ${DBG_64_I386_OBJ_FILES} ${DBG_64_I386_MAPFILE}
	${LD} -M ${DBG_64_I386_MAPFILE} ${LDFLAGS} -o $@ ${DBG_64_I386_OBJ_FILES}
	#${OBJDUMP} $@ > $@.asm
	${CTFM_I386} -l bge -o $@ ${DBG_64_I386_OBJ_FILES}



${REL_64_SPARC_DIR}/%.o: %.c
	@mkdir -p ${REL_64_SPARC_DIR}/`dirname $<`
	${CC} ${REL_CFLAGS_64_SPARC} -c $< -o $@
	if test `dirname $<` != "mdb"; then ${CTFC_SPARC} -i -l bge $@; fi

${REL_64_SPARC_MAPFILE}: src/bge.map
	sed -e "s/^bge.*/bge-$(REL_BRCMVERSION)/" src/bge.map > $@

${REL_64_SPARC_DRV_FILE}: ${REL_64_SPARC_OBJ_FILES} ${REL_64_SPARC_MAPFILE}
	${LD} -M ${REL_64_SPARC_MAPFILE} ${LDFLAGS} -o $@ ${REL_64_SPARC_OBJ_FILES}
	#${OBJDUMP} $@ > $@.asm
	${CTFM_SPARC} -l bge -o $@ ${REL_64_SPARC_OBJ_FILES}


${DBG_64_SPARC_DIR}/%.o: %.c
	@mkdir -p ${DBG_64_SPARC_DIR}/`dirname $<`
	${CC} ${DBG_CFLAGS_64_SPARC} -c $< -o $@
	if test `dirname $<` != "mdb"; then ${CTFC_SPARC} -i -l bge $@; fi

${DBG_64_SPARC_MAPFILE}: src/bge.map
	sed -e "s/^bge.*/bge-$(DBG_BRCMVERSION)/" src/bge.map > $@

${DBG_64_SPARC_DRV_FILE}: ${DBG_64_SPARC_OBJ_FILES} ${DBG_64_SPARC_MAPFILE}
	${LD} -M ${DBG_64_SPARC_MAPFILE} ${LDFLAGS} -o $@ ${DBG_64_SPARC_OBJ_FILES}
	#${OBJDUMP} $@ > $@.asm
	${CTFM_SPARC} -l bge -o $@ ${DBG_64_SPARC_OBJ_FILES}


pkg: FORCE
	cd pkg; $(MAKE)

clean:
	-rm -rf build_*
	-rm -f  .make.state
	cd pkg; $(MAKE) clean

FORCE:

#.KEEP_STATE:

