]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/GenBuild/org/tianocore/build/global/OutputManager.java
Change to new XML Schema.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / global / OutputManager.java
CommitLineData
878ddf1f 1/** @file\r
2 OutputManager class.\r
3 \r
4 OutputManager class set output directories for every module by BUILD_MODE.\r
5 \r
6Copyright (c) 2006, Intel Corporation\r
7All rights reserved. This program and the accompanying materials\r
8are licensed and made available under the terms and conditions of the BSD License\r
9which accompanies this distribution. The full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php\r
11\r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14**/\r
15package org.tianocore.build.global;\r
16\r
17import org.apache.tools.ant.Project;\r
18import java.io.File;\r
19\r
20/**\r
21 OutputManager class is used to setup output directories (BIN_DIR, DEST_DIR_OUTPUT, \r
22 DEST_DIR_DEBUG) according to BUILD_MODE. \r
23 \r
24 @since GenBuild 1.0\r
25**/\r
26public class OutputManager {\r
27 \r
28 ///\r
29 /// Single Module build\r
30 ///\r
31 public static final String MODULE_BUILD = "MODULE";\r
32\r
33 ///\r
34 /// Package build\r
35 ///\r
36 public static final String PACKAGE_BUILD = "PACKAGE";\r
37\r
38 ///\r
39 /// Platform build\r
40 ///\r
41 public static final String PLATFORM_BUILD = "PLATFORM";\r
42 \r
43 public static String buildMode = MODULE_BUILD;\r
44 \r
45 ///\r
46 /// For Package build, PLATFORM represent PACKAGE\r
47 ///\r
48 public static String PLATFORM;\r
49 \r
50 ///\r
51 /// For Platform build, PLATFORM_DIR represent PACKAGE_DIR\r
52 ///\r
53 public static String PLATFORM_DIR;\r
54 \r
55 ///\r
56 /// means intermediate files will put under Module's dir\r
57 ///\r
58 public static final String MODULE = "MODULE";\r
59 \r
60 ///\r
61 /// mean intermediate files will put under a unify dir\r
62 ///\r
63 public static final String UNIFIED = "UNIFIED";\r
64 \r
65 ///\r
66 /// Flag to ensure the function <code>update</code> will be called only one in the whole build.\r
67 ///\r
68 private static boolean flag = true;\r
69 \r
70 /**\r
71 If BUILD_MODE is PLATFORM or PACKAGE, record PLATFORM and PLARFORM_DIR.\r
72 Reminder that for PACKAGE build, here set value PACKAGE to PLATFORM and\r
73 PACKAGE_DIR to PLARFORM_DIR, and also update the ant properties. \r
74 \r
75 <p>Note that this function will be called only once in the whole build.</p> \r
76 \r
77 @param project current ANT build Project\r
78 **/\r
79 public synchronized static void update(Project project) {\r
80 if (flag){\r
81 flag = false;\r
82 String str = project.getProperty("BUILD_MODE");\r
83 if (str != null){\r
84 if (str.equals(PLATFORM_BUILD)) {\r
85 buildMode = PLATFORM_BUILD;\r
86 PLATFORM = project.getProperty("PLATFORM");\r
87 PLATFORM_DIR = project.getProperty("PLATFORM_DIR");\r
88 }\r
89 else if (str.equals(PACKAGE_BUILD)) {\r
90 buildMode = PACKAGE_BUILD;\r
91 PLATFORM = project.getProperty("PACKAGE");\r
92 PLATFORM_DIR = project.getProperty("PACKAGE_DIR");\r
93 project.setProperty("PLATFORM", PLATFORM);\r
94 project.setProperty("PLATFORM_DIR", PLATFORM_DIR);\r
95 }\r
96 }\r
97 }\r
98 }\r
99 \r
100 /**\r
101 Setup BIN_DIR, DEST_DIR_OUTPUT and DEST_DIR_OUTPUT, following are the rules:\r
102 \r
103 <pre>\r
104 Those three variables are defined as following\r
105 DEST_DIR_OUTPUT (intermediate files)\r
106 DEST_DIR_DEBUG (intermediate debug files)\r
107 BIN_DIR (final files)\r
108 \r
109 Output Dir (MODULE or UNIFIED):\r
110 For <b>Module</b> build: \r
111 All intermediate files are at ${MODULE_DIR}/Build/${TARGET}/${ARCH}/DEBUG|OUTPUT\r
112 All final files are at ${MODULE_DIR}/Build/${TARGET}/${ARCH}\r
113 \r
114 For <b>Platform</b> build:\r
115 If specified with MODULE\r
116 Intermediate files->${MODULE_DIR}/Build/${PLATFORM}/${TARGET}/${ARCH}/DEBUG|OUTPUT\r
117 Final files -> ${PLARFORM_DIR}/Build/${TARGET}/${ARCH}\r
118 \r
119 Else if specified with UNIFIED\r
120 Intermediate files->${PLARFORM_DIR}/Build/${TARGET}/${ARCH}/${PACKAGE}/${SOURCE_RELATIVE_PATH}/DEBUG|OUTPUT\r
121 Final files -> ${PLARFORM_DIR}/Build/${TARGET}/${ARCH}\r
122 \r
123 For <b>Package</b> build:\r
124 If specified with MODULE\r
125 Intermediate files->${MODULE_DIR}/Build/${PACKAGE}/${TARGET}/${ARCH}/DEBUG|OUTPUT\r
126 Final files -> ${PACKAGE_DIR}/Build/${TARGET}/${ARCH}\r
127 \r
128 Else if specified with UNIFIED\r
129 Intermediate files->${PACKAGE_DIR}/Build/${TARGET}/${ARCH}/${PACKAGE}/${SOURCE_RELATIVE_PATH}/DEBUG|OUTPUT\r
130 Final files -> ${PACKAGE_DIR}/Build/${TARGET}/${ARCH}\r
131 </pre>\r
132 \r
133 @param project current ANT build Project\r
134 @param userdir user-defined directory\r
135 @param type the module build type (MODULE or UNIFIED)\r
136 **/\r
137 public synchronized static void update(Project project, String userdir, String type) {\r
138 //\r
139 // userdir TBD\r
140 //\r
141 if( type == null || ! type.equals(MODULE)){\r
142 type = UNIFIED;\r
143 }\r
144 if (buildMode.equals(MODULE_BUILD)){\r
145 project.setProperty("DEST_DIR_OUTPUT", project.replaceProperties("${MODULE_DIR}"\r
146 + File.separatorChar + "Build" + File.separatorChar + "${TARGET}"\r
147 + File.separatorChar + "${ARCH}" + File.separatorChar + "OUTPUT"));\r
148 project.setProperty("DEST_DIR_DEBUG", project.replaceProperties("${MODULE_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "DEBUG"));\r
149 project.setProperty("BIN_DIR", project.replaceProperties("${MODULE_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}"));\r
150 }\r
151 else if (buildMode.equals(PLATFORM_BUILD)) {\r
152 if (type.equals(MODULE)) {\r
153 project.setProperty("DEST_DIR_OUTPUT", project.replaceProperties("${MODULE_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${PLATFORM}" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "OUTPUT"));\r
154 project.setProperty("DEST_DIR_DEBUG", project.replaceProperties("${MODULE_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${PLATFORM}" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "DEBUG"));\r
155 project.setProperty("BIN_DIR", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}"));\r
156 }\r
157 else if (type.equals(UNIFIED)){\r
158 project.setProperty("DEST_DIR_OUTPUT", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "${PACKAGE}" + File.separatorChar + "${MODULE_RELATIVE_PATH}" + File.separatorChar + "OUTPUT"));\r
159 project.setProperty("DEST_DIR_DEBUG", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "${PACKAGE}" + File.separatorChar + "${MODULE_RELATIVE_PATH}" + File.separatorChar + "DEBUG"));\r
160 project.setProperty("BIN_DIR", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}"));\r
161 }\r
162 }\r
163 else if (buildMode.equals(PACKAGE_BUILD)) {\r
164 if (type.equals(MODULE)) {\r
165 project.setProperty("DEST_DIR_OUTPUT", project.replaceProperties("${MODULE_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${PLATFORM}" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "OUTPUT"));\r
166 project.setProperty("DEST_DIR_DEBUG", project.replaceProperties("${MODULE_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${PLATFORM}" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "DEBUG"));\r
167 project.setProperty("BIN_DIR", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}"));\r
168 }\r
169 else if (type.equals(UNIFIED)){\r
170 project.setProperty("DEST_DIR_OUTPUT", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "${PACKAGE}" + File.separatorChar + "${MODULE_RELATIVE_PATH}" + File.separatorChar + "OUTPUT"));\r
171 project.setProperty("DEST_DIR_DEBUG", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}" + File.separatorChar + "${PACKAGE}" + File.separatorChar + "${MODULE_RELATIVE_PATH}" + File.separatorChar + "DEBUG"));\r
172 project.setProperty("BIN_DIR", project.replaceProperties("${PLATFORM_DIR}" + File.separatorChar + "Build" + File.separatorChar + "${TARGET}" + File.separatorChar + "${ARCH}"));\r
173 }\r
174 }\r
175 }\r
176}\r