7b33916624651e08876aa80bbb0026ed92de0a78
[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 CC  := icc
28 CPP := icpc
29 AS := as
30 AR := ar
31 LD := icc
32 OBJDUMP := objdump
33
34 ifeq ($(SHELL),cmd.exe)
35 MD := mkdir.exe -p
36 CP := cp.exe -f
37 RM := rm.exe -rf
38 else
39 MD := mkdir -p
40 CP := cp -f
41 RM := rm -rf
42 endif
43
44 PROJECT_NAME := libxran
45 PROJECT_TYPE := lib
46 PROJECT_DIR  := $(XRAN_DIR)/lib
47 BUILDDIR := ./build
48 PROJECT_BINARY := $(BUILDDIR)/$(PROJECT_NAME).a
49
50 ifeq ($(RTE_SDK),)
51     $(error "Please define RTE_SDK environment variable")
52 endif
53
54 RTE_TARGET ?= x86_64-native-linuxapp-gcc
55 RTE_INC := $(RTE_SDK)/$(RTE_TARGET)/include
56
57 API_DIR := $(PROJECT_DIR)/api
58 SRC_DIR := $(PROJECT_DIR)/src
59 ETH_DIR := $(PROJECT_DIR)/ethernet
60
61 ifeq ($(MLOG),1)
62 ifeq ($(MLOG_DIR),)
63     MLOG_DIR=$(XRAN_DIR)/../mlog
64 endif
65 endif
66
67 CC_SRC = $(ETH_DIR)/ethdi.c \
68         $(ETH_DIR)/ethernet.c \
69         $(SRC_DIR)/xran_up_api.c \
70         $(SRC_DIR)/xran_sync_api.c \
71         $(SRC_DIR)/xran_timer.c \
72         $(SRC_DIR)/xran_cp_api.c        \
73         $(SRC_DIR)/xran_transport.c     \
74         $(SRC_DIR)/xran_common.c        \
75         $(SRC_DIR)/xran_ul_tables.c     \
76         $(SRC_DIR)/xran_frame_struct.c  \
77         $(SRC_DIR)/xran_app_frag.c \
78         $(SRC_DIR)/xran_main.c
79
80 CPP_SRC = $(SRC_DIR)/xran_compression.cpp
81
82 CC_FLAGS += -std=gnu11 -Wall -Wno-deprecated-declarations  \
83         -fdata-sections \
84         -ffunction-sections \
85         -g \
86         -Wall \
87         -Wimplicit-function-declaration \
88         -g -O3
89
90 CPP_FLAGS := -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_REENTRANT -pipe -no-prec-div \
91                 -no-prec-div -fp-model fast=2\
92                 -no-prec-sqrt  -falign-functions=16 -fast-transcendentals \
93         -Werror -Wno-unused-variable -std=c++11 -mcmodel=large
94
95 INC :=  -I$(API_DIR) -I$(ETH_DIR) -I$(SRC_DIR) -I$(RTE_INC)
96 DEF :=
97 ifeq ($(MLOG),1)
98         INC  += -I$(MLOG_DIR)/source
99         DEF += -DMLOG_ENABLED
100 else
101         DEF += -UMLOG_ENABLED
102 endif
103
104 AS_FLAGS :=
105 AR_FLAGS := rc
106
107 PROJECT_OBJ_DIR := build/obj
108
109 CC_OBJS := $(patsubst %.c,%.o,$(CC_SRC))
110 CPP_OBJS := $(patsubst %.cpp,%.o,$(CPP_SRC))
111 AS_OBJS := $(patsubst %.s,%.o,$(AS_SRC))
112 OBJS    := $(CC_OBJS) $(CPP_OBJS) $(AS_OBJS) $(LIBS)
113 DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS))))
114
115 CC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CC_OBJS))
116 CPP_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS))
117
118 AS_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(AS_OBJS))
119
120 CC_FLAGS_FULL  := $(CC_FLAGS)  $(INC) $(DEF)
121 CPP_FLAGS_FULL := $(CPP_FLAGS) $(INC) $(DEF)
122
123 AS_FLAGS := $(AS_FLAGS) $(INC)
124
125 PROJECT_DEP_FILE := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep
126
127 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))
128 GENERATE_DEPS :=
129 else
130
131 CC_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CC_SRC)))
132 CPP_DEPS  := $(addprefix __dep__,$(subst ../,__up__,$(CPP_SRC)))
133 GENERATE_DEPS := generate_deps
134 endif
135
136 all : welcome_line      $(PROJECT_BINARY)
137         @echo $(PROJECT_BINARY)
138
139 .PHONY : clear_dep
140 clear_dep:
141         @$(RM) $(PROJECT_DEP_FILE)
142         @echo [DEP]   $(subst $(PROJECT_OBJ_DIR)/,,$(PROJECT_DEP_FILE))
143
144 $(CC_DEPS) :
145         @$(CC) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CC_FLAGS_FULL) >> $(PROJECT_DEP_FILE)
146
147 $(CPP_DEPS) :
148         @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL) >> $(PROJECT_DEP_FILE)
149
150 .PHONY : generate_deps
151 generate_deps : clear_dep $(CC_DEPS) $(CPP_DEPS)
152
153
154 .PHONY : echo_start_build
155 echo_start_build :
156         @echo [BUILD] $(PROJECT_TYPE) : $(PROJECT_NAME)
157
158 $(DIRLIST) :
159         -@$(MD) $@
160
161 $(CC_OBJTARGETS) :
162         @echo [CC]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
163         @$(CC) -c $(CC_FLAGS_FULL) -o"$@" $(patsubst %.o,%.c,$(subst $(PROJECT_OBJ_DIR)/,,$@))
164
165 $(CPP_OBJTARGETS) :
166         @echo [CPP]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
167         @$(CPP) -c $(CPP_FLAGS_FULL) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@))
168
169 $(AS_OBJTARGETS) :
170         @echo [AS]    $(subst $(PROJECT_OBJ_DIR)/,,$@)
171         @$(AS) $(AS_FLAGS) -o"$@" $(patsubst %.o,%.s,$(subst $(PROJECT_OBJ_DIR)/,,$@))
172
173 ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE))
174
175 include $(PROJECT_DEP_FILE)
176
177 endif
178
179 .PHONY: clean xclean
180 clean:
181         @echo [CLEAN]  : $(PROJECT_NAME)
182         @$(RM) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)
183
184 xclean: clean
185 ifneq ($(wildcard $(PROJECT_DIR)/$(PROJECT_MAKE)),)
186         @echo [XCLEAN] : $(PROJECT_NAME)
187         @$(RM) $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_FILE)
188 endif
189
190 .PHONY : welcome_line
191 welcome_line :
192         @echo $(MYCUSTOMSPACE)
193         @echo Building  $(PROJECT_BINARY)
194         @echo $(MYCUSTOMTAB)RTE_TARGET           = $(RTE_TARGET)
195         @echo $(MYCUSTOMSPACE)
196
197
198 .PHONY : debug release
199
200 debug :  all
201 release :  all
202
203 $(PROJECT_BINARY) : $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(PRE_BUILD) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)
204         @echo [AR]    $(subst $(BUILDDIR)/,,$@)
205         @$(AR) $(AR_FLAGS) $@ $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS)