SDOCM00114108 IPC custom build failure with XDCtools core product
[ipc/ipcdev.git] / packages / ti / sdo / ipc / makefile.xdt
1 %%{
2 /*
3  * Copyright (c) 2013-2014 Texas Instruments Incorporated - http://www.ti.com
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * *  Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  * *  Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * *  Neither the name of Texas Instruments Incorporated nor the names of
18  *    its contributors may be used to endorse or promote products derived
19  *    from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 %%}
34 %%{
35     var File = xdc.module("xdc.services.io.File");
36     var BIOS = xdc.module("ti.sysbios.BIOS");
37     var Build = xdc.module("ti.sdo.ipc.Build");
38     var TARGET = $args[0];
39     var XDCROOT = String(environment['xdc.rootDir'] + '/packages/').replace(/\\/g, "/");
41     var CGEN = TARGET.rootDir.replace(/\\/g, "/");
43     function baseName(path) {
44         return path.substr(path.lastIndexOf('/') + 1).replace(/\.[^\.]+$/, "");
45     }
47     function packageName(path) {
48         var dirpath = path.substring(0, path.lastIndexOf('/'));
49         return dirpath.substr(dirpath.lastIndexOf('/') + 1);
50     }
51     var OBJS = [];
52     var CFILES = Build.getCFiles(TARGET.$name);
53 %%}
54 vpath % `File.getDOSPath(this.$package.packageRepository) + "ti/sdo/"`
55 vpath %.c `XDCROOT`
57 XOPTS = `'-I"' + XDCROOT + '"' + " -Dxdc_target_types__=" + File.getDOSPath(TARGET.$package.packageRepository) + TARGET.stdInclude + " -Dxdc_target_name__=" + TARGET.name`
59 CCOPTS = `Build.getCCOpts(TARGET.name)`
61 IPC_ROOT = `File.getDOSPath(this.$package.packageRepository) + "ti/sdo/"`
63 BUILD_DEFS = `Build.getDefs()`
65 %%{
66     /* convert package path into include path */
67     var incs = new Array();
68     incs.push("-I" + this.$package.packageRepository.replace(/\/$/, ""));
70     for each (var repo in xdc.curPath().split(';')) {
71         /* skip empty repo, relative paths, and xdctools itself */
72         if ((repo == "") || repo.match(/^\./) || repo.match(/xdctools/)) {
73             continue;
74         }
76         /* add repo if not already present in array */
77         var i;
78         for (i = 0; i < incs.length; i++) {
79             if (incs[i] == "-I" + repo) {
80                 break;
81             }
82         }
83         if (i == incs.length) {
84             incs.push("-I" + repo);
85         }
86     }
87 %%}
88 INCS = `incs.join(" ")`
90 %if (TARGET.$name.match(/gnu/)) {
91 CC = `CGEN`/`TARGET.ccBin.cmd` $(CCOPTS) -I `CGEN`/arm-none-eabi/include
92 ASM = `CGEN`/`TARGET.asmBin.cmd` $(CCOPTS) -I `CGEN`/arm-none-eabi/include
93 AR = `CGEN`/`TARGET.arBin.cmd` `TARGET.ar.opts`
94 %}
95 %else {
96 CC = `CGEN`/bin/`TARGET.cc.cmd` $(CCOPTS) --output_file=$@ -I `CGEN`/include
97 ASM = `CGEN`/bin/`TARGET.asm.cmd` $(CCOPTS) -I `CGEN`/include
98 AR = `CGEN`/bin/`TARGET.ar.cmd` `TARGET.ar.opts`
99 %}
101 %if (environment["os.name"].match(/Windows.*/i)) {
102 %if (BIOS.buildingAppLib == false) {
103 %    Build.$private.libDir = Build.$private.libDir.replace(/\//g,'\\');
104 %}
105 DEL = cmd.exe /q /c del /f
106 CP = cmd.exe /q /c copy /Y
107 MKDIR = mkdir
108 %}
109 %else {
110 DEL = rm -f
111 CP = cp -f
112 MKDIR = mkdir -p
113 %}
115 define RM
116         $(if $(wildcard $1),$(DEL) $1,:)
117 endef
119 define ASSEMBLE
120         @echo asm`TARGET.suffix` $< ...
121         @$(ASM) $(BUILD_DEFS) $(XOPTS) $(INCS) $<
122 endef
124 %var LIB = "ipc.a" + TARGET.suffix;
126 %if (BIOS.buildingAppLib == false) {
127 all: `Build.$private.libDir``LIB`
128 %}
129 %else {
130 all: `LIB`
131 %}
133 %var sources = Build.getAsmFiles(TARGET.$name);
134 %for (var i = 0; i <  sources.length; i++) {
135 %    var s = sources[i];
136 %if (TARGET.$name.match(/gnu/)) {
137 %    var obj = packageName(s) + "_" + baseName(s) + ".o";
138 %}
139 %else {
140 %    var obj = packageName(s) + "_" + baseName(s) + ".obj";
141 %}
142 %    OBJS.push(obj)
143 `obj`: `s` makefile
144         @-$(call RM, $@)
145 %if (TARGET.$name.match(/gnu/)) {
146         $(ASSEMBLE) -o `obj`
147 %}
148 %else {
149         $(ASSEMBLE) --output_file=`obj`
150 %}
152 %}
154 %if (TARGET.$name.match(/gnu/)) {
155 Ipc.o: `CFILES` makefile
156         @-$(call RM, Ipc.o)
157         @-$(call RM, Ipc.o.dep)
158 %}
159 %else {
160 Ipc.obj: `CFILES` makefile
161         @-$(call RM, $@)
162 %}
163         @echo cl`TARGET.suffix` $< ...
164         @$(CC) $(BUILD_DEFS) $(XOPTS) $(INCS) \
165 %var sources = CFILES.split(' ');
166 %for (var i = 0; i < sources.length; i++) {
167 %    var s = sources[i] + (i == (sources.length - 1) ? "" : " \\");
168 %    if (s.substring(0,4) == "xdc/") {
169         `XDCROOT``s`
170 %    } else if (s.substring(0,2) == "./") {
171         `s`
172 %    } else {
173         $(IPC_ROOT)`s`
174 %    }
175 %}
177 %if (TARGET.$name.match(/gnu/)) {
178 `LIB`: Ipc.o `OBJS.join(" ")`
179 %}
180 %else {
181 `LIB`: Ipc.obj `OBJS.join(" ")`
182 %}
183         @-$(call RM, $@)
184         @echo ar`TARGET.suffix` $^ ...
185         @$(AR) $@ $^
187 %if (BIOS.buildingAppLib == false) {
188 `Build.$private.libDir``LIB`: `LIB`
189         @echo cp `LIB`
190         @-$(call RM, "`Build.$private.libDir``LIB`")
191         @$(CP) `LIB` "`Build.$private.libDir``LIB`"
192 %}
194 clean:
195         @-$(call RM, `LIB`)
196 %if (BIOS.buildingAppLib == false) {
197         @-$(call RM, "`Build.$private.libDir``LIB`")
198 %}
199 %if (TARGET.$name.match(/gnu/)) {
200         @-$(call RM, Ipc.o)
201 %}
202 %else {
203         @-$(call RM, Ipc.obj)
204 %}
205 %for (var i = 0; i < OBJS.length; i++) {
206         @-$(call RM, `OBJS[i]`)
207 %}
208 %if (Build.$private.libDir != null) {
210 # create output directories
211 ifneq ($(MAKECMDGOALS),clean)
212 ifeq ($(wildcard `Build.$private.libDir`),)
213     $(shell $(MKDIR) `Build.$private.libDir`)
214 endif
215 endif
216 %}