

#
#  Top level Makerules
#  it uses Makerules.env for build env vars and optional branding.inc
#
#  Copyright (C) 2017, Broadcom. All Rights Reserved.
#  
#  Permission to use, copy, modify, and/or distribute this software for any
#  purpose with or without fee is hereby granted, provided that the above
#  copyright notice and this permission notice appear in all copies.
#  
#  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
#  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
#  SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
#  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
#  OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
#  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
#
#  <<Broadcom-WL-IPTag/Open:>>
#
# $Id: Makerules 646625 2016-06-30 02:57:52Z $

# This is the TOP level makefile rules, which is used by many makefiles.
# Please be cautious on changes, especially compatibilities.
#   e.g. new gcc compile option should be protected with version check 
#        or "check_gcc" trick

# first rule (default)
all:

APPLY_PREFIX ?= true

WLAN_ComponentsInUse ?= bcmwifi
include $(dir $(lastword $(MAKEFILE_LIST)))makefiles/WLAN_Common.mk

# Set up the build environment variables
include ${SRCBASE}/Makerules.env

ifeq ($(HOSTOS), Windows_NT)

# force use of bash, otherwise you will get the broken sh.exe.
SHELL=bash

endif

#
# Setup make variables depending on target
#

ifeq ($(TARGETOS), unix)

	# The environment for native unix builds

	EXEEXT	= 
	OBJEXT	= .o
	GCINCS	= $(strip -I$(SRCBASE)/include $(WLAN_ComponentIncPath)) $(WLAN_StdIncPathA)
	GCDEFS	= -DTARGETENV_$(TARGETENV) -DTARGETOS_$(TARGETOS) -DTARGETARCH_$(TARGETARCH)

	ifeq ($(TARGETARCH), x86_mmx)
		GCDEFS	:= $(GCDEFS) -D_X86_ -D_MMX_
	endif
	ifeq ($(TARGETARCH), x86)
		GCDEFS	:= $(GCDEFS) -D_X86_
	endif
	ifeq ($(TARGETARCH), x86_android_ndk_r6b)
		GCDEFS	:= $(GCDEFS) -D_X86_
	endif
	ifeq ($(TARGETARCH), mips)
		GCDEFS	:= $(GCDEFS) -D_MIPS_
	endif
	ifeq ($(TARGETARCH), mips_be)
		GCDEFS	:= $(GCDEFS) -D_MIPS_ -DIL_BIGENDIAN
	endif
	ifeq ($(TARGETARCH), arm)
		GCDEFS	:= $(GCDEFS) -D_ARM_ -DIL_BIGENDIAN
	endif
	ifeq ($(TARGETARCH), arm_le)
		GCDEFS	:= $(GCDEFS) -D_ARM_
	endif
	ifeq ($(TARGETARCH), arm_android)
		GCDEFS	:= $(GCDEFS) -D_ARM_
	endif
	ifeq ($(TARGETARCH), arm64_android)
		GCDEFS	:= $(GCDEFS) -D_ARM_
	endif
	ifeq ($(TARGETARCH), arm_android_ndk_r6b)
		GCDEFS	:= $(GCDEFS) -D_ARM_
	endif

#	ifeq ($(TARGETENV), freebsd)
#		ifeq ($(HOSTENV), freebsd)
#			GCINCS	:= $(GCINCS) -I/usr/include
#		endif
#	endif
	ifeq ($(TARGETENV), sun4)
		GCDEFS	:= $(GCDEFS) -D_SPARC_
	endif
	ifeq ($(TARGETENV), macos)
		MACOS_VER := $(shell sw_vers -productVersion)

		# Default dev dir
		dev_dir := /Applications/Xcode.app/Contents/Developer

		# SDKs dir in the default Developer dir
		sdk_dir := $(dev_dir)/Platforms/MacOSX.platform/Developer/SDKs

		# Set default SDKROOT based on the host machine MacOS version
		# If command line SDKROOT is provided, it will take precedence

		ifneq (,$(findstring 10.11,$(MACOS_VER)))
			export SDKROOT := $(sdk_dir)/MacOSX10.11.sdk

		else ifneq (,$(findstring 10.10,$(MACOS_VER)))
			export SDKROOT := $(sdk_dir)/MacOSX10.10.sdk

		else ifneq (,$(findstring 10.9,$(MACOS_VER)))
			export SDKROOT := $(sdk_dir)/MacOSX10.9.sdk

		else ifneq (,$(findstring 10.8,$(MACOS_VER)))
			export SDKROOT := $(sdk_dir)/MacOSX10.8.sdk

		else ifneq (,$(findstring 10.7,$(MACOS_VER)))
			SDK=/Developer/SDKs/MacOSX10.7.sdk
			GCDEFS	+= -isysroot $(SDK)

		else ifneq (,$(findstring 10.6,$(MACOS_VER)))
			SDK=/Developer/SDKs/MacOSX10.6.sdk
			GCDEFS	+= -isysroot $(SDK)
		endif

		GCDEFS	:= $(GCDEFS) -DMACOSX

		ifeq ($(TARGETARCH), PPC)
			GCDEFS	:= $(GCDEFS) -arch ppc -mtune=G4
			GLDFLAGS = -arch ppc -Wl,-syslibroot,$(SDK)
		endif
		ifeq ($(TARGETARCH), x86)
			GCDEFS	:= $(GCDEFS) -arch x86_64
			GLDFLAGS = -arch x86_64
		endif
	endif

	GCOPTS	=
	GCFLAGS	= -g -Wall

	CC_TARGET	=-o $@
	LINK_TARGET	=-o $@

	ifeq ($(TARGETENV), linuxmips)
		TARGET_PREFIX = mipsel-linux-
	else
	ifeq ($(TARGETENV), linuxmips_be)
		TARGET_PREFIX = mips-linux-
	else
	ifeq ($(TARGETENV), linuxarm)
		TARGET_PREFIX = armeb-linux-
	else
	ifeq ($(TARGETENV), linuxarm_le)
		TARGET_PREFIX ?= arm-linux-
		ifneq ($(LINUXDIR),)
		GCFLAGS += -I$(LINUXDIR)/include
		endif
	else
	ifeq ($(TARGETENV), android)
		TARGET_PREFIX ?= arm-eabi-
		GCFLAGS += -Dlinux -DTARGETENV_android
	else
	ifeq ($(TARGETENV), android_ndk_r6b)
		#TARGET_PREFIX = arm-linux-androideabi-

		ifeq ($(TARGET_PREFIX),)
$(warning : TARGET_PREFIX is not set!)
		endif
		ifeq ($(TARGET_NDK),)
$(warning : TARGET_NDK is not set!)
		endif
		ifeq ($(LINUXDIR),)
$(warning : LINUXDIR is not set!)
		endif
		GCDEFS	:= $(GCDEFS) -fno-short-enums

		GCFLAGS += -Dlinux -DTARGETENV_android
		ifeq ($(TARGETARCH), arm_android_ndk_r6b)
			GCFLAGS += -DTARGETARCH_arm_android
			GCFLAGS += -I$(TARGET_NDK)/platforms/android-9/arch-arm/usr/include/
			GCFLAGS += -march=armv5te -mtune=xscale -msoft-float
			GCFLAGS += -mthumb-interwork
		else
		ifeq ($(TARGETARCH), x86_android_ndk_r6b)
			GCFLAGS += -DTARGETARCH_x86_android
			GCFLAGS += -I$(TARGET_NDK)/platforms/android-9/arch-x86/usr/include/
			GCFLAGS += -march=i686
		endif
		endif
		GCFLAGS += -fpic -fno-exceptions
		GCFLAGS += -ffunction-sections -funwind-tables
		GCFLAGS += -fstack-protector -fmessage-length=0
		GCFLAGS += -I$(LINUXDIR)/include/uapi/
		GCFLAGS += -I$(LINUXDIR)/include/
	else
		TARGET_PREFIX =
	endif
	endif
	endif
	endif
	endif
	endif

	ifeq ($(APPLY_PREFIX),true)
		CC = $(TARGET_PREFIX)gcc
		AS = $(TARGET_PREFIX)as
		LD = $(TARGET_PREFIX)ld
		AR = $(TARGET_PREFIX)ar
	endif

	INSTALL = install -c

	TCFLAGS =

	ifeq ($(TARGETENV), freebsd)
		GLDFLAGS = -static
	endif
	ifeq ($(TARGETENV), freebsd_be)
		GLDFLAGS = -static
	endif
	ifeq ($(TARGETENV), linuxarm)
		GLDFLAGS = -static
	endif
	ifeq ($(TARGETENV), linuxarm_le)
		GLDFLAGS ?= -static
	endif
	ifeq ($(TARGETENV), android)
		GLDFLAGS = -static
	endif
	ifeq ($(TARGETENV), android_ndk_r6b)
		GLDFLAGS = -Bdynamic -Wl,-dynamic-linker,/system/bin/linker
		GLDFLAGS += -lm -lc -ldl
		GLDFLAGS += -nostdlib
		GLDFLAGS += -Wl,--gc-sections -Wl,-z,nocopyreloc
		GLDFLAGS += -Wl,--no-undefined
		ifeq ($(TARGETARCH), arm_android_ndk_r6b)
			GLDFLAGS += -ldl
			GLDFLAGS += -Wl,-T,$(TARGET_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x
			GLDFLAGS += -Wl,-rpath-link=$(TARGET_NDK)/platforms/android-9/arch-arm
			GLDFLAGS += -L$(TARGET_NDK)/platforms/android-9/arch-arm/usr/lib
			GLDFLAGS += $(TARGET_NDK)/platforms/android-9/arch-arm/usr/lib/crtend_android.o
			GLDFLAGS += $(TARGET_NDK)/platforms/android-9/arch-arm/usr/lib/crtbegin_dynamic.o
			GLDFLAGS += $(TARGET_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
		else
		ifeq ($(TARGETARCH), x86_android_ndk_r6b)
			GLDFLAGS += -m32 -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now
			GLDFLAGS += -Wl,-z,relro,-z,now -fPIE -pie
			GLDFLAGS += -L$(TARGET_NDK)/platforms/android-9/arch-x86/usr/lib
			GLDFLAGS += -Wl,-rpath-link=$(TARGET_NDK)/platforms/android-9/arch-x86
			GLDFLAGS += -lstdc++
			GLDFLAGS += $(TARGET_NDK)/platforms/android-9/arch-x86/usr/lib/crtbegin_dynamic.o
			GLDFLAGS += -Wl,--whole-archive -Wl,--no-whole-archive
			GLDFLAGS += $(TARGET_NDK)/toolchains/x86-4.4.3/prebuilt/linux-x86/lib/gcc/i686-android-linux/4.4.3/libgcc.a
			GLDFLAGS += $(TARGET_NDK)/platforms/android-9/arch-x86/usr/lib/crtend_android.o
		endif
		endif
	endif

	GLDLIBS = -lgcc

endif	# $(TARGETOS) == unix

ifeq ($(TARGETOS), Windows_NT)

	# The environment for windows builds

	EXEEXT = .exe

	ifeq ($(TARGETENV), win32)
		# standard win32 using MS compiler
		OBJEXT	= .obj
		GCINCS	= $(strip /I$(SRCBASE)/include $(patsubst -I%,/I%,$(WLAN_StdIncPathA)) $(patsubst -I%,/I%,$(WLAN_ComponentIncPath)))
		GCDEFS	= /DTARGETENV_$(TARGETENV) /DTARGETOS_$(TARGETOS) \
			/DTARGETARCH_$(TARGETARCH) /D_X86_
		ifeq ($(TARGETARCH), x86_mmx)
			GCDEFS += /D_MMX_
		endif
		GCOPTS	= /nologo
		GCFLAGS	= /GM /W3 /Z7

		CC_TARGET	=-Fo$@
		LINK_TARGET	=-out:$@

		CC = cl
		AS = cl
		LD = cl

		TCFLAGS =
		GLDFLAGS = /nologo /link /nologo /INCREMENTAL:NO

		GLDLIBS =
	else
		# cygwin32 based environment
		OBJEXT	= .o
		GCINCS	= $(strip -I$(SRCBASE)/include $(WLAN_StdIncPathA) $(WLAN_ComponentIncPath))
		GCDEFS	= -DTARGETENV_$(TARGETENV) -DTARGETOS_$(TARGETOS) \
			-DTARGETARCH_$(TARGETARCH) -D_X86_
		ifeq ($(TARGETARCH), x86_mmx)
			GCDEFS += -D_MMX_
		endif
		GCOPTS	=
		GCFLAGS	= -g -Wall

		CC_TARGET	=-o $@
		LINK_TARGET	=-o $@

		CC = gcc
		AS = gcc
		LD = gcc
		INSTALL = install -c

		TCFLAGS =
		GLDFLAGS =

		GLDLIBS = -liberty -lgcc
	endif

	# Tools common to cygwin/win32

	INSTALL = install -c
	BUILD = build -ceZ

	# RELEASE_TARGET is a the directory under RELEASE_DIR where
	# target dependant files go. It is composed of the OS and
	# the CPU, some examples are: winnt40/i386, win98 ...
	#
	# NEEDSWORK: For now only NT 4.0 stuff uses it.
	ifneq ($(findstring $(TARGETPLATFORM), "Wdm wdm"), )
		RELEASE_TARGET = wdm/i386
	else
		RELEASE_TARGET = winnt40/i386
	endif

	# RELEASE_TOOLS_DIR is a the directory under RELEASE_DIR where
	# common tools go.
	# For compatability with previous installs &test scripts, old
	# tools still go in "yosemite".
	RELEASE_YOS_DIR = yosemite
	RELEASE_TOOLS_DIR = tools

endif	# $(TARGETOS) == Windows_NT

ifeq ($(TARGETOS), vxWorks)
	WIND_REGISTRY = sol
	ifndef WIND_BASE
		ifeq ($(HOSTOS), unix)
			WIND_BASE = /dfs/tools/vxWorks
		else
			WIND_BASE = $(WLAN_WINPFX)/tools/vxWorks
		endif
	endif
	include $(WIND_BASE)/target/h/make/defs.default

	ifeq ($(HOSTENV), Windows_NT)
		WIND_HOST_TYPE = x86-win32
	else
		ifeq ($(HOSTENV), sun4)
			WIND_HOST_TYPE = sun4-solaris2
		else
			WIND_HOST_TYPE = i386-freebsd
		endif
	endif

	ifeq ($(TARGETENV), vxsim)
		CPU = SIMSPARCSOLARIS
	else
		ifeq ($(TARGETENV), vx386)
			CPU = i386
		else
			CPU = R4650
			VXFLAGS  = -DCPU_VAR=$(CPU)
		endif
	endif

	include $(WIND_BASE)/target/h/make/make.$(CPU)$(TOOL)
	include $(WIND_BASE)/target/h/make/defs.$(WIND_HOST_TYPE)

	GCINCS	= -I$(WIND_BASE)/target/h -I$(SRCBASE)/include $(WLAN_StdIncPathA)
	GCDEFS	= $(DEFINE_CC) -DCPU=$(CPU) -DTARGETENV_$(TARGETENV) -DTARGETOS_$(TARGETOS) -DTARGETARCH_$(TARGETARCH)
	GCOPTS	= -g -O2
	GCFLAGS	= -Wall $(CC_ARCH_SPEC)
	LDFLAGS	= $(GLDFLAGS) $(LLDFLAGS)
	GLDLIBS	= $(LIBS)

	WIND_BIN = $(WIND_BASE)/host/$(WIND_HOST_TYPE)/bin

	AR	:= $(WIND_BIN)/$(AR)
	AS	:= $(WIND_BIN)/$(AS)
	BINHEX	:= $(WIND_BIN)/$(BINHEX)
	CC	:= $(WIND_BIN)/$(CC)
	CF	:= $(WIND_BIN)/$(CF)
	LD	:= $(CC)
	NM	:= $(WIND_BIN)/$(NM)
	RANLIB	:= $(WIND_BIN)/$(RANLIB)
	BINXSYM_NAME := $(WIND_BIN)/$(BINXSYM)

endif	# $(TARGETOS) == vxWorks

ifeq ($(TARGETENV), nucleusarm)

	# The environment for nucleus builds
	ifeq ($(BSP_BASE_DIR),)
		BSP_BASE_DIR := $(SRCBASE)/../bsp
	endif
   
	ifeq ($(NUCLEUS_INC_DIR),)
		NUCLEUS_INC_DIR := $(BSP_BASE_DIR)/rtos/nucleus/inc
	endif

	EXEEXT	:= 
	OBJEXT	:= .o
	GCINCS	:= $(strip -I$(SRCBASE)/include $(WLAN_StdIncPathA) -I$(NUCLEUS_INC_DIR) $(WLAN_ComponentIncPath))
	GCDEFS	:= -DTARGETENV_$(TARGETENV) -DTARGETOS_$(TARGETOS) -DTARGETARCH_$(TARGETARCH)
	GCOPTS	:=
   
	ifeq ($(OBJDIR),)
		OBJDIR	:= $(TARGETENV)/
	endif
   
	# --md:  This option compiles the source and writes make file dependency lines 
	#        to a file. The output file is suitable for use by a make utility.
	# -c:    Compiles but does not perform the link phase.
	# -O2:   High optimization.
	# ---memaccess -UL41: This option tells the compiler that the memory in the 
	#        target system has slightly restricted or expanded capabilities.
	#        Disables unaligned mode for code that uses pre-ARMv6 unaligned 
	#        access behavior.
	# "/adsabi" is added to "--apcs /interwork/$(SWST)" so that objects created
	#	under ADS 1.2 can be linked with objects compiled under RVCT 2.2.
	# --diag_suppress 2084,1658 = blocks the diagnostic warning "Warning: C2084W: support for --apcs /adsabi is deprecated"
	#                 1293: Suppress "assignment in condition" warning.
	#                  550: Suppress "variable set but never used" warning.
	GCFLAGS	:= --md \
			-c \
			-O2 \
			--memaccess -UL41 \
			--apcs /adsabi/interwork/NOSWST \
			--diag_suppress 2084,1658,1293,550 \
			--li

	# --cpu 'name': This option generates code for a specific ARM processor or architecture.
	ifeq ($(TARGETCPU),2153)
		GCFLAGS += --cpu ARM1136J-S
	else
      $(error "Unknown target CPU type!")
	endif

	#CPPFLAGS	:= -embeddedcplusplus

	CC_TARGET	=-o $@
	CPP_TARGET	=-o $@
	LINK_TARGET	=-o $@

	CC := tcc
	CPP := tcpp
	AS := armasm
	LD := armlink
	AR := armar -c -r --create

	INSTALL := install -c

	TCFLAGS :=

	GLDFLAGS := 
	GLDLIBS := --ELF --symbols --debug --map --info sizes,totals --errors link.err --list link.map --verbose

	# Convert windows style directories to cygwin style.
	# It should be used in situations where the host environment is cygwin, and
	# the host compiler is a native Win32 app (non-cygwin). It will convert the 
	# Windows style directories in the dependencies list to cygwin style. This is
	# necessary for the dependency files to be included by cygwin make.
	ifeq ($(HOSTOS),Windows_NT)
		FILTER_DEPENDS_IN_C_TO_OBJ_RULE := 1
	endif

endif	# $(TARGETENV) == nucleusarm

ifeq	($(TARGETENV), bcmmips)

	OBJEXT	= .o
	GCINCS	= $(strip -I$(SRCBASE)/include $(WLAN_StdIncPathA) $(WLAN_ComponentIncPath))
	GCDEFS	= -DTARGETENV_$(TARGETENV) -DTARGETOS_$(TARGETOS) \
		-DTARGETARCH_$(TARGETARCH) -D__mips__
	GCOPTS	= -g -O2
	GCFLAGS	= -Wall 
	GLDFLAGS = -Wl,-tidt.dld

	AS		= bcmas
	CC		= bcmgcc
	LD		= $(CC)
	NM		= bcmnm
	RANLIB		= bcmranlib

endif	# $(TARGETENV) == bcmmips

ifeq	($(TARGETENV), klsi)

	OBJEXT	= .obj
	GCINCS	= $(strip -I$(SRCBASE)/include $(WLAN_StdIncPathA) $(WLAN_ComponentIncPath))
	GCDEFS	= -DTARGETENV_$(TARGETENV) -DTARGETOS_$(TARGETOS) \
		-DTARGETARCH_$(TARGETARCH) -D__klsi__

	AS		= qtasm
	GASFLAGS	= -m20
	CC		= qtcc
	TCFLAGS		= -w asm=$(GASFLAGS) +c -Vcdv -w cc=+reginfo

endif	# $(TARGETENV) == klsi

CFLAGS = $(LCINCS) $(GCINCS) $(GCDEFS) $(GCOPTS) $(GCFLAGS) $(TCFLAGS) $(HCFLAGS) \
$(LCDEFS) $(LCOPTS) $(LCFLAGS) $(CENV)

ASFLAGS	= $(GASFLAGS) $(LASFLAGS) $(ASENV)
LDFLAGS	= $(GLDFLAGS) $(LLDFLAGS) $(LDENV)
LDLIBS	= $(LLDLIBS) $(GLDLIBS)

# dependency files including the .d file itself.
# note the example in GNU documentation seems to have a bug:
# two backslashes where one is correct.
%.d: %.c
ifeq ($(findstring s, $(MAKEFLAGS) ),)
	@ echo making $@
endif
	@ $(SHELL) -ec '$(CC) -MM $(CFLAGS) $(CPPFLAGS) $< \
	| sed '\''s/$*\.o[ :]*/$@ &/g'\'' >$@'

ifeq ($(TARGETENV), win32)

# win32 needs different command line args 

%.s: %.c
	$(CC) /FAs $(CFLAGS) $(CPPFLAGS) /Fa$@ /c $<

%.i: %.c
	$(CC) /E $(CFLAGS) $(CPPFLAGS) $< > $@

else # !win32

%.s: %.c
	$(CC) -S $(CFLAGS) $(CPPFLAGS) -o $@ $<

%.i: %.c
	$(CC) -o $@ -E -dD $(CFLAGS) $(CPPFLAGS) $<

endif # win32

ifeq	($(TARGETENV), klsi)

%$(OBJEXT): %.c
	$(CC) $(CFLAGS) $*.c

%$(OBJEXT): %.asm
	$(AS) $(ASFLAGS) $*.asm

%.asm: %.c
	$(CC) $(CFLAGS) -asm $*.c

%.i: %.c
	$(CC) $(CFLAGS) -cc -peep -asm $*.c
	mv $*.pp $*.i

else


# This command sequence will:
#  - Convert back-slashes to foward-slashes
#  - Convert long filenames to 8.3 format (e.g. Program Files --> PROGRA~1)
#  - Convert windows-style drive letters to cygwin style.
#
# It should be used in situations where the host environment is cygwin, and
# the host compiler is a native Win32 app (non-cygwin). It will convert the 
# Windows style directories in the dependencies list to cygwin style. This is
# necessary for the dependency files to be included by cygwin make.
define FILTER_DEPENDS
	sed -e 's/\\/\//g'		\
		-e 's/Program Files/PROGRA~1/g'	\
		-e 's/\([A-Za-z]\):\//\/cygdrive\/\1\//' < $(notdir $(@:.o=.d)) > $(@:.o=.d) && \
	rm -f $(notdir $(@:.o=.d))
endef


$(OBJDIR)%$(OBJEXT): %.c
	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_TARGET) $<
ifeq ($(FILTER_DEPENDS_IN_C_TO_OBJ_RULE),1)
	${FILTER_DEPENDS}
endif   

$(OBJDIR)%$(OBJEXT): %.cpp
	$(CPP) -c $(CFLAGS) $(CPPFLAGS) $(CPP_TARGET) $<
ifeq ($(FILTER_DEPENDS_IN_C_TO_OBJ_RULE),1)
	${FILTER_DEPENDS}
endif   


endif # klsi

%.h: %.x
	rpcgen -C -h $< > $@

%_xdr.c: %.x
	@ (if [ ! -f `basename $<` ] ; then ln -s $< . ; fi; true)
	rpcgen -C -c -i 0 `basename $<` > $@

# Makefile debugging rule
env:
	printenv

# if the user mistakenly specified RELEASE_DIR in unix-style notation,
# convert it to Win32 notation for them.
#
# RELEASE_DIR is assumed to be in windows-style notation if it has both 
# backslashes ('\') and colons (':').
#

ifneq  ("$(subst \,,$(RELEASE_DIR))", "$(RELEASE_DIR)")
ifneq  ("$(subst :,,$(RELEASE_DIR))", "$(RELEASE_DIR)")
RELEASE_DIR := $(subst :,,$(RELEASE_DIR))
RELEASE_DIR := $(subst \,/,$(RELEASE_DIR))
RELEASE_DIR := //$(RELEASE_DIR)
endif
endif

# all release rules depend on a valid RELEASE_DIR
release: check_release_dir
check_release_dir:
	@if [ "x$(RELEASE_DIR)" = "x" ]; then \
		echo "RELEASE_DIR is not set!"; \
		exit 1; \
	fi;

include ${SRCBASE}/branding.inc
