SDOCM00114108 IPC custom build failure with XDCtools core product
[ipc/ipcdev.git] / packages / ti / sdo / ipc / makefile_gccArmLto.xdt
1 %%{
2 /*
3  * Copyright (c) 2012-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 XOPTS = '-I "' + XDCROOT + '"' + " -Dxdc_target_types__="
42         + File.getDOSPath(TARGET.$package.packageRepository) + TARGET.stdInclude
43         + " -Dxdc_target_name__=" + TARGET.name;
45     var CGEN = TARGET.rootDir.replace(/\\/g, "/");
47     function baseName(path) {
48         return path.substr(path.lastIndexOf('/') + 1).replace(/\.[^\.]+$/, "");
49     }
51     function packageName(path) {
52         var dirpath = path.substring(0, path.lastIndexOf('/'));
53         return dirpath.substr(dirpath.lastIndexOf('/') + 1);
54     }
55     var OBJS = [];
56 %%}
57 vpath % `File.getDOSPath(this.$package.packageRepository) + "ti/sdo/"`
58 vpath %.c `XDCROOT`
60 CCOPTS = `Build.getCCOpts(TARGET.$name)`
62 BUILD_DEFS = `Build.getDefs()`
64 %%{
65     /* convert package path into include path */
66     var incs = new Array();
67     incs.push("-I" + this.$package.packageRepository.replace(/\/$/, ""));
69     for each (var repo in xdc.curPath().split(';')) {
70         /* skip empty repo, relative paths, and xdctools itself */
71         if ((repo == "") || repo.match(/^\./) || repo.match(/xdctools/)) {
72             continue;
73         }
75         /* add repo if not already present in array */
76         var i;
77         for (i = 0; i < incs.length; i++) {
78             if (incs[i] == "-I" + repo) {
79                 break;
80             }
81         }
82         if (i == incs.length) {
83             incs.push("-I" + repo);
84         }
85     }
86 %%}
87 INCS = `incs.join(" ")`
89 CC = `CGEN`/`TARGET.ccBin.cmd` $(CCOPTS) -I `CGEN`/arm-none-eabi/include
90 ASM = `CGEN`/`TARGET.asmBin.cmd` $(CCOPTS) -I `CGEN`/arm-none-eabi/include
91 AR = `CGEN`/`TARGET.arBin.cmd` `TARGET.ar.opts`
93 %if (environment["os.name"].match(/Windows.*/i)) {
94 %if (BIOS.buildingAppLib == false) {
95 %    Build.$private.libDir = Build.$private.libDir.replace(/\//g,'\\');
96 %}
97 DEL = cmd.exe /q /c del /f
98 CP = cmd.exe /q /c copy /Y
99 %}
100 %else {
101 DEL = rm -f
102 CP = cp -f
103 %}
105 define RM
106         $(if $(wildcard $1),$(DEL) $1,:)
107 endef
109 define ASSEMBLE
110         @echo asm`TARGET.suffix` $< ...
111         @$(ASM) $(BUILD_DEFS) `XOPTS` $(INCS) $<
112 endef
114 define COMPILE
115         @echo cl`TARGET.suffix` $< ...
116         @$(CC) $(BUILD_DEFS) `XOPTS` $(INCS) $<
117 endef
119 %var LIB = "ipc.a" + TARGET.suffix;
121 %if (BIOS.buildingAppLib == false) {
122 all: `Build.$private.libDir``LIB`
123 %}
124 %else {
125 all: `LIB`
126 %}
128 %var sources = Build.getAsmFiles(TARGET.$name);
129 %for each (var s in sources) {
130 %    var obj = packageName(s) + "_" + baseName(s) + ".o";
131 %    OBJS.push(obj)
132 `obj`: `s` makefile
133         @-$(call RM, $@)
134         $(ASSEMBLE) -o `obj`
136 %}
138 %var sources = Build.getCFiles(TARGET.$name).split(' ');
139 %for each (var s in sources) {
140 %    var obj = packageName(s) + "_" + baseName(s) + ".o";
141 %    OBJS.push(obj)
142 `obj`: `s` makefile
143         @-$(call RM, `obj`)
144         $(COMPILE) -o `obj`
145 %}
147 `LIB`: `OBJS.join(" ")`
148         @echo ar`TARGET.suffix` $^ ...
149         @-$(call RM, $@)
150         @$(AR) $@ $^
152 %if (BIOS.buildingAppLib == false) {
153 `Build.$private.libDir``LIB`: `LIB`
154         @echo cp `LIB`
155         @-$(call RM, "`Build.$private.libDir``LIB`")
156         @$(CP) `LIB` "`Build.$private.libDir``LIB`"
157 %}
159 clean:
160         @-$(call RM, `LIB`)
161 %if (BIOS.buildingAppLib == false) {
162         @-$(call RM, "`Build.$private.libDir``LIB`")
163 %}
164 %if (TARGET.$name.match(/gnu/)) {
165         @-$(call RM, BIOS.o)
166 %}
167 %else {
168         @-$(call RM, BIOS.obj)
169 %}
170 %for (var i = 0; i < OBJS.length; i++) {
171         @-$(call RM, `OBJS[i]`)
172 %}