1*14b24e2bSVaishali Kulkarni# Makefile for building ecore as a module.
2*14b24e2bSVaishali KulkarniAT?=@
3*14b24e2bSVaishali Kulkarniexport AT
4*14b24e2bSVaishali Kulkarni
5*14b24e2bSVaishali KulkarniKVER =
6*14b24e2bSVaishali Kulkarniifeq ($(KVER),)
7*14b24e2bSVaishali Kulkarni    KVER = $(shell uname -r)
8*14b24e2bSVaishali Kulkarniendif
9*14b24e2bSVaishali Kulkarni
10*14b24e2bSVaishali Kulkarni__ARCH=$(shell uname -m)
11*14b24e2bSVaishali Kulkarni
12*14b24e2bSVaishali Kulkarni# PREFIX may be set by the RPM build to set the effective root.
13*14b24e2bSVaishali KulkarniPREFIX =
14*14b24e2bSVaishali Kulkarniifeq ($(shell ls /lib/modules/$(KVER)/build > /dev/null 2>&1 && echo build),)
15*14b24e2bSVaishali Kulkarni# SuSE source RPMs
16*14b24e2bSVaishali Kulkarni    _KVER=$(shell echo $(KVER) | cut -d "-" -f1,2)
17*14b24e2bSVaishali Kulkarni    _KFLA=$(shell echo $(KVER) | cut -d "-" -f3)
18*14b24e2bSVaishali Kulkarni    _ARCH=$(shell file -b /lib/modules/$(shell uname -r)/build | cut -d "/" -f5)
19*14b24e2bSVaishali Kulkarni    ifeq ($(_ARCH),)
20*14b24e2bSVaishali Kulkarni        _ARCH=$(__ARCH)
21*14b24e2bSVaishali Kulkarni    endif
22*14b24e2bSVaishali Kulkarni    ifeq ($(shell ls /usr/src/linux-$(_KVER)-obj > /dev/null 2>&1 && echo linux),)
23*14b24e2bSVaishali Kulkarni      ifeq ($(shell ls /usr/src/kernels/$(KVER)-$(__ARCH) > /dev/null 2>&1 && echo linux),)
24*14b24e2bSVaishali Kulkarni        LINUX=
25*14b24e2bSVaishali Kulkarni      else
26*14b24e2bSVaishali Kulkarni        LINUX=/usr/src/kernels/$(KVER)-$(__ARCH)
27*14b24e2bSVaishali Kulkarni        LINUXSRC=$(LINUX)
28*14b24e2bSVaishali Kulkarni        ifeq ($(KERNEL_DIR),)
29*14b24e2bSVaishali Kulkarni            KERNEL_DIR=$(LINUX)
30*14b24e2bSVaishali Kulkarni        endif
31*14b24e2bSVaishali Kulkarni      endif
32*14b24e2bSVaishali Kulkarni    else
33*14b24e2bSVaishali Kulkarni        ifeq ($(KERNEL_DIR),)
34*14b24e2bSVaishali Kulkarni            KERNEL_DIR=/usr/src/linux-$(_KVER)-obj/$(_ARCH)/$(_KFLA)
35*14b24e2bSVaishali Kulkarni        endif
36*14b24e2bSVaishali Kulkarni        LINUXSRC=/usr/src/linux-$(_KVER)
37*14b24e2bSVaishali Kulkarni    endif
38*14b24e2bSVaishali Kulkarnielse
39*14b24e2bSVaishali Kulkarni    BCMPROC := $(__ARCH)
40*14b24e2bSVaishali Kulkarni    BCMCFGS := /lib/modules/$(KVER)/build \
41*14b24e2bSVaishali Kulkarni               /usr/src/kernels/$(KVER)-$(BCMPROC) \
42*14b24e2bSVaishali Kulkarni               /usr/src/linux-$(shell echo $(KVER) | sed "s|\(.*\)-\([a-z]*\)|\1-obj/$(BCMPROC)/\2|") \
43*14b24e2bSVaishali Kulkarni               /usr/src/linux
44*14b24e2bSVaishali Kulkarni
45*14b24e2bSVaishali Kulkarni    # Delete any entries that do not exist.
46*14b24e2bSVaishali Kulkarni    BCMTSTDIR = $(shell if ls $(DIR) > /dev/null 2>&1; then echo $(DIR); fi)
47*14b24e2bSVaishali Kulkarni    BCMCFGS := $(foreach DIR, $(BCMCFGS), $(BCMTSTDIR))
48*14b24e2bSVaishali Kulkarni
49*14b24e2bSVaishali Kulkarni    ifeq ($(BCMCFGS),)
50*14b24e2bSVaishali Kulkarni            $(error Linux kernel config directory not found)
51*14b24e2bSVaishali Kulkarni    else
52*14b24e2bSVaishali Kulkarni        ifeq ($(KERNEL_DIR),)
53*14b24e2bSVaishali Kulkarni            KERNEL_DIR := $(firstword $(BCMCFGS))
54*14b24e2bSVaishali Kulkarni	    ifeq ($(LINUXSRC),)
55*14b24e2bSVaishali Kulkarni	        ifneq ($(shell ls /lib/modules/$(KVER)/source > /dev/null 2>&1 && echo source),)
56*14b24e2bSVaishali Kulkarni		    LINUXSRC=/lib/modules/$(KVER)/source
57*14b24e2bSVaishali Kulkarni	        endif
58*14b24e2bSVaishali Kulkarni	    endif
59*14b24e2bSVaishali Kulkarni        endif
60*14b24e2bSVaishali Kulkarni    endif
61*14b24e2bSVaishali Kulkarniendif
62*14b24e2bSVaishali Kulkarni
63*14b24e2bSVaishali Kulkarniifeq ($(LINUXSRC),)
64*14b24e2bSVaishali Kulkarni   LINUXSRC=$(KERNEL_DIR)
65*14b24e2bSVaishali Kulkarniendif
66*14b24e2bSVaishali Kulkarni
67*14b24e2bSVaishali Kulkarni# paths
68*14b24e2bSVaishali Kulkarniifeq ($(shell ls /lib/modules/$(KVER)/updates > /dev/null 2>&1 && echo 1),1)
69*14b24e2bSVaishali Kulkarni    DRV_DIR = updates
70*14b24e2bSVaishali Kulkarnielse
71*14b24e2bSVaishali Kulkarni    ifeq ($(shell grep -q "search.*[[:space:]]updates" /etc/depmod.conf > /dev/null 2>&1 && echo 1),1)
72*14b24e2bSVaishali Kulkarni        DRV_DIR = updates
73*14b24e2bSVaishali Kulkarni    else
74*14b24e2bSVaishali Kulkarni        ifeq ($(shell grep -q "search.*[[:space:]]updates" /etc/depmod.d/* > /dev/null 2>&1 && echo 1),1)
75*14b24e2bSVaishali Kulkarni            DRV_DIR = updates
76*14b24e2bSVaishali Kulkarni        else
77*14b24e2bSVaishali Kulkarni            DRV_DIR = kernel/drivers/net
78*14b24e2bSVaishali Kulkarni        endif
79*14b24e2bSVaishali Kulkarni    endif
80*14b24e2bSVaishali Kulkarniendif
81*14b24e2bSVaishali Kulkarni
82*14b24e2bSVaishali Kulkarnisles_distro := $(wildcard /etc/SuSE-release)
83*14b24e2bSVaishali Kulkarniifneq ($(sles_distro),)
84*14b24e2bSVaishali KulkarniSLES_VERSION = $(shell cat /etc/SuSE-release | grep VERSION | grep -o -P [0-9]+)
85*14b24e2bSVaishali KulkarniSLES_PATCHLEVEL = $(shell cat /etc/SuSE-release | grep PATCHLEVEL | grep -o -P [0-9]+)
86*14b24e2bSVaishali KulkarniPADDED_PATCHLEVEL = $(shell if [ 10 -gt $(SLES_PATCHLEVEL) ]; then echo 0$(SLES_PATCHLEVEL); else echo $(SLES_PATCHLEVEL); fi)
87*14b24e2bSVaishali KulkarniSLES_DISTRO_VER = "0x$(SLES_VERSION)$(PADDED_PATCHLEVEL)"
88*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DSLES_DISTRO=$(SLES_DISTRO_VER)
89*14b24e2bSVaishali Kulkarniendif
90*14b24e2bSVaishali Kulkarni
91*14b24e2bSVaishali KulkarniSOURCES = ecore_chain.c ecore_cxt.c ecore_dev.c ecore_dbg_fw_funcs.c ecore_user_dbg_fw_funcs.c ecore_hw.c ecore_init_fw_funcs.c ecore_init_ops.c ecore_int.c ecore_mcp.c ecore_sp_commands.c ecore_spq.c ecore_dcbx.c ecore_phy.c  ecore_selftest.c ecore_mng_tlv.c
92*14b24e2bSVaishali KulkarniHEADERS_LL2 = ecore_ll2_api.h ecore_ll2.h
93*14b24e2bSVaishali KulkarniHEADERS_HSI = ecore_hsi_common.h ecore_hsi_iscsi.h ecore_hsi_roce.h ecore_hsi_rdma.h ecore_hsi_iwarp.h ecore_hsi_fcoe.h ecore_hsi_toe.h ecore_hsi_debug_tools.h ecore_hsi_init_func.h ecore_hsi_init_tool.h ../common/include/common_hsi.h ../common/include/eth_common.h ../common/include/fcoe_common.h ../common/include/iscsi_common.h ../common/include/roce_common.h ../common/include/rdma_common.h ../common/include/storage_common.h ../common/include/tcp_common.h ../common/include/iwarp_common.h
94*14b24e2bSVaishali KulkarniHEADERS = ecore_chain.h ecore_cxt_api.h ecore_cxt.h ecore_dbg_fw_funcs.h ecore_user_dbg_fw_funcs.h ecore_dbg_values.h ecore_dbg_values_user.h ecore_dev_api.h ecore_gtt_reg_addr.h ecore_gtt_values.h ecore.h ecore_hw_defs.h ecore_hw.h ecore_init_fw_funcs.h ecore_init_ops.h ecore_init_values.h ecore_init_values_zipped.h ecore_int_api.h ecore_int.h ecore_iro.h ecore_iro_values.h ecore_mcp.h ecore_phy_api.h ecore_mcp_api.h ecore_proto_if.h ecore_rt_defs.h ecore_sp_api.h ecore_sp_commands.h ecore_spq.h ecore_status.h ecore_utils.h ecore_dcbx.h ecore_dcbx_api.h ecore_selftest_api.h include/bcm_osal.h ../../hsi/hw/pcics_reg_driver.h  ../../hsi/hw/reg_addr.h ../../hsi/mcp/nvm_cfg.h ../../hsi/mcp/mcp_public.h ../../hsi/mcp/spad_layout.h ../../hsi/mfw_hsi.h ../../hsi/mcp/nvm_map.h ecore_tcp_ip.h
95*14b24e2bSVaishali KulkarniMODULE_NAME = ecore
96*14b24e2bSVaishali Kulkarniobj-m += $(MODULE_NAME).o
97*14b24e2bSVaishali Kulkarniecore-objs = ecore_cxt.o ecore_dev.o ecore_dbg_fw_funcs.o ecore_user_dbg_fw_funcs.o ecore_hw.o ecore_init_fw_funcs.o ecore_init_ops.o ecore_int.o ecore_mcp.o ecore_phy.o ecore_sp_commands.o ecore_spq.o ecore_dcbx.o ecore_selftest.o ecore_chain.o  ecore_mng_tlv.o
98*14b24e2bSVaishali Kulkarni
99*14b24e2bSVaishali Kulkarni#TODO - we need all HSI [e.g., ecore_cxt.c needs to know the size of all contexts.
100*14b24e2bSVaishali Kulkarni#Either need to carefully revise this, or everyone will need all the HSI files.
101*14b24e2bSVaishali Kulkarni#since both L2 and LL2 require ecore_hsi_eth.h, every flavour needs it
102*14b24e2bSVaishali KulkarniHEADERS += $(HEADERS_HSI) ecore_hsi_eth.h
103*14b24e2bSVaishali Kulkarni
104*14b24e2bSVaishali Kulkarni# Determine the content of the ecore compilation - on default do everything
105*14b24e2bSVaishali Kulkarniifneq ($(L2), 1)
106*14b24e2bSVaishali Kulkarniifneq ($(ROCE), 1)
107*14b24e2bSVaishali Kulkarniifneq ($(FCOE), 1)
108*14b24e2bSVaishali Kulkarniifneq ($(ISCSI), 1)
109*14b24e2bSVaishali Kulkarniifneq ($(PTP), 1)
110*14b24e2bSVaishali Kulkarniifneq ($(IWARP), 1)
111*14b24e2bSVaishali KulkarniL2 = 1
112*14b24e2bSVaishali KulkarniROCE = 1
113*14b24e2bSVaishali KulkarniFCOE = 1
114*14b24e2bSVaishali KulkarniISCSI = 1
115*14b24e2bSVaishali KulkarniPTP = 1
116*14b24e2bSVaishali KulkarniIWARP = 1
117*14b24e2bSVaishali Kulkarniendif
118*14b24e2bSVaishali Kulkarniendif
119*14b24e2bSVaishali Kulkarniendif
120*14b24e2bSVaishali Kulkarniendif
121*14b24e2bSVaishali Kulkarniendif
122*14b24e2bSVaishali Kulkarniendif
123*14b24e2bSVaishali Kulkarni
124*14b24e2bSVaishali KulkarniHEADERS += ecore_l2_api.h ecore_l2.h
125*14b24e2bSVaishali KulkarniHEADERS += ecore_roce.h ecore_roce_api.h ecore_hsi_roce.h ecore_hsi_rdma.h
126*14b24e2bSVaishali KulkarniHEADERS += ecore_fcoe_api.h ecore_fcoe.h ecore_hsi_fcoe.h
127*14b24e2bSVaishali KulkarniHEADERS += ecore_hsi_iscsi.h ecore_iscsi_api.h ecore_iscsi.h ecore_ooo.h
128*14b24e2bSVaishali KulkarniHEADERS += $(HEADERS_LL2)
129*14b24e2bSVaishali KulkarniHEADERS += ecore_iov_api.h ecore_sriov.h ecore_vf_api.h ecore_vf.h ecore_vfpf_if.h
130*14b24e2bSVaishali KulkarniHEADERS += ecore_ptp_api.h
131*14b24e2bSVaishali Kulkarni
132*14b24e2bSVaishali Kulkarniifeq ($(L2), 1)
133*14b24e2bSVaishali KulkarniSRIOV ?= 1
134*14b24e2bSVaishali Kulkarniecore-objs += ecore_l2.o
135*14b24e2bSVaishali KulkarniSOURCES += ecore_l2.c
136*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_L2
137*14b24e2bSVaishali Kulkarniendif
138*14b24e2bSVaishali Kulkarniifeq ($(ROCE), 1)
139*14b24e2bSVaishali KulkarniLL2 = 1
140*14b24e2bSVaishali KulkarniSOURCES += ecore_roce.c
141*14b24e2bSVaishali Kulkarniecore-objs += ecore_roce.o
142*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_ROCE
143*14b24e2bSVaishali Kulkarniendif
144*14b24e2bSVaishali Kulkarniifeq ($(FCOE), 1)
145*14b24e2bSVaishali KulkarniLL2 = 1
146*14b24e2bSVaishali KulkarniSOURCES += ecore_fcoe.c
147*14b24e2bSVaishali Kulkarniecore-objs += ecore_fcoe.o
148*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_FCOE
149*14b24e2bSVaishali Kulkarniendif
150*14b24e2bSVaishali Kulkarniifeq ($(ISCSI), 1)
151*14b24e2bSVaishali KulkarniLL2 = 1
152*14b24e2bSVaishali KulkarniSOURCES += ecore_iscsi.c ecore_ooo.c
153*14b24e2bSVaishali Kulkarniecore-objs += ecore_iscsi.o ecore_ooo.o
154*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_ISCSI
155*14b24e2bSVaishali Kulkarniendif
156*14b24e2bSVaishali Kulkarniifeq ($(IWARP), 1)
157*14b24e2bSVaishali KulkarniLL2 = 1
158*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_IWARP
159*14b24e2bSVaishali Kulkarniendif
160*14b24e2bSVaishali Kulkarni
161*14b24e2bSVaishali Kulkarni
162*14b24e2bSVaishali Kulkarni#Derivatives
163*14b24e2bSVaishali Kulkarniifeq ($(LL2), 1)
164*14b24e2bSVaishali KulkarniSOURCES += ecore_ll2.c
165*14b24e2bSVaishali Kulkarniecore-objs += ecore_ll2.o
166*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_LL2
167*14b24e2bSVaishali Kulkarniendif
168*14b24e2bSVaishali Kulkarniifeq ($(SRIOV), 1)
169*14b24e2bSVaishali Kulkarniecore-objs += ecore_sriov.o ecore_vf.o
170*14b24e2bSVaishali KulkarniSOURCES += ecore_sriov.c ecore_vf.c
171*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_SRIOV
172*14b24e2bSVaishali Kulkarniendif
173*14b24e2bSVaishali Kulkarniifeq ($(PTP), 1)
174*14b24e2bSVaishali Kulkarniecore-objs += ecore_ptp.o
175*14b24e2bSVaishali KulkarniSOURCES += ecore_ptp.c
176*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DCONFIG_ECORE_PTP
177*14b24e2bSVaishali Kulkarniendif
178*14b24e2bSVaishali Kulkarni
179*14b24e2bSVaishali Kulkarni#Add include subdir for both user/module flavours
180*14b24e2bSVaishali KulkarniEXTRA_CFLAGS += -DECORE_PACKAGE -I$(src)/include -I./include -I$(src)/../common/include/ -I./../common/include/ -I$(src)/../../hsi/hw/ -I./../../hsi/hw -I$(src)/../../hsi/mcp/ -I./../../hsi/mcp -I$(src)/../../hsi/ -I../../hsi/
181*14b24e2bSVaishali Kulkarni
182*14b24e2bSVaishali Kulkarniall default: $(obj-m)
183*14b24e2bSVaishali Kulkarni
184*14b24e2bSVaishali Kulkarniclean:
185*14b24e2bSVaishali Kulkarni	rm -rf *.o *.ko .*.cmd *.mod.c Module.symvers modules.order
186*14b24e2bSVaishali Kulkarni
187*14b24e2bSVaishali Kulkarni$(obj-m): $(SOURCES)
188*14b24e2bSVaishali Kulkarni	$(MAKE) -C $(KERNEL_DIR) M=`pwd` modules
189*14b24e2bSVaishali Kulkarni
190*14b24e2bSVaishali Kulkarniuser: $(SOURCES)
191*14b24e2bSVaishali Kulkarni	$(CC) -c $(SOURCES) $(EXTRA_CFLAGS)
192*14b24e2bSVaishali Kulkarni
193*14b24e2bSVaishali Kulkarnitar: $(SOURCES) $(HEADERS)
194*14b24e2bSVaishali Kulkarni	rm -rf /tmp/ecore.tar.gz
195*14b24e2bSVaishali Kulkarni	rm -rf /tmp/ecore*
196*14b24e2bSVaishali Kulkarni	mkdir /tmp/ecore
197*14b24e2bSVaishali Kulkarni	cp -r $(SOURCES) $(HEADERS) release.txt /tmp/ecore/
198*14b24e2bSVaishali Kulkarni	echo "L2 = $(L2)" >> /tmp/ecore/Makefile
199*14b24e2bSVaishali Kulkarni	echo "FCOE = $(FCOE)" >> /tmp/ecore/Makefile
200*14b24e2bSVaishali Kulkarni	echo "ISCSI = $(ISCSI)" >> /tmp/ecore/Makefile
201*14b24e2bSVaishali Kulkarni	echo "ROCE = $(ROCE)" >> /tmp/ecore/Makefile
202*14b24e2bSVaishali Kulkarni	echo "SRIOV = $(SRIOV)" >> /tmp/ecore/Makefile
203*14b24e2bSVaishali Kulkarni	cat Makefile >> /tmp/ecore/Makefile
204*14b24e2bSVaishali Kulkarni	tar czvf /tmp/ecore.tar.gz -C /tmp ecore
205*14b24e2bSVaishali Kulkarni	rm -rf /tmp/ecore
206