131 for (String vmOpt : extraVmOpts) {
132 launcher.addVMArg(vmOpt);
133 }
134 }
135 for (String arg : args) {
136 launcher.addToolArg(arg);
137 }
138 try {
139 return ProcessTools.executeCommand(new ProcessBuilder(launcher.getCommand()).redirectErrorStream(true));
140 } catch (Throwable e) {
141 throw new Error("Can't start test process: " + e, e);
142 }
143 }
144
145 public static void printUsage() {
146 System.err.println("Usage: " + AotCompiler.class.getName()
147 + " -class <class> -libname <.so name>"
148 + " [-compile <compileItems>]* [-extraopt <java option>]*");
149 }
150
151 // runs ld -v (or ld -V on solaris) and check its exit code
152 private static boolean checkLd(Path bin) {
153 try {
154 return 0 == ProcessTools.executeCommand(bin.toString(),
155 Platform.isSolaris() ? "-V" : "-v")
156 .getExitValue();
157 } catch (Throwable t) {
158 // any errors mean ld doesn't work
159 return false;
160 }
161 }
162
163 public static String resolveLinker() {
164 Path linker = null;
165 // if non windows, 1st, check if PATH has ld
166 if (!Platform.isWindows()) {
167 String bin = "ld";
168 for (String path : System.getenv("PATH").split(File.pathSeparator)) {
169 Path ld = Paths.get(path).resolve("ld");
170 if (Files.exists(ld)) {
171 // there is ld in PATH
172 if (checkLd(ld)) {
173 System.out.println("found working linker: " + ld);
174 // ld works, jaotc is supposed to find and use it
175 return null;
203 }
204 } else if (Platform.isOSX()) {
205 @Artifact(organization = "jpg.infra.builddeps",
206 name = "devkit-macosx_x64",
207 revision = "Xcode6.3-MacOSX10.9+1.0",
208 extension = "tar.gz")
209 class DevkitMacosx { }
210 String artifactName = "jpg.infra.builddeps."
211 + "devkit-macosx_x64-"
212 + "Xcode6.3-MacOSX10.9+1.0";
213 Path devkit = ArtifactResolver.resolve(DevkitMacosx.class)
214 .get(artifactName);
215 linker = devkit.resolve("Xcode.app")
216 .resolve("Contents")
217 .resolve("Developer")
218 .resolve("Toolchains")
219 .resolve("XcodeDefault.xctoolchain")
220 .resolve("usr")
221 .resolve("bin")
222 .resolve("ld");
223 } else if (Platform.isSolaris()) {
224 if (Platform.isSparc()) {
225 @Artifact(organization = "jpg.infra.builddeps",
226 name = "devkit-solaris_sparcv9",
227 revision = "SS12u4-Solaris11u1+1.1",
228 extension = "tar.gz")
229 class DevkitSolarisSparc { }
230
231 String artifactName = "jpg.infra.builddeps."
232 + "devkit-solaris_sparcv9-"
233 + "SS12u4-Solaris11u1+1.1";
234 Path devkit = ArtifactResolver.resolve(DevkitSolarisSparc.class)
235 .get(artifactName);
236 linker = devkit.resolve("SS12u4-Solaris11u1")
237 .resolve("gnu")
238 .resolve("bin")
239 .resolve("ld");
240 } else if (Platform.isX64()) {
241 @Artifact(organization = "jpg.infra.builddeps",
242 name = "devkit-solaris_x64",
243 revision = "SS12u4-Solaris11u1+1.0",
244 extension = "tar.gz")
245 class DevkitSolarisX64 { }
246
247 String artifactName = "jpg.infra.builddeps."
248 + "devkit-solaris_x64-"
249 + "SS12u4-Solaris11u1+1.0";
250 Path devkit = ArtifactResolver.resolve(DevkitSolarisX64.class)
251 .get(artifactName);
252 linker = devkit.resolve("SS12u4-Solaris11u1")
253 .resolve("bin")
254 .resolve("amd64")
255 .resolve("ld");
256 }
257 } else if (Platform.isLinux()) {
258 if (Platform.isAArch64()) {
259 @Artifact(organization = "jpg.infra.builddeps",
260 name = "devkit-linux_aarch64",
261 revision = "gcc-linaro-aarch64-linux-gnu-4.8-2013.11_linux+1.0",
262 extension = "tar.gz")
263 class DevkitLinuxAArch64 { }
264
265 String artifactName = "jpg.infra.builddeps."
266 + "devkit-linux_aarch64-"
267 + "gcc-linaro-aarch64-linux-gnu-4.8-2013.11_linux+1.0";
268 Path devkit = ArtifactResolver.resolve(DevkitLinuxAArch64.class)
269 .get(artifactName);
270 linker = devkit.resolve("aarch64-linux-gnu")
271 .resolve("bin")
272 .resolve("ld");
273 } else if (Platform.isARM()) {
274 @Artifact(organization = "jpg.infra.builddeps",
275 name = "devkit-linux_arm",
276 revision = "gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux+1.0",
|
131 for (String vmOpt : extraVmOpts) {
132 launcher.addVMArg(vmOpt);
133 }
134 }
135 for (String arg : args) {
136 launcher.addToolArg(arg);
137 }
138 try {
139 return ProcessTools.executeCommand(new ProcessBuilder(launcher.getCommand()).redirectErrorStream(true));
140 } catch (Throwable e) {
141 throw new Error("Can't start test process: " + e, e);
142 }
143 }
144
145 public static void printUsage() {
146 System.err.println("Usage: " + AotCompiler.class.getName()
147 + " -class <class> -libname <.so name>"
148 + " [-compile <compileItems>]* [-extraopt <java option>]*");
149 }
150
151 // runs ld -v and check its exit code
152 private static boolean checkLd(Path bin) {
153 try {
154 return 0 == ProcessTools.executeCommand(bin.toString(), "-v")
155 .getExitValue();
156 } catch (Throwable t) {
157 // any errors mean ld doesn't work
158 return false;
159 }
160 }
161
162 public static String resolveLinker() {
163 Path linker = null;
164 // if non windows, 1st, check if PATH has ld
165 if (!Platform.isWindows()) {
166 String bin = "ld";
167 for (String path : System.getenv("PATH").split(File.pathSeparator)) {
168 Path ld = Paths.get(path).resolve("ld");
169 if (Files.exists(ld)) {
170 // there is ld in PATH
171 if (checkLd(ld)) {
172 System.out.println("found working linker: " + ld);
173 // ld works, jaotc is supposed to find and use it
174 return null;
202 }
203 } else if (Platform.isOSX()) {
204 @Artifact(organization = "jpg.infra.builddeps",
205 name = "devkit-macosx_x64",
206 revision = "Xcode6.3-MacOSX10.9+1.0",
207 extension = "tar.gz")
208 class DevkitMacosx { }
209 String artifactName = "jpg.infra.builddeps."
210 + "devkit-macosx_x64-"
211 + "Xcode6.3-MacOSX10.9+1.0";
212 Path devkit = ArtifactResolver.resolve(DevkitMacosx.class)
213 .get(artifactName);
214 linker = devkit.resolve("Xcode.app")
215 .resolve("Contents")
216 .resolve("Developer")
217 .resolve("Toolchains")
218 .resolve("XcodeDefault.xctoolchain")
219 .resolve("usr")
220 .resolve("bin")
221 .resolve("ld");
222 } else if (Platform.isLinux()) {
223 if (Platform.isAArch64()) {
224 @Artifact(organization = "jpg.infra.builddeps",
225 name = "devkit-linux_aarch64",
226 revision = "gcc-linaro-aarch64-linux-gnu-4.8-2013.11_linux+1.0",
227 extension = "tar.gz")
228 class DevkitLinuxAArch64 { }
229
230 String artifactName = "jpg.infra.builddeps."
231 + "devkit-linux_aarch64-"
232 + "gcc-linaro-aarch64-linux-gnu-4.8-2013.11_linux+1.0";
233 Path devkit = ArtifactResolver.resolve(DevkitLinuxAArch64.class)
234 .get(artifactName);
235 linker = devkit.resolve("aarch64-linux-gnu")
236 .resolve("bin")
237 .resolve("ld");
238 } else if (Platform.isARM()) {
239 @Artifact(organization = "jpg.infra.builddeps",
240 name = "devkit-linux_arm",
241 revision = "gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux+1.0",
|