Merge branch 'master' into edma3_keystone2
[keystone-rtos/edma3_lld.git] / makerules / rules_GCC_a15.mk
1 # Filename: rules_GCC_a15.mk\r
2 #\r
3 # Make rules for A15 - This file has all the common rules and defines required\r
4 #                     for Cortex-A15 ISA using a gcc cross-compiler\r
5 #\r
6 # This file needs to change when:\r
7 #     1. Code generation tool chain changes (This file uses Linaro)\r
8 #     2. Internal switches (which are normally not touched) has to change\r
9 #     3. a rule common for A15 ISA has to be added or modified\r
10 \r
11 # Set compiler/archiver/linker commands and include paths\r
12 CROSSCC ?= $(CODEGEN_PATH_A15_GCC)/bin/arm-linux-gnueabihf-gcc\r
13 CROSSAR ?= $(CODEGEN_PATH_A15_GCC)/bin/arm-linux-gnueabihf-ar\r
14 CROSSLNK ?= $(CODEGEN_PATH_A15_GCC)/bin/arm-linux-gnueabihf-gcc\r
15 \r
16 CC = $(CROSSCC)\r
17 AR = $(CROSSAR)\r
18 LNK = $(CROSSLNK)\r
19 SONAME ?= $(MODULE_NAME).$(LIBEXT_SO)\r
20 SONAME_FULL = $(subst .,$(findstring rm,$(MODULE_NAME)).,$(subst _rm,,$(SONAME)))\r
21 \r
22 CFLAGS_INTERNAL = -Wall -Wunknown-pragmas -c -mcpu=cortex-a15 -g -mfpu=neon -mfloat-abi=hard -mabi=aapcs -mapcs-frame  -Wswitch -fno-short-enums\r
23 \r
24 ifeq ($(PROFILE_$(CORE)), debug)\r
25 CFLAGS_INTERNAL += -D_DEBUG_=1\r
26 endif\r
27 ifeq ($(PROFILE_$(CORE)), release)\r
28  LNKFLAGS_INTERNAL_PROFILE =\r
29 endif\r
30 \r
31 # Assemble CFLAGS from all other CFLAGS definitions\r
32 _CFLAGS = $(CFLAGS_INTERNAL) $(CFLAGS_XDCINTERNAL) $(CFLAGS_GLOBAL_$(CORE)) $(CFLAGS_LOCAL_COMMON) $(CFLAGS_LOCAL_$(CORE)) $(CFLAGS_LOCAL_$(PLATFORM)) $(CFLAGS_LOCAL_$(SOC)) $(CFLAGS_APP_DEFINES) $(CFLAGS_COMP_COMMON) $(CFLAGS_GLOBAL_$(PLATFORM))\r
33 \r
34 # Object file creation\r
35 # The second $(CC) compiles the source to generate object\r
36 $(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c\r
37         $(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<\r
38         $(CC) -c -MD -MF $@.dep $(_CFLAGS) $(INCLUDES) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<\r
39 \r
40 # The second $(CC) compiles the source to generate object\r
41 $(OBJ_PATHS_SO): $(OBJDIR)/%.$(OBJEXT_SO): %.c\r
42         $(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<\r
43         $(CC) -fPIC -c -MD -MF $@.dep $(_CFLAGS) $(INCLUDES) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT_SO) $<\r
44 \r
45 ASMFLAGS =\r
46 # Object file creation\r
47 $(OBJ_PATHS_ASM): $(OBJDIR)/%.$(OBJEXT): %.asm\r
48         $(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<\r
49         $(CC) -c -x assembler-with-cpp $(_CFLAGS) $(ASMFLAGS) $(INCLUDES) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<\r
50 \r
51 # Object file creation\r
52 $(OBJ_PATHS_ASM_SO): $(OBJDIR)/%.$(OBJEXT_SO): %.asm\r
53         $(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<\r
54         $(CC) -fPIC -c -x assembler-with-cpp $(_CFLAGS) $(ASMFLAGS) $(INCLUDES) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT_SO) $<\r
55 \r
56 $(PACKAGE_PATHS): $(PACKAGEDIR)/%: %\r
57         $(ECHO) \# Copying $(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)/$<\r
58         $(MKDIR) -p $(DEST_ROOT)/package/$(PACKAGE_SELECT)/$(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)\r
59         $(CP) --parents -rf $< $(DEST_ROOT)/package/$(PACKAGE_SELECT)/$(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)\r
60 \r
61 # Archive flags - normally doesn't change\r
62 ARFLAGS = cr\r
63 \r
64 # Archive/library file creation\r
65 $(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS_ASM) $(OBJ_PATHS)\r
66         $(ECHO) \#\r
67         $(ECHO) \# Archiving $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(MODULE_NAME)\r
68         $(ECHO) \#\r
69         $(AR) $(ARFLAGS) $@ $(OBJ_PATHS_ASM) $(OBJ_PATHS)\r
70 \r
71 ARFLAGS_SO = -shared\r
72 # Archive/library file creation\r
73 $(LIBDIR)/$(MODULE_NAME).$(LIBEXT_SO) : $(OBJ_PATHS_ASM_SO) $(OBJ_PATHS_SO)\r
74         $(ECHO) \#\r
75         $(ECHO) \# Archiving $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(MODULE_NAME) Shared Library $(SONAME_FULL)\r
76         $(ECHO) \#\r
77         $(CC) $(ARFLAGS_SO) -Wl,-soname,$(SONAME_FULL).1 -o $(LIBDIR)/$(SONAME_FULL).1.0.0 $(OBJ_PATHS_ASM_SO) $(OBJ_PATHS_SO)\r
78         @ln -s $(SONAME_FULL).1.0.0 $(SONAME_FULL).1\r
79         @mv $(SONAME_FULL).1 $(LIBDIR)\r
80         @ln -s $(SONAME_FULL).1     $(SONAME_FULL)\r
81         @mv $(SONAME_FULL) $(LIBDIR)\r
82 \r
83 # Linker options and rules\r
84 LNKFLAGS_INTERNAL_COMMON =\r
85 \r
86 # Assemble Linker flags from all other LNKFLAGS definitions\r
87 _LNKFLAGS = $(LNKFLAGS_INTERNAL) $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE))\r
88 \r
89 # Path of the RTS library - normally doesn't change for a given tool-chain\r
90 RTSLIB_PATH =\r
91 \r
92 # Add specific paths and libraries as needed in the executable makefile\r
93 LIB_PATHS += $(EXT_LIB_a15host)  \r
94 INCLUDE_FLAGS = $(EXT_INCLUDES)\r
95 \r
96 LNK_LIBS = $(addprefix -l,$(LIB_PATHS))\r
97 # Linker - to create executable file\r
98 \r
99 ifeq ($(LOCAL_APP_NAME),)\r
100  EXE_NAME = $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT)\r
101 else\r
102  ifeq ($(PROFILE_$(CORE)),prod_release)\r
103   EXE_NAME = $(BINDIR)/$(LOCAL_APP_NAME).$(EXEEXT)\r
104  else\r
105   EXE_NAME = $(BINDIR)/$(LOCAL_APP_NAME)_$(PROFILE_$(CORE)).$(EXEEXT)\r
106  endif\r
107 endif\r
108 \r
109 $(EXE_NAME) : $(OBJ_PATHS_ASM) $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE)\r
110         $(ECHO) \# Linking into $(EXE_NAME)...\r
111         $(ECHO) \#\r
112         #$(LNK) $(_LNKFLAGS) $(OBJ_PATHS_ASM) $(OBJ_PATHS) -Wl,-T,$(LNKCMD_FILE) -Wl,-Map,$@.map $(LIB_PATHS) -o $@\r
113         $(LNK) $(_LNKFLAGS) $(OBJ_PATHS_ASM) $(OBJ_PATHS) $(LIB_PATHS) $(INCLUDE_FLAGS) -o $@\r
114         $(ECHO) \#\r
115         $(ECHO) \# $@ created.\r
116         $(ECHO) \#\r
117 \r
118 \r
119 xdc_configuro : $(XDC_CFG_FILE)\r
120         $(ECHO) \# XDC not needed for A15 GCC build\r
121 \r
122 # Include dependency make files that were generated by $(CC)\r
123 -include $(SRCS:%.c=$(DEPDIR)/%.P)\r
124 # Nothing beyond this point\r