1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#
2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  Copyright 2001-2009 Texas Instruments - http://www.ti.com/
3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# 
4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  Licensed under the Apache License, Version 2.0 (the "License");
5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  you may not use this file except in compliance with the License.
6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  You may obtain a copy of the License at
7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# 
8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#     http://www.apache.org/licenses/LICENSE-2.0
9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# 
10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  Unless required by applicable law or agreed to in writing, software
11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  distributed under the License is distributed on an "AS IS" BASIS,
12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  See the License for the specific language governing permissions and
14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  limitations under the License.
15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#
17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  dspbridge/mpu_api/make/build.mk
18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#
19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#  DSP-BIOS Bridge build rules.
20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# ALL PATHS IN MAKEFILE MUST BE RELATIVE TO ITS DIRECTORY
22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCDEFS       += $(CMDDEFS) # Add command line definitions
24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCDEFS       += $(PROCFAMILY) # Processor Family e.g. 3430
25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCDEFS	    += $(CMDDEFS_START) # Definitions from start.mk
26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   REMOVE LEADING AND TRAILING SPACES FROM MAKEFILE MACROS
28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETNAME  := $(strip $(TARGETNAME))
31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETTYPE  := $(strip $(TARGETTYPE))
32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevSUBMODULES  := $(strip $(SUBMODULES))
33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevSOURCES     := $(strip $(SOURCES))
34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevINCLUDES    := $(strip $(INCLUDES))
35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevLIBINCLUDES := $(strip $(LIBINCLUDES))
36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevSH_SONAME   := $(strip $(SH_SONAME))
38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevST_LIBS     := $(strip $(ST_LIBS))
39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevSH_LIBS     := $(strip $(SH_LIBS))
40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS      := $(strip $(CFLAGS))
42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCDEFS       := $(strip $(CDEFS))
43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevEXEC_ARGS   := $(strip $(EXEC_ARGS))
44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevST_LIB_ARGS := $(strip $(ST_LIB_ARGS))
45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevSH_LIB_ARGS := $(strip $(SH_LIB_ARGS))
46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   COMPILER OPTIONS
49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# Preprocessor : dependency file generation
52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifndef NODEPENDS
53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifndef nodepends
54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -MD
55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Overall
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -pipe
60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Preprocessor
61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS +=
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Debugging
63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(BUILD),deb)
64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -g
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -fomit-frame-pointer
67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Warnings
69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -Wall  -Wno-trigraphs -Werror-implicit-function-declaration #-Wno-format
70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Optimizations
71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#CFLAGS += -O2 -fno-strict-aliasing
72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#CFLAGS += -Os -fno-strict-aliasing
73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -fno-strict-aliasing
74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Machine dependent
75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(PROCFAMILY),OMAP_3430)
77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -march=armv7-a -msoft-float -Uarm -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR($(basename $(TARGETNAME)))" -D"KBUILD_MODNAME=KBUILD_STR($(basename $(TARGETNAME)))"  -DMODULE -D__LINUX_ARM_ARCH__=7 
78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(PROCFAMILY),OMAP_4430)
81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -march=armv7-a -msoft-float -Uarm -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR($(basename $(TARGETNAME)))" -D"KBUILD_MODNAME=KBUILD_STR($(basename $(TARGETNAME)))"  -DMODULE -D__LINUX_ARM_ARCH__=7
82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Code generation
85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -fno-common
86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Macros
87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -DLINUX $(addprefix -D, $(CDEFS))
88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifdef __KERNEL__
90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS      += -D__KERNEL__  -fno-builtin
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   OBJECTS
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevBUILDDIR    = .obj/
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# setup the target - check the given type - make sure we have the
100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# correct suffix on it
101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# TARGETNAME should not have a suffix on it - give an error if it does
102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifneq ($(suffix $(TARGETNAME)),)
103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   $(error TARGETNAME can not have a suffix)
104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),SH_LIB)
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev   TARGET      := $(basename $(TARGETNAME)).so
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),MODULE)
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev   TARGET      := $(basename $(TARGETNAME)).o
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev   TARGETKO    := $(addsuffix .ko,$(basename $(TARGET)))
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev   TARGETMOD   := $(addsuffix .mod,$(basename $(TARGET)))
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),ST_LIB)
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev   TARGET      := $(basename $(TARGETNAME)).a
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),EXEC)
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev   TARGET      := $(basename $(TARGETNAME)).out
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TARGETTYPE),)
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGET         := $(error Invalid TARGETTYPE)
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#LIBINCLUDES += $(TARGETDIR) $(TGTROOT)/lib $(TGTROOT)/usr/lib
128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevLIBINCLUDES += $(TARGETDIR)/lib $(TARGETDIR)/usr/lib 
129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevSRCDIRS :=  $(sort $(dir $(SOURCES)))
130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOBJDIRS :=  $(addprefix $(BUILDDIR),$(SRCDIRS)) $(BUILDDIR)
131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevBASEOBJ := $(addsuffix .o,$(basename $(SOURCES)))
133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOBJECTS := $(addprefix $(BUILDDIR), $(BASEOBJ))
134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevST_LIBNAMES := $(addsuffix .a, $(addprefix lib, $(ST_LIBS)))
136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevDL_LIBNAMES := $(addsuffix .so, $(addprefix lib, $(SH_LIBS)))
137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvpath %.a $(LIBINCLUDES) $(TGTROOT)/lib $(TGTROOT)/usr/lib
139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvpath %.so $(LIBINCLUDES) $(TGTROOT)/lib $(TGTROOT)/usr/lib
140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   BUILD ARGUMENTS
143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevMAPFILE := -Wl,-Map,$(TARGET).map
146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevINCPATH := $(addprefix -I, . $(INCLUDES)) $(LINUXINCLUDE)
147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevLIBPATH := $(addprefix -L, $(LIBINCLUDES))
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevLIBFILE := $(addprefix -l, $(ST_LIBS) $(SH_LIBS)) $(LIB_OBJS)
149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),SH_LIB)
151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCFLAGS += -fpic
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETARGS := $(SH_LIB_ARGS) -nostartfiles -nodefaultlibs -nostdlib -shared -Wl
153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(SH_SONAME),)
154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETARGS += -Wl,-soname,$(SH_SONAME)
155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),MODULE)
159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETARGS := $(SH_LIB_ARGS) -nostartfiles -nodefaultlibs -nostdlib -Wl,-r
160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(SH_SONAME),)
161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETARGS += -Wl,-soname,$(SH_SONAME)
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),ST_LIB)
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETARGS := $(ST_LIB_ARGS) -nostartfiles -nodefaultlibs -nostdlib -Wl,-r
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),EXEC)
170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTARGETARGS := $(EXEC_ARGS)
171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev.PHONY  :   all $(SUBMODULES) clean cleantrg SHELLERR Debug
174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   all
177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevall :  $(CHECKSHELL) $(SUBMODULES)
179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Make submodules
182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(SUBMODULES):
184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifndef NORECURSE
185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifndef norecurse
186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(MAKE) -C $@ $(filter-out $(SUBMODULES),$(MAKECMDGOALS))
187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TARGETTYPE),)
191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# if this is driver module level , build KO file too
193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TOPLEVEL),)
194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevall :  $(OBJDIRS) $(TARGETKO)
195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevall :  $(OBJDIRS) $(TARGET)
197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Create directories
201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(OBJDIRS) $(TARGETDIR) :
203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(call MKDIR, $@)
204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Product 2.6.x kernel module based on target
207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# Link module .o with vermagic .o
210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(TARGETKO): $(TARGETMOD).o $(TARGET) 
211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(LD) -EL -r -o $@ $^ 
212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# Compile vermagic
214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(TARGETMOD).o: $(TARGETMOD).c 
215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(CC) -c $(TARGETARGS) $(CFLAGS) $(INCPATH) -o $@ $<
216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# Generate Module vermagic
218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(TARGETMOD).c: $(TARGET) 
219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(MODPOST) $(TARGET)
220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev# removed - need to be done as a pre-step to building
221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#	$(MAKE) -C $(KRNLSRC) modules	
222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Build target
225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(TARGET):$(OBJECTS) $(ST_LIBNAMES) $(DL_LIBNAMES)
227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   @$(SHELLCMD) echo Building $@
228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#	$(CC) $(TARGETARGS) $(CFLAGS) $(LIBPATH) $(MAPFILE) -o $@ $(BASEOBJ) $(LIBFILE)
229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#	$(CC) $(TARGETARGS) $(CFLAGS) $(LIBPATH) $(MAPFILE) -o $@ $(OBJECTS) $(LIBFILE)
230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifeq ($(TARGETTYPE),ST_LIB)
231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(AR) r $@ $(OBJECTS)
232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(CC) $(TARGETARGS) $(CFLAGS) $(LIBPATH) $(MAPFILE) -o $@ $(OBJECTS) $(LIBFILE)
234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Compile .c file
238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(BUILDDIR)%.o:%.c
240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   echo Compiling $(patsubst $(BUILDDIR)%.o,%.c, $@)
241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $(patsubst $(BUILDDIR)%.o,%.c, $@)
242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Compile .S file
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ==========================================================
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev$(BUILDDIR)%.o:%.S
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   echo Compiling $(patsubst $(BUILDDIR)%.o,%.S, $@)
248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $(patsubst $(BUILDDIR)%.o,%.S, $@)
249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif   # ifneq ($(TARGETTYPE),)
251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   install - install the files
254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevinstall:: $(TARGETDIR) $(SUBMODULES) $(TARGET)
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifdef HOSTRELEASE
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifdef SH_SONAME
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(INSTALL) -D $(TARGET) $(TARGETDIR)/$(HOSTRELEASE)/$(SH_SONAME)
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(RM) -f $(TARGETDIR)/$(HOSTRELEASE)/$(TARGET)
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	ln -s $(SH_SONAME) $(TARGETDIR)/$(HOSTRELEASE)/$(TARGET)
261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TOPLEVEL),)
263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(INSTALL) -D $(TARGETKO) $(TARGETDIR)/$(HOSTRELEASE)/$(TARGETKO)
264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(INSTALL) -D $(TARGET) $(TARGETDIR)/$(HOSTRELEASE)/$(TARGET)
266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifdef 0 # removed - components shouldn't put things in the production fs
270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifdef ROOTFSRELEASE
271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(call MKDIR, $(ROOTFSDIR)/$(ROOTFSRELEASE))
272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifdef SH_SONAME
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(STRIP) --strip-unneeded -xgo $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(SH_SONAME) $(TARGET)
274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(RM) -f $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGET)
275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	ln -s $(SH_SONAME) $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGET)
276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TOPLEVEL),)
278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(STRIP) --strip-unneeded -xgo $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGETKO) $(TARGETKO)
279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevelse
280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(STRIP) --strip-unneeded -xgo $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGET) $(TARGET)
281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   clean - Remove build directory and target files
288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Linux : Removes object and dependency files in build folder
289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   DOS   : Removes object dirs in build folder
290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclean : $(SUBMODULES)
292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TARGETTYPE),)
293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(OBJECTS),)
294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(OBJECTS))
295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(OBJECTS:.o=.d))
296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RMDIR,-f $(BUILDDIR))
297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(TARGET))
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(TARGET).map)
300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(TARGETKO))
301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(TARGETMOD).c)
302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(TARGETMOD).o)
303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- $(call RM,-f $(TARGETMOD).d)
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TOPLEVEL),)
305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM,-f $(TARGETKO))
306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM,-f $(TARGETMOD).c)
307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM,-f $(TARGETMOD).o)
308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM,-f $(TARGETMOD).d)
309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevcleantrg : $(SUBMODULES)
313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TARGETTYPE),)
314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM, $(TARGET))
315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM, $(TARGET).map)
316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(TOPLEVEL),)
317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM, $(TARGETKO))
318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM, $(TARGETMOD).c)
319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM, $(TARGETMOD).o)
320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	- @$(call RM, $(TARGETMOD).d)
321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Include dependency files generated by preprocessor.
326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#
327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Dependency files are placed in main object directory because
328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   dependent files' paths for same source file varies with the
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   directory from where gmake is run
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifndef NODEPENDS
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifndef nodepends
333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevifneq ($(OBJECTS),)
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev-include $(OBJECTS:.o=.d)
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevendif
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   Generate fatal error if make variable SHELL is incorrect
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevSHELLERR::
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo Fatal error: SHELL set to $(SHELL) instead of $(MYSHELL)
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo set $(MYSHELL) to correct path and CASE SENSITIVE FILE NAME and EXTENSTION
345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo of your command shell
346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	$(ERR)
347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   For debugging script
351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#   ----------------------------------------------------------
352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevDebug::$(SUBMODULES)
353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo SHELL: $(SHELL)
354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo CDEFS: $(CDEFS)
356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo CONFIG_SHELL: $(CONFIG_SHELL)
358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo CURDIR: $(CURDIR)
360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo SRCDIRS: $(SRCDIRS)
362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo OBJDIRS: $(OBJDIRS)
364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo OBJECTS: $(OBJECTS)
366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo BUILDDIR: $(BUILDDIR)
368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo TARGETDIR TARGETNAME: $(TARGET)
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo MAKEDIR: $(MAKEDIR)
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo INCLUDES: $(INCLUDES)
374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo DL_LIBNAMES: $(DL_LIBNAMES)
376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo LIBFILE: $(LIBFILE)
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	@$(SHELLCMD) echo
379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
380