| # |
| # Copyright 2001-2009 Texas Instruments - http://www.ti.com/ |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # |
| # dspbridge/mpu_api/make/build.mk |
| # |
| # DSP-BIOS Bridge build rules. |
| |
| # ALL PATHS IN MAKEFILE MUST BE RELATIVE TO ITS DIRECTORY |
| |
| CDEFS += $(CMDDEFS) # Add command line definitions |
| CDEFS += $(PROCFAMILY) # Processor Family e.g. 3430 |
| CDEFS += $(CMDDEFS_START) # Definitions from start.mk |
| # ---------------------------------------------------------- |
| # REMOVE LEADING AND TRAILING SPACES FROM MAKEFILE MACROS |
| # ---------------------------------------------------------- |
| |
| TARGETNAME := $(strip $(TARGETNAME)) |
| TARGETTYPE := $(strip $(TARGETTYPE)) |
| SUBMODULES := $(strip $(SUBMODULES)) |
| SOURCES := $(strip $(SOURCES)) |
| INCLUDES := $(strip $(INCLUDES)) |
| LIBINCLUDES := $(strip $(LIBINCLUDES)) |
| |
| SH_SONAME := $(strip $(SH_SONAME)) |
| ST_LIBS := $(strip $(ST_LIBS)) |
| SH_LIBS := $(strip $(SH_LIBS)) |
| |
| CFLAGS := $(strip $(CFLAGS)) |
| CDEFS := $(strip $(CDEFS)) |
| EXEC_ARGS := $(strip $(EXEC_ARGS)) |
| ST_LIB_ARGS := $(strip $(ST_LIB_ARGS)) |
| SH_LIB_ARGS := $(strip $(SH_LIB_ARGS)) |
| |
| # ---------------------------------------------------------- |
| # COMPILER OPTIONS |
| # ---------------------------------------------------------- |
| |
| # Preprocessor : dependency file generation |
| ifndef NODEPENDS |
| ifndef nodepends |
| CFLAGS += -MD |
| endif |
| endif |
| |
| # Overall |
| CFLAGS += -pipe |
| # Preprocessor |
| CFLAGS += |
| # Debugging |
| ifeq ($(BUILD),deb) |
| CFLAGS += -g |
| else |
| CFLAGS += -fomit-frame-pointer |
| endif |
| # Warnings |
| CFLAGS += -Wall -Wno-trigraphs -Werror-implicit-function-declaration #-Wno-format |
| # Optimizations |
| #CFLAGS += -O2 -fno-strict-aliasing |
| #CFLAGS += -Os -fno-strict-aliasing |
| CFLAGS += -fno-strict-aliasing |
| # Machine dependent |
| |
| ifeq ($(PROCFAMILY),OMAP_3430) |
| CFLAGS += -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 |
| endif |
| |
| ifeq ($(PROCFAMILY),OMAP_4430) |
| CFLAGS += -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 |
| endif |
| |
| # Code generation |
| CFLAGS += -fno-common |
| # Macros |
| CFLAGS += -DLINUX $(addprefix -D, $(CDEFS)) |
| |
| ifdef __KERNEL__ |
| CFLAGS += -D__KERNEL__ -fno-builtin |
| endif |
| |
| # ---------------------------------------------------------- |
| # OBJECTS |
| # ---------------------------------------------------------- |
| |
| BUILDDIR = .obj/ |
| |
| # setup the target - check the given type - make sure we have the |
| # correct suffix on it |
| # TARGETNAME should not have a suffix on it - give an error if it does |
| #ifneq ($(suffix $(TARGETNAME)),) |
| # $(error TARGETNAME can not have a suffix) |
| #endif |
| ifeq ($(TARGETTYPE),SH_LIB) |
| TARGET := $(basename $(TARGETNAME)).so |
| else |
| ifeq ($(TARGETTYPE),MODULE) |
| TARGET := $(basename $(TARGETNAME)).o |
| TARGETKO := $(addsuffix .ko,$(basename $(TARGET))) |
| TARGETMOD := $(addsuffix .mod,$(basename $(TARGET))) |
| else |
| ifeq ($(TARGETTYPE),ST_LIB) |
| TARGET := $(basename $(TARGETNAME)).a |
| else |
| ifeq ($(TARGETTYPE),EXEC) |
| TARGET := $(basename $(TARGETNAME)).out |
| else |
| ifneq ($(TARGETTYPE),) |
| TARGET := $(error Invalid TARGETTYPE) |
| endif |
| endif |
| endif |
| endif |
| endif |
| |
| #LIBINCLUDES += $(TARGETDIR) $(TGTROOT)/lib $(TGTROOT)/usr/lib |
| LIBINCLUDES += $(TARGETDIR)/lib $(TARGETDIR)/usr/lib |
| SRCDIRS := $(sort $(dir $(SOURCES))) |
| OBJDIRS := $(addprefix $(BUILDDIR),$(SRCDIRS)) $(BUILDDIR) |
| |
| BASEOBJ := $(addsuffix .o,$(basename $(SOURCES))) |
| OBJECTS := $(addprefix $(BUILDDIR), $(BASEOBJ)) |
| |
| ST_LIBNAMES := $(addsuffix .a, $(addprefix lib, $(ST_LIBS))) |
| DL_LIBNAMES := $(addsuffix .so, $(addprefix lib, $(SH_LIBS))) |
| |
| vpath %.a $(LIBINCLUDES) $(TGTROOT)/lib $(TGTROOT)/usr/lib |
| vpath %.so $(LIBINCLUDES) $(TGTROOT)/lib $(TGTROOT)/usr/lib |
| |
| # ---------------------------------------------------------- |
| # BUILD ARGUMENTS |
| # ---------------------------------------------------------- |
| |
| MAPFILE := -Wl,-Map,$(TARGET).map |
| INCPATH := $(addprefix -I, . $(INCLUDES)) $(LINUXINCLUDE) |
| LIBPATH := $(addprefix -L, $(LIBINCLUDES)) |
| LIBFILE := $(addprefix -l, $(ST_LIBS) $(SH_LIBS)) $(LIB_OBJS) |
| |
| ifeq ($(TARGETTYPE),SH_LIB) |
| CFLAGS += -fpic |
| TARGETARGS := $(SH_LIB_ARGS) -nostartfiles -nodefaultlibs -nostdlib -shared -Wl |
| ifneq ($(SH_SONAME),) |
| TARGETARGS += -Wl,-soname,$(SH_SONAME) |
| endif |
| endif |
| |
| ifeq ($(TARGETTYPE),MODULE) |
| TARGETARGS := $(SH_LIB_ARGS) -nostartfiles -nodefaultlibs -nostdlib -Wl,-r |
| ifneq ($(SH_SONAME),) |
| TARGETARGS += -Wl,-soname,$(SH_SONAME) |
| endif |
| endif |
| |
| ifeq ($(TARGETTYPE),ST_LIB) |
| TARGETARGS := $(ST_LIB_ARGS) -nostartfiles -nodefaultlibs -nostdlib -Wl,-r |
| endif |
| |
| ifeq ($(TARGETTYPE),EXEC) |
| TARGETARGS := $(EXEC_ARGS) |
| endif |
| |
| .PHONY : all $(SUBMODULES) clean cleantrg SHELLERR Debug |
| |
| # ========================================================== |
| # all |
| # ========================================================== |
| all : $(CHECKSHELL) $(SUBMODULES) |
| |
| # ========================================================== |
| # Make submodules |
| # ========================================================== |
| $(SUBMODULES): |
| ifndef NORECURSE |
| ifndef norecurse |
| $(MAKE) -C $@ $(filter-out $(SUBMODULES),$(MAKECMDGOALS)) |
| endif |
| endif |
| |
| ifneq ($(TARGETTYPE),) |
| |
| # if this is driver module level , build KO file too |
| ifneq ($(TOPLEVEL),) |
| all : $(OBJDIRS) $(TARGETKO) |
| else |
| all : $(OBJDIRS) $(TARGET) |
| endif |
| |
| # ========================================================== |
| # Create directories |
| # ========================================================== |
| $(OBJDIRS) $(TARGETDIR) : |
| @$(call MKDIR, $@) |
| |
| # ========================================================== |
| # Product 2.6.x kernel module based on target |
| # ========================================================== |
| |
| # Link module .o with vermagic .o |
| $(TARGETKO): $(TARGETMOD).o $(TARGET) |
| $(LD) -EL -r -o $@ $^ |
| |
| # Compile vermagic |
| $(TARGETMOD).o: $(TARGETMOD).c |
| $(CC) -c $(TARGETARGS) $(CFLAGS) $(INCPATH) -o $@ $< |
| |
| # Generate Module vermagic |
| $(TARGETMOD).c: $(TARGET) |
| $(MODPOST) $(TARGET) |
| # removed - need to be done as a pre-step to building |
| # $(MAKE) -C $(KRNLSRC) modules |
| |
| # ========================================================== |
| # Build target |
| # ========================================================== |
| $(TARGET):$(OBJECTS) $(ST_LIBNAMES) $(DL_LIBNAMES) |
| # @$(SHELLCMD) echo Building $@ |
| # $(CC) $(TARGETARGS) $(CFLAGS) $(LIBPATH) $(MAPFILE) -o $@ $(BASEOBJ) $(LIBFILE) |
| # $(CC) $(TARGETARGS) $(CFLAGS) $(LIBPATH) $(MAPFILE) -o $@ $(OBJECTS) $(LIBFILE) |
| ifeq ($(TARGETTYPE),ST_LIB) |
| $(AR) r $@ $(OBJECTS) |
| else |
| $(CC) $(TARGETARGS) $(CFLAGS) $(LIBPATH) $(MAPFILE) -o $@ $(OBJECTS) $(LIBFILE) |
| endif |
| |
| # ========================================================== |
| # Compile .c file |
| # ========================================================== |
| $(BUILDDIR)%.o:%.c |
| # echo Compiling $(patsubst $(BUILDDIR)%.o,%.c, $@) |
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $(patsubst $(BUILDDIR)%.o,%.c, $@) |
| |
| # ========================================================== |
| # Compile .S file |
| # ========================================================== |
| $(BUILDDIR)%.o:%.S |
| # echo Compiling $(patsubst $(BUILDDIR)%.o,%.S, $@) |
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $(patsubst $(BUILDDIR)%.o,%.S, $@) |
| |
| endif # ifneq ($(TARGETTYPE),) |
| |
| # ---------------------------------------------------------- |
| # install - install the files |
| # ---------------------------------------------------------- |
| install:: $(TARGETDIR) $(SUBMODULES) $(TARGET) |
| ifdef HOSTRELEASE |
| ifdef SH_SONAME |
| $(INSTALL) -D $(TARGET) $(TARGETDIR)/$(HOSTRELEASE)/$(SH_SONAME) |
| $(RM) -f $(TARGETDIR)/$(HOSTRELEASE)/$(TARGET) |
| ln -s $(SH_SONAME) $(TARGETDIR)/$(HOSTRELEASE)/$(TARGET) |
| else |
| ifneq ($(TOPLEVEL),) |
| $(INSTALL) -D $(TARGETKO) $(TARGETDIR)/$(HOSTRELEASE)/$(TARGETKO) |
| else |
| $(INSTALL) -D $(TARGET) $(TARGETDIR)/$(HOSTRELEASE)/$(TARGET) |
| endif |
| endif |
| endif |
| ifdef 0 # removed - components shouldn't put things in the production fs |
| ifdef ROOTFSRELEASE |
| $(call MKDIR, $(ROOTFSDIR)/$(ROOTFSRELEASE)) |
| ifdef SH_SONAME |
| $(STRIP) --strip-unneeded -xgo $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(SH_SONAME) $(TARGET) |
| $(RM) -f $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGET) |
| ln -s $(SH_SONAME) $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGET) |
| else |
| ifneq ($(TOPLEVEL),) |
| $(STRIP) --strip-unneeded -xgo $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGETKO) $(TARGETKO) |
| else |
| $(STRIP) --strip-unneeded -xgo $(ROOTFSDIR)/$(ROOTFSRELEASE)/$(TARGET) $(TARGET) |
| endif |
| endif |
| endif |
| endif |
| |
| # ---------------------------------------------------------- |
| # clean - Remove build directory and target files |
| # Linux : Removes object and dependency files in build folder |
| # DOS : Removes object dirs in build folder |
| # ---------------------------------------------------------- |
| clean : $(SUBMODULES) |
| ifneq ($(TARGETTYPE),) |
| ifneq ($(OBJECTS),) |
| - $(call RM,-f $(OBJECTS)) |
| - $(call RM,-f $(OBJECTS:.o=.d)) |
| - $(call RMDIR,-f $(BUILDDIR)) |
| endif |
| - $(call RM,-f $(TARGET)) |
| - $(call RM,-f $(TARGET).map) |
| - $(call RM,-f $(TARGETKO)) |
| - $(call RM,-f $(TARGETMOD).c) |
| - $(call RM,-f $(TARGETMOD).o) |
| - $(call RM,-f $(TARGETMOD).d) |
| ifneq ($(TOPLEVEL),) |
| - @$(call RM,-f $(TARGETKO)) |
| - @$(call RM,-f $(TARGETMOD).c) |
| - @$(call RM,-f $(TARGETMOD).o) |
| - @$(call RM,-f $(TARGETMOD).d) |
| endif |
| endif |
| |
| cleantrg : $(SUBMODULES) |
| ifneq ($(TARGETTYPE),) |
| - @$(call RM, $(TARGET)) |
| - @$(call RM, $(TARGET).map) |
| ifneq ($(TOPLEVEL),) |
| - @$(call RM, $(TARGETKO)) |
| - @$(call RM, $(TARGETMOD).c) |
| - @$(call RM, $(TARGETMOD).o) |
| - @$(call RM, $(TARGETMOD).d) |
| endif |
| endif |
| |
| # ---------------------------------------------------------- |
| # Include dependency files generated by preprocessor. |
| # |
| # Dependency files are placed in main object directory because |
| # dependent files' paths for same source file varies with the |
| # directory from where gmake is run |
| # ---------------------------------------------------------- |
| ifndef NODEPENDS |
| ifndef nodepends |
| ifneq ($(OBJECTS),) |
| -include $(OBJECTS:.o=.d) |
| endif |
| endif |
| endif |
| |
| # ---------------------------------------------------------- |
| # Generate fatal error if make variable SHELL is incorrect |
| # ---------------------------------------------------------- |
| SHELLERR:: |
| @$(SHELLCMD) echo Fatal error: SHELL set to $(SHELL) instead of $(MYSHELL) |
| @$(SHELLCMD) echo set $(MYSHELL) to correct path and CASE SENSITIVE FILE NAME and EXTENSTION |
| @$(SHELLCMD) echo of your command shell |
| $(ERR) |
| |
| |
| # ---------------------------------------------------------- |
| # For debugging script |
| # ---------------------------------------------------------- |
| Debug::$(SUBMODULES) |
| @$(SHELLCMD) echo SHELL: $(SHELL) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo CDEFS: $(CDEFS) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo CONFIG_SHELL: $(CONFIG_SHELL) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo CURDIR: $(CURDIR) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo SRCDIRS: $(SRCDIRS) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo OBJDIRS: $(OBJDIRS) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo OBJECTS: $(OBJECTS) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo BUILDDIR: $(BUILDDIR) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo TARGETDIR TARGETNAME: $(TARGET) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo MAKEDIR: $(MAKEDIR) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo INCLUDES: $(INCLUDES) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo DL_LIBNAMES: $(DL_LIBNAMES) |
| @$(SHELLCMD) echo |
| @$(SHELLCMD) echo LIBFILE: $(LIBFILE) |
| @$(SHELLCMD) echo |
| |