# WRX board
#

# Use raw transport
export CONFIG_TRANSPORT_RAW = y

ENABLE_PMC   ?= y

ifeq ("$(ENABLE_PMC)", "y")
    EXTRA_CFLAGS   += -DBCM_PMC_EXIST
endif

ifeq ("$(SUBSYSTEM)", "embedded")
    TOOLCHAIN = armcc
    OS=threadx
	    
    # We use gcc for dependency generation in order to speed up the build process
    GCCVER ?= 4.8.1
    
    # Use raw transport
    # Should be moved go common host/embedded section when the host environment is ready
    COMPILE_ALL_IN_ONE_GO ?= n
    export COMPILE_ALL_IN_ONE_GO

    # Definition for enable Periodic  ARM DS-5 license model, up to 4X improvement for compilation time 
    # the output from the /tools/bin/get_lic_servers arm5-periodic is optimized for each site, the 
    # "38224@lic-tlva-001:38224@lic-blr-001:38224@lic-irva-350:38224@lic-irva-000" string is valide for HZ site
    export ARMLMD_LICENSE_FILE :=$(shell if [ -f /tools/bin/get_lic_servers ] ; then /tools/bin/get_lic_servers arm5-periodic ; \
else echo "38224@lic-tlva-001.broadcom.net:38224@lic-blr-001.broadcom.net:38224@lic-irva-350.broadcom.net:38224@lic-irva-000.broadcom.net"; fi)
    export ARMCC5_CCOPT        :=--sitelicense --licretry
    export ARMCC5_ASMOPT       :=--sitelicense --licretry
    export ARMCC5_LINKOPT      :=--sitelicense --licretry
    export ARMCC5_FROMELFOPT   :=--sitelicense --licretry
    export ARMCC5_AROPT        :=--sitelicense --licretry
   
    USE_UNCACHE_BW_MAP ?= n
    export USE_UNCACHE_BW_MAP 
    USE_UNCACHE_SR_NSR_COUNTERS ?= n
    export USE_UNCACHE_SR_NSR_COUNTERS

    ifeq ("$(SIMULATION)", "y")
        EXTRA_DEFINES += -DSIMULATION
    endif
	
	USE_SYM_TAB ?= y
	export USE_SYM_TAB
	
	ifeq ("$(USE_SYM_TAB)", "y")
		
		export SYMTAB_GEN_TOOLS = $(TOP_DIR)/scripts/bcmSymTlbGen.sh 
		
		ifeq ("$(SYMTAB_NO_DATA)", "y")
		    export SYMTAB_ND=-nd
	    endif
	
	    ifeq ("$(SYMTAB_NO_LDATA)", "y")
		   export SYMTAB_NLD=-nld
	    endif
	
	    ifeq ("$(SYMTAB_NO_LFANC)", "y")
		    export SYMTAB_NLF=-nlf
	    endif
		
		EXTRA_DEFINES += -DUSE_SYM_TAB	
		
		export DUMMY_SYMTAB = $(TOP_DIR)/embedded/sys/bsp/symtab.c
	endif
    
    ifeq ("$(ENABLE_TRACE)", "y")
        EXTRA_DEFINES += -DTX_ENABLE_EVENT_TRACE
        ifeq ("$(DEBUG_TRACE_INIT)", "y")
            EXTRA_DEFINES += -DDEBUG_TRACE_INIT
        endif
    endif
    	
    INT_CHECK    ?= y
    ifeq ("$(INT_CHECK)", "y")
        EXTRA_DEFINES += -DINTERRUPT_VALIDATION
    endif
else
    BOARD_DIR       ?= $(TOP_DIR)/../boards/cur/$(BOARD)
    KERNEL_BRCM_VER = 3.0.2-m1.01
    TOOLCHAIN_PATH  ?= /opt/toolchains/maple/toolchains_bin/mipscross/linux/bin
    CROSS_COMPILE   = $(TOOLCHAIN_PATH)/mips64-nlm-linux-
    
    KERNELDIR       = $(BOARD_DIR)/linux/$(KERNEL_BRCM_VER)/linux
    KERNEL_OUTDIR  ?= $(KERNELDIR)
    export KERNELDIR
    export KERNEL_OUTDIR


    # use Linux kernel
    export OS_KERNEL= linux
    # OS for user space 
    OS              = posix
    
    # Architecture definition   
    KERNEL_ARCH     = mips
    ARCH_FLAGS      += -EB -mabi=64
    
    export KERNEL_ARCH
    export ARCH_FLAGS
    
    export KERNEL_TAR_NAME  = wrx_linux-sdk.tar.bz2
    export LIBS_TAR_NAME    = libraries.tar.bz2
    
    # Rule tu build wrx kernel. The rule itself is defined in board.wrx.rules
    export BOARD_ENV_RULE   = wrx_linux_kernel 
    
endif


