71c659f7558de3a83340aa0a7a430113cd4ce880
[o-du/phy.git] / fhi_lib / lib / Makefile
1 #/******************************************************************************\r
2 #*\r
3 #*   Copyright (c) 2019 Intel.\r
4 #*\r
5 #*   Licensed under the Apache License, Version 2.0 (the "License");\r
6 #*   you may not use this file except in compliance with the License.\r
7 #*   You may obtain a copy of the License at\r
8 #*\r
9 #*       http://www.apache.org/licenses/LICENSE-2.0\r
10 #*\r
11 #*   Unless required by applicable law or agreed to in writing, software\r
12 #*   distributed under the License is distributed on an "AS IS" BASIS,\r
13 #*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14 #*   See the License for the specific language governing permissions and\r
15 #*   limitations under the License.\r
16 #*\r
17 #*******************************************************************************/\r
18 \r
19 MYCUSTOMTAB='     '\r
20 MYCUSTOMSPACE='============================================================================================'\r
21 MYCUSTOMSPACE1='------------------------------------------------------------'\r
22 \r
23 ##############################################################\r
24 #  Tools configuration\r
25 ##############################################################\r
26 CC  := icc\r
27 CPP := icpc\r
28 AS := as\r
29 AR := ar\r
30 LD := icc\r
31 OBJDUMP := objdump\r
32 \r
33 ifeq ($(SHELL),cmd.exe)\r
34 MD := mkdir.exe -p\r
35 CP := cp.exe -f\r
36 RM := rm.exe -rf\r
37 else\r
38 MD := mkdir -p\r
39 CP := cp -f\r
40 RM := rm -rf\r
41 endif\r
42 \r
43 PROJECT_NAME := libxran\r
44 PROJECT_TYPE := lib\r
45 PROJECT_DIR  := $(XRAN_DIR)/lib\r
46 BUILDDIR := ./build\r
47 PROJECT_BINARY := $(BUILDDIR)/$(PROJECT_NAME).a\r
48 \r
49 ifeq ($(RTE_SDK),)\r
50     $(error "Please define RTE_SDK environment variable")\r
51 endif\r
52 \r
53 RTE_TARGET ?= x86_64-native-linuxapp-gcc\r
54 RTE_INC := $(RTE_SDK)/$(RTE_TARGET)/include\r
55 \r
56 API_DIR := $(PROJECT_DIR)/api\r
57 SRC_DIR := $(PROJECT_DIR)/src\r
58 ETH_DIR := $(PROJECT_DIR)/ethernet\r
59 \r
60 ifeq ($(MLOG),1)\r
61 ifeq ($(MLOG_DIR),)\r
62     MLOG_DIR=$(XRAN_DIR)/../mlog\r
63 endif\r
64 endif\r
65 \r
66 CC_SRC = $(ETH_DIR)/ethdi.c \\r
67         $(ETH_DIR)/ethernet.c \\r
68         $(SRC_DIR)/xran_up_api.c \\r
69         $(SRC_DIR)/xran_sync_api.c \\r
70         $(SRC_DIR)/xran_timer.c \\r
71         $(SRC_DIR)/xran_cp_api.c        \\r
72         $(SRC_DIR)/xran_transport.c     \\r
73         $(SRC_DIR)/xran_common.c        \\r
74         $(SRC_DIR)/xran_ul_tables.c     \\r
75         $(SRC_DIR)/xran_frame_struct.c  \\r
76         $(SRC_DIR)/xran_app_frag.c \\r
77         $(SRC_DIR)/xran_main.c\r
78 \r
79 CPP_SRC = $(SRC_DIR)/xran_compression.cpp\r
80 \r
81 CC_FLAGS += -std=gnu11 -Wall -Wno-deprecated-declarations  \\r
82         -fdata-sections \\r
83         -ffunction-sections \\r
84         -g \\r
85         -Wall \\r
86         -Wimplicit-function-declaration \\r
87         -g -O3 -wd1786\r
88 \r
89 CPP_FLAGS := -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_REENTRANT -pipe -no-prec-div \\r
90                 -no-prec-div -fp-model fast=2\\r
91                 -no-prec-sqrt  -falign-functions=16 -fast-transcendentals \\r
92         -Werror -Wno-unused-variable -std=c++11 -mcmodel=large\r
93 \r
94 INC :=  -I$(API_DIR) -I$(ETH_DIR) -I$(SRC_DIR) -I$(RTE_INC)\r
95 DEF :=\r
96 ifeq ($(MLOG),1)\r
97         INC  += -I$(MLOG_DIR)/source\r
98         DEF += -DMLOG_ENABLED\r
99 else\r
100         DEF += -UMLOG_ENABLED\r
101 endif\r
102 \r
103 #DEF += -DFCN_ADAPT\r
104 \r
105 AS_FLAGS :=\r
106 AR_FLAGS := rc\r
107 \r
108 PROJECT_OBJ_DIR := build/obj\r
109 \r
110 CC_OBJS := $(patsubst %.c,%.o,$(CC_SRC))\r
111 CPP_OBJS := $(patsubst %.cpp,%.o,$(CPP_SRC))\r
112 AS_OBJS := $(patsubst %.s,%.o,$(AS_SRC))\r
113 OBJS    := $(CC_OBJS) $(CPP_OBJS) $(AS_OBJS) $(LIBS)\r
114 DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS))))\r
115 \r
116 CC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CC_OBJS))\r
117 CPP_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS))\r
118 \r
119 AS_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(AS_OBJS))\r
120 CPP_COMP       := -O3 -xcore-avx512 -restrict -g -fasm-blocks\r
121 CC_FLAGS_FULL  := $(CC_FLAGS)  $(INC) $(DEF)\r
122 CPP_FLAGS_FULL := $(CPP_FLAGS) $(CPP_COMP) $(INC) $(DEF)\r
123 \r
124 AS_FLAGS := $(AS_FLAGS) $(INC)\r
125 \r
126 PROJECT_DEP_FILE := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep\r
127 \r
128 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))\r
129 GENERATE_DEPS :=\r
130 else\r
131 \r
132 CC_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CC_SRC)))\r
133 CPP_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CPP_SRC)))\r
134 GENERATE_DEPS := generate_deps\r
135 endif\r
136 \r
137 all : welcome_line      $(PROJECT_BINARY)\r
138         @echo $(PROJECT_BINARY)\r
139 \r
140 .PHONY : clear_dep\r
141 clear_dep:\r
142         @$(RM) $(PROJECT_DEP_FILE)\r
143         @echo [DEP]   $(subst $(PROJECT_OBJ_DIR)/,,$(PROJECT_DEP_FILE))\r
144 \r
145 $(CC_DEPS) :\r
146         @$(CC) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CC_FLAGS_FULL) >> $(PROJECT_DEP_FILE)\r
147 \r
148 $(CPP_DEPS) :\r
149         @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL) >> $(PROJECT_DEP_FILE)\r
150 \r
151 .PHONY : generate_deps\r
152 generate_deps : clear_dep $(CC_DEPS) $(CPP_DEPS)\r
153 \r
154 \r
155 .PHONY : echo_start_build\r
156 echo_start_build :\r
157         @echo [BUILD] $(PROJECT_TYPE) : $(PROJECT_NAME)\r
158 \r
159 $(DIRLIST) :\r
160         -@$(MD) $@\r
161 \r
162 $(CC_OBJTARGETS) :\r
163         @echo [CC]    $(subst $(PROJECT_OBJ_DIR)/,,$@)\r
164         @$(CC) -c $(CC_FLAGS_FULL) -o"$@" $(patsubst %.o,%.c,$(subst $(PROJECT_OBJ_DIR)/,,$@))\r
165 \r
166 $(CPP_OBJTARGETS) :\r
167         @echo [CPP]    $(subst $(PROJECT_OBJ_DIR)/,,$@)\r
168         @$(CPP) -c $(CPP_FLAGS_FULL) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@))\r
169 \r
170 $(AS_OBJTARGETS) :\r
171         @echo [AS]    $(subst $(PROJECT_OBJ_DIR)/,,$@)\r
172         @$(AS) $(AS_FLAGS) -o"$@" $(patsubst %.o,%.s,$(subst $(PROJECT_OBJ_DIR)/,,$@))\r
173 \r
174 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))\r
175 \r
176 include $(PROJECT_DEP_FILE)\r
177 \r
178 endif\r
179 \r
180 .PHONY: clean xclean\r
181 clean:\r
182         @echo [CLEAN]  : $(PROJECT_NAME)\r
183         @$(RM) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)\r
184 \r
185 xclean: clean\r
186 ifneq ($(wildcard $(PROJECT_DIR)/$(PROJECT_MAKE)),)\r
187         @echo [XCLEAN] : $(PROJECT_NAME)\r
188         @$(RM) $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_FILE)\r
189 endif\r
190 \r
191 .PHONY : welcome_line\r
192 welcome_line :\r
193         @echo $(MYCUSTOMSPACE)\r
194         @echo Building  $(PROJECT_BINARY)\r
195         @echo $(MYCUSTOMTAB)RTE_TARGET           = $(RTE_TARGET)\r
196         @echo $(MYCUSTOMSPACE)\r
197 \r
198 \r
199 .PHONY : debug release\r
200 \r
201 debug :  all\r
202 release :  all\r
203 \r
204 $(PROJECT_BINARY) : $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(PRE_BUILD) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)\r
205         @echo [AR]    $(subst $(BUILDDIR)/,,$@)\r
206         @$(AR) $(AR_FLAGS) $@ $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)\r