ODULOW CI Support and Information
[o-du/phy.git] / fhi_lib / lib / Makefile
1 #/******************************************************************************
2 #*
3 #*   Copyright (c) 2019 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
20 MYCUSTOMTAB='     '
21 MYCUSTOMSPACE='============================================================================================'
22 MYCUSTOMSPACE1='------------------------------------------------------------'
23
24 ##############################################################
25 #  Tools configuration
26 ##############################################################
27 ifeq ($(BUILD_GCC),)
28 CC  := icc
29 LD := icc
30 else
31 CC := gcc
32 LD := gcc
33 endif
34
35 CPP := icpc
36 AS := as
37 AR := ar
38
39 OBJDUMP := objdump
40
41 ifeq ($(SHELL),cmd.exe)
42 MD := mkdir.exe -p
43 CP := cp.exe -f
44 RM := rm.exe -rf
45 else
46 MD := mkdir -p
47 CP := cp -f
48 RM := rm -rf
49 endif
50
51 PROJECT_NAME := libxran
52 PROJECT_TYPE := lib
53 PROJECT_DIR  := $(XRAN_DIR)/lib
54 BUILDDIR := ./build
55 PROJECT_BINARY := $(BUILDDIR)/$(PROJECT_NAME).a
56
57 ifeq ($(RTE_SDK),)
58     $(error "Please define RTE_SDK environment variable")
59 endif
60
61 RTE_TARGET ?= x86_64-native-linuxapp-gcc
62 RTE_INC := $(RTE_SDK)/$(RTE_TARGET)/include
63
64 API_DIR := $(PROJECT_DIR)/api
65 SRC_DIR := $(PROJECT_DIR)/src
66 ETH_DIR := $(PROJECT_DIR)/ethernet
67
68 ifeq ($(MLOG),1)
69 ifeq ($(MLOG_DIR),)
70     MLOG_DIR=$(XRAN_DIR)/../mlog
71 endif
72 endif
73
74 CC_SRC = $(ETH_DIR)/ethdi.c \
75         $(ETH_DIR)/ethernet.c \
76         $(SRC_DIR)/xran_up_api.c \
77         $(SRC_DIR)/xran_sync_api.c \
78         $(SRC_DIR)/xran_timer.c \
79         $(SRC_DIR)/xran_cp_api.c        \
80         $(SRC_DIR)/xran_transport.c     \
81         $(SRC_DIR)/xran_common.c        \
82         $(SRC_DIR)/xran_ul_tables.c     \
83         $(SRC_DIR)/xran_frame_struct.c  \
84         $(SRC_DIR)/xran_app_frag.c \
85         $(SRC_DIR)/xran_main.c
86
87 #CPP_SRC = $(SRC_DIR)/xran_compression.cpp
88 ifeq ($(BUILD_GCC),)
89 CC_FLAGS += -std=gnu11 -Wall -Wno-deprecated-declarations  \
90         -fdata-sections \
91         -ffunction-sections \
92         -g \
93         -Wall \
94         -Wimplicit-function-declaration \
95         -g -O3
96
97 CPP_FLAGS := -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_REENTRANT -pipe -no-prec-div \
98                 -no-prec-div -fp-model fast=2\
99                 -no-prec-sqrt  -falign-functions=16 -fast-transcendentals \
100         -Werror -Wno-unused-variable -std=c++11 -mcmodel=large
101 else
102 CC_FLAGS += -std=gnu11 -Wall -Wno-deprecated-declarations -Wextra \
103         -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
104         -Wold-style-definition -Wpointer-arith -Wcast-align -Wnested-externs \
105         -Wcast-qual -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings \
106         -Wdeprecated -Wunused-parameter -Wunused-variable\
107         -fdata-sections \
108         -ffunction-sections \
109         -g \
110         -Wimplicit-function-declaration \
111         -m64 \
112         -pthread \
113         -march=native \
114         -DRTE_MACHINE_CPUFLAG_SSE \
115         -DRTE_MACHINE_CPUFLAG_SSE2 \
116         -DRTE_MACHINE_CPUFLAG_SSE3 \
117         -DRTE_MACHINE_CPUFLAG_SSSE3 \
118         -DRTE_MACHINE_CPUFLAG_SSE4_1 \
119         -DRTE_MACHINE_CPUFLAG_SSE4_2 \
120         -DRTE_MACHINE_CPUFLAG_AES \
121         -DRTE_MACHINE_CPUFLAG_PCLMULQDQ \
122         -DRTE_MACHINE_CPUFLAG_AVX \
123         -DRTE_MACHINE_CPUFLAG_RDRAND \
124         -DRTE_MACHINE_CPUFLAG_FSGSBASE \
125         -DRTE_MACHINE_CPUFLAG_F16C \
126         -DRTE_MACHINE_CPUFLAG_AVX2 \
127         -I$(API_DIR) -I$(ETH_DIR) -I$(MLOG_DIR)/source -I$(RTE_INC) -g -O3 \
128         -DALLOW_EXPERIMENTAL_API 
129 endif
130
131 INC :=  -I$(API_DIR) -I$(ETH_DIR) -I$(SRC_DIR) -I$(RTE_INC)
132 DEF :=
133 ifeq ($(MLOG),1)
134         INC  += -I$(MLOG_DIR)/source
135         DEF += -DMLOG_ENABLED
136 else
137         DEF += -UMLOG_ENABLED
138 endif
139
140 AS_FLAGS :=
141 AR_FLAGS := rc
142
143 PROJECT_OBJ_DIR := build/obj
144
145 CC_OBJS := $(patsubst %.c,%.o,$(CC_SRC))
146 CPP_OBJS := $(patsubst %.cpp,%.o,$(CPP_SRC))
147 AS_OBJS := $(patsubst %.s,%.o,$(AS_SRC))
148 OBJS    := $(CC_OBJS) $(CPP_OBJS) $(AS_OBJS) $(LIBS)
149 DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS))))
150
151 CC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CC_OBJS))
152 CPP_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS))
153
154 AS_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(AS_OBJS))
155
156 CC_FLAGS_FULL  := $(CC_FLAGS)  $(INC) $(DEF)
157 CPP_FLAGS_FULL := $(CPP_FLAGS) $(INC) $(DEF)
158
159 AS_FLAGS := $(AS_FLAGS) $(INC)
160
161 PROJECT_DEP_FILE := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep
162
163 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))
164 GENERATE_DEPS :=
165 else
166
167 CC_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CC_SRC)))
168 CPP_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CPP_SRC)))
169 GENERATE_DEPS := generate_deps
170 endif
171
172 all : welcome_line      $(PROJECT_BINARY)
173         @echo $(PROJECT_BINARY)
174
175 .PHONY : clear_dep
176 clear_dep:
177         @$(RM) $(PROJECT_DEP_FILE)
178         @echo [DEP]   $(subst $(PROJECT_OBJ_DIR)/,,$(PROJECT_DEP_FILE))
179
180 $(CC_DEPS) :
181         @$(CC) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CC_FLAGS_FULL) >> $(PROJECT_DEP_FILE)
182
183 $(CPP_DEPS) :
184         @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL) >> $(PROJECT_DEP_FILE)
185
186 .PHONY : generate_deps
187 generate_deps : clear_dep $(CC_DEPS) $(CPP_DEPS)
188
189
190 .PHONY : echo_start_build
191 echo_start_build :
192         @echo [BUILD] $(PROJECT_TYPE) : $(PROJECT_NAME)
193
194 $(DIRLIST) :
195         -@$(MD) $@
196
197 $(CC_OBJTARGETS) :
198         @echo [CC]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
199         @$(CC) -c $(CC_FLAGS_FULL) -o"$@" $(patsubst %.o,%.c,$(subst $(PROJECT_OBJ_DIR)/,,$@))
200
201 $(CPP_OBJTARGETS) :
202         @echo [CPP]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
203         @$(CPP) -c $(CPP_FLAGS_FULL) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@))
204
205 $(AS_OBJTARGETS) :
206         @echo [AS]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
207         @$(AS) $(AS_FLAGS) -o"$@" $(patsubst %.o,%.s,$(subst $(PROJECT_OBJ_DIR)/,,$@))
208
209 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))
210
211 include $(PROJECT_DEP_FILE)
212
213 endif
214
215 .PHONY: clean xclean
216 clean:
217         @echo [CLEAN]  : $(PROJECT_NAME)
218         @$(RM) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)
219
220 xclean: clean
221 ifneq ($(wildcard $(PROJECT_DIR)/$(PROJECT_MAKE)),)
222         @echo [XCLEAN] : $(PROJECT_NAME)
223         @$(RM) $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_FILE)
224 endif
225
226 .PHONY : welcome_line
227 welcome_line :
228         @echo $(MYCUSTOMSPACE)
229         @echo Building  $(PROJECT_BINARY)
230         @echo $(MYCUSTOMTAB)RTE_TARGET           = $(RTE_TARGET)
231         @echo $(MYCUSTOMSPACE)
232
233
234 .PHONY : debug release
235
236 debug :  all
237 release :  all
238
239 $(PROJECT_BINARY) : $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(PRE_BUILD) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)
240         @echo [AR]    $(subst $(BUILDDIR)/,,$@)
241         @$(AR) $(AR_FLAGS) $@ $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)