* INTC Contribution to the O-RAN F Release for O-DU Low
[o-du/phy.git] / fhi_lib / lib / Makefile
1 #/******************************************************************************
2 #*
3 #*   Copyright (c) 2020 Intel.
4 #*
5 #*   Licensed under the Apache License, Version 2.0 (the "License");
6 #*   you may not use this file except in compliance with the License.
7 #*   You may obtain a copy of the License at
8 #*
9 #*       http://www.apache.org/licenses/LICENSE-2.0
10 #*
11 #*   Unless required by applicable law or agreed to in writing, software
12 #*   distributed under the License is distributed on an "AS IS" BASIS,
13 #*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 #*   See the License for the specific language governing permissions and
15 #*   limitations under the License.
16 #*
17 #*******************************************************************************/
18
19 MYCUSTOMTAB='     '
20 MYCUSTOMSPACE='============================================================================================'
21 MYCUSTOMSPACE1='------------------------------------------------------------'
22
23 ##############################################################
24 #  Tools configuration
25 ##############################################################
26 ifeq ($(WIRELESS_SDK_TOOLCHAIN),icc)
27 CC  := icc
28 CPP := icpc
29 AS := as
30 AR := ar
31 LD := icc
32 else ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx)
33     CC  := icx
34     CPP := icpx
35     AS  := as
36     AR  := llvm-ar
37     LD  := icx
38 else
39     $(error "Please define WIRELESS_SDK_TOOLCHAIN environment variable")
40 endif
41
42 OBJDUMP := objdump
43
44 ifeq ($(SHELL),cmd.exe)
45 MD := mkdir.exe -p
46 CP := cp.exe -f
47 RM := rm.exe -rf
48 else
49 MD := mkdir -p
50 CP := cp -f
51 RM := rm -rf
52 endif
53
54 ifeq ($(ORU),1)
55         PROJECT_NAME := libxran-oru
56         BUILDDIR := build-oru
57 else
58 PROJECT_NAME := libxran
59         BUILDDIR := build
60 endif
61 PROJECT_TYPE := lib
62 PROJECT_DIR  := $(XRAN_DIR)/lib
63
64 ifeq ($(XRAN_LIB_SO),)
65 PROJECT_BINARY := $(BUILDDIR)/$(PROJECT_NAME).a
66 else
67 PROJECT_BINARY := $(BUILDDIR)/$(PROJECT_NAME).so
68 endif
69
70 ifeq ($(RTE_SDK),)
71     $(error "Please define RTE_SDK environment variable")
72 endif
73
74 RTE_TARGET ?= x86_64-native-linux-icc
75 RTE_INC := $(shell PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --cflags-only-I libdpdk)
76
77 API_DIR := $(PROJECT_DIR)/api
78 SRC_DIR := $(PROJECT_DIR)/src
79 ETH_DIR := $(PROJECT_DIR)/ethernet
80
81 ifeq ($(MLOG),1)
82 ifeq ($(MLOG_DIR),)
83     MLOG_DIR=$(XRAN_DIR)/../mlog
84 endif
85 endif
86
87 CC_SRC = $(ETH_DIR)/ethdi.c \
88         $(ETH_DIR)/ethernet.c \
89         $(SRC_DIR)/xran_up_api.c \
90         $(SRC_DIR)/xran_sync_api.c \
91         $(SRC_DIR)/xran_timer.c \
92         $(SRC_DIR)/xran_cp_api.c        \
93         $(SRC_DIR)/xran_transport.c     \
94         $(SRC_DIR)/xran_common.c        \
95         $(SRC_DIR)/xran_ul_tables.c     \
96         $(SRC_DIR)/xran_frame_struct.c  \
97         $(SRC_DIR)/xran_dev.c \
98         $(SRC_DIR)/xran_rx_proc.c \
99         $(SRC_DIR)/xran_tx_proc.c \
100         $(SRC_DIR)/xran_cp_proc.c \
101         $(SRC_DIR)/xran_cb_proc.c \
102         $(SRC_DIR)/xran_mem_mgr.c \
103         $(SRC_DIR)/xran_main.c \
104         $(SRC_DIR)/xran_delay_measurement.c
105
106 CPP_SRC = $(SRC_DIR)/xran_compression.cpp \
107         $(SRC_DIR)/xran_bfp_ref.cpp \
108         $(SRC_DIR)/xran_bfp_cplane8.cpp \
109         $(SRC_DIR)/xran_bfp_cplane16.cpp \
110         $(SRC_DIR)/xran_bfp_cplane32.cpp \
111         $(SRC_DIR)/xran_bfp_cplane64.cpp \
112         $(SRC_DIR)/xran_bfp_uplane_9b16rb.cpp \
113         $(SRC_DIR)/xran_bfp_uplane.cpp \
114         $(SRC_DIR)/xran_mod_compression.cpp
115
116 CPP_SRC_SNC = $(SRC_DIR)/xran_compression_snc.cpp \
117         $(SRC_DIR)/xran_bfp_cplane8_snc.cpp \
118         $(SRC_DIR)/xran_bfp_cplane16_snc.cpp \
119         $(SRC_DIR)/xran_bfp_cplane32_snc.cpp \
120         $(SRC_DIR)/xran_bfp_cplane64_snc.cpp \
121         $(SRC_DIR)/xran_bfp_uplane_snc.cpp
122
123 CC_FLAGS += -std=gnu11 -Wall -Wno-deprecated-declarations  \
124         -fdata-sections \
125         -ffunction-sections \
126         -g \
127         -fPIC \
128         -Wall \
129         -Wimplicit-function-declaration \
130         -g -O3 -mcmodel=large
131
132 ifeq ($(WIRELESS_SDK_TOOLCHAIN),icc)
133 CC_FLAGS += -wd1786 -restrict
134 endif
135
136 ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx)
137 CC_FLAGS += -march=icelake-server -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error
138 endif
139
140 CPP_FLAGS := -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_REENTRANT -pipe \
141                   -falign-functions=16 \
142         -Werror -Wno-unused-variable -std=c++14 -mcmodel=large -fPIC
143
144 ifeq ($(WIRELESS_SDK_TOOLCHAIN),icc)
145 CPP_FLAGS +=  -fp-model fast=2 -no-prec-div -no-prec-sqrt -fast-transcendentals -restrict
146 endif
147
148 ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx)
149 CPP_FLAGS +=  -fp-model fast -march=icelake-server -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error
150 endif
151
152
153 INC :=  -I$(API_DIR) -I$(ETH_DIR) -I$(SRC_DIR) -I$(RTE_INC)
154 DEF :=
155 ifeq ($(MLOG),1)
156         INC  += -I$(MLOG_DIR)/source
157         DEF += -DMLOG_ENABLED
158 else
159         DEF += -UMLOG_ENABLED
160 endif
161
162 ifeq ($(ORU),1)
163         DEF += -DXRAN_O_RU_BUILD
164 else
165         DEF += -UXRAN_O_RU_BUILD
166 endif
167
168 #DEF += -DFCN_ADAPT
169 #DEF += -DFCN_1_2_6_EARLIER
170
171 AS_FLAGS :=
172 AR_FLAGS := rc
173
174 PROJECT_OBJ_DIR := $(BUILDDIR)/obj
175
176 CC_OBJS := $(patsubst %.c,%.o,$(CC_SRC))
177 CPP_OBJS := $(patsubst %.cpp,%.o,$(CPP_SRC))
178 CPP_OBJS_SNC := $(patsubst %.cpp,%.o,$(CPP_SRC_SNC))
179 AS_OBJS := $(patsubst %.s,%.o,$(AS_SRC))
180 OBJS    := $(CC_OBJS) $(CPP_OBJS) $(CPP_OBJS_SNC) $(AS_OBJS) $(LIBS)
181 DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS))))
182
183 CC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CC_OBJS))
184 CPP_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS))
185 CPP_SNC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS_SNC))
186
187 AS_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(AS_OBJS))
188 #-qopt-report=5 -qopt-matmul -qopt-report-phase=all
189 CPP_COMP       := -O3 -DNDEBUG  -xcore-avx512 -fPIE -fasm-blocks
190 CPP_COMP_SNC   := -O3 -DNDEBUG -march=icelake-server -fPIE -fasm-blocks
191 CC_FLAGS_FULL  := $(CC_FLAGS)  $(INC) $(DEF)
192 CPP_FLAGS_FULL := $(CPP_FLAGS) $(CPP_COMP) $(INC) $(DEF)
193 CPP_FLAGS_FULL_SNC := $(CPP_FLAGS) $(CPP_COMP_SNC) $(INC) $(DEF)
194
195 AS_FLAGS := $(AS_FLAGS) $(INC)
196
197 PROJECT_DEP_FILE := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep
198
199 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))
200 GENERATE_DEPS :=
201 else
202
203 CC_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CC_SRC)))
204 CPP_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CPP_SRC)))
205 CPP_SNC_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CPP_SRC_SNC)))
206 GENERATE_DEPS := generate_deps
207 endif
208
209 all : welcome_line      $(PROJECT_BINARY)
210         @echo $(PROJECT_BINARY)
211
212 .PHONY : clear_dep
213 clear_dep:
214         @$(RM) $(PROJECT_DEP_FILE)
215         @echo [DEP]   $(subst $(PROJECT_OBJ_DIR)/,,$(PROJECT_DEP_FILE))
216
217 $(CC_DEPS) :
218         @$(CC) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CC_FLAGS_FULL) >> $(PROJECT_DEP_FILE)
219
220 $(CPP_DEPS) :
221         @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL) >> $(PROJECT_DEP_FILE)
222
223 $(CPP_SNC_DEPS) :
224         @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL_SNC) >> $(PROJECT_DEP_FILE)
225
226 .PHONY : generate_deps
227 generate_deps : clear_dep $(CC_DEPS) $(CPP_DEPS) $(CPP_SNC_DEPS)
228
229
230 .PHONY : echo_start_build
231 echo_start_build :
232         @echo [BUILD] $(PROJECT_TYPE) : $(PROJECT_NAME)
233
234 $(DIRLIST) :
235         -@$(MD) $@
236
237 $(CC_OBJTARGETS) :
238         @echo [CC]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
239         @$(CC) -c $(CC_FLAGS_FULL) -o"$@" $(patsubst %.o,%.c,$(subst $(PROJECT_OBJ_DIR)/,,$@))
240
241 $(CPP_OBJTARGETS) :
242         @echo [CPP]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
243         @$(CPP) -c $(CPP_FLAGS_FULL) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@))
244
245 $(CPP_SNC_OBJTARGETS) :
246         @echo [CPP-SNC]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
247         @$(CPP) -c $(CPP_FLAGS_FULL_SNC) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@))
248
249 $(AS_OBJTARGETS) :
250         @echo [AS]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
251         @$(AS) $(AS_FLAGS) -o"$@" $(patsubst %.o,%.s,$(subst $(PROJECT_OBJ_DIR)/,,$@))
252
253 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))
254
255 include $(PROJECT_DEP_FILE)
256
257 endif
258
259 .PHONY: clean xclean
260 clean:
261         @echo [CLEAN]  : $(PROJECT_NAME)
262         @$(RM) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) $(AS_OBJTARGETS)
263
264 xclean: clean
265 ifneq ($(wildcard $(PROJECT_DIR)/$(PROJECT_MAKE)),)
266         @echo [XCLEAN] : $(PROJECT_NAME)
267         @$(RM) $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_FILE)
268 endif
269
270 .PHONY : welcome_line
271 welcome_line :
272         @echo $(MYCUSTOMSPACE)
273         @echo Building  $(PROJECT_BINARY)
274         @echo $(MYCUSTOMTAB)RTE_TARGET           = $(RTE_TARGET)
275         @echo $(MYCUSTOMSPACE)
276
277
278 .PHONY : debug release
279
280 debug :  all
281 release :  all
282
283 $(PROJECT_BINARY) : $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(PRE_BUILD) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) $(AS_OBJTARGETS)
284         @echo [AR]    $(subst $(BUILDDIR)/,,$@)
285 ifeq ($(XRAN_LIB_SO),)
286         @$(AR) $(AR_FLAGS) $@ $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) $(AS_OBJTARGETS)
287 else
288         @$(CC) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) $(AS_OBJTARGETS) -shared -fPIC -o $@
289 endif