/src/org/ooc/frontend/drivers/CombineDriver.java

http://github.com/nddrylliog/ooc · Java · 83 lines · 68 code · 15 blank · 0 comment · 20 complexity · 159014b634520bc90088c8a1cd4672f9 MD5 · raw file

  1. package org.ooc.frontend.drivers;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.Collection;
  5. import java.util.HashSet;
  6. import org.ooc.frontend.BuildParams;
  7. import org.ooc.frontend.Target;
  8. import org.ooc.frontend.model.Module;
  9. public class CombineDriver extends Driver {
  10. public CombineDriver(BuildParams params) {
  11. super(params);
  12. }
  13. @Override
  14. public int compile(Module module, String outName) throws Error, IOException, InterruptedException {
  15. params.compiler.reset();
  16. copyLocalHeaders(module, params, new HashSet<Module>());
  17. if(params.debug) params.compiler.setDebugEnabled();
  18. params.compiler.addIncludePath(new File(params.distLocation, "libs/headers/").getPath());
  19. params.compiler.addIncludePath(params.outPath.getPath());
  20. addDeps(module, new HashSet<Module>(), new HashSet<String>());
  21. for(String define: params.defines) {
  22. params.compiler.defineSymbol(define);
  23. }
  24. for(String dynamicLib: params.dynamicLibs) {
  25. params.compiler.addDynamicLibrary(dynamicLib);
  26. }
  27. for(String additional: params.additionals) {
  28. params.compiler.addObjectFile(additional);
  29. }
  30. for(String compilerArg: params.compilerArgs) {
  31. params.compiler.addObjectFile(compilerArg);
  32. }
  33. for (File incPath: params.incPath.getPaths()) {
  34. params.compiler.addIncludePath(incPath.getAbsolutePath());
  35. }
  36. for (File libPath: params.libPath.getPaths()) {
  37. params.compiler.addLibraryPath(libPath.getAbsolutePath());
  38. }
  39. if (params.fatArchitectures != null) {
  40. params.compiler.setFatArchitectures(params.fatArchitectures);
  41. }
  42. if (params.osxSDKAndDeploymentTarget != null) {
  43. params.compiler.setOSXSDKAndDeploymentTarget(params.osxSDKAndDeploymentTarget);
  44. }
  45. Collection<String> libs = getFlagsFromUse(module, params.link);
  46. for(String lib: libs) params.compiler.addObjectFile(lib);
  47. if(params.link) {
  48. params.compiler.setOutputPath(outName);
  49. if(params.enableGC) {
  50. params.compiler.addDynamicLibrary("pthread");
  51. if(params.dynGC) {
  52. params.compiler.addDynamicLibrary("gc");
  53. } else {
  54. params.compiler.addObjectFile(new File(params.distLocation, "libs/"
  55. + Target.guessHost().toString(params.arch.equals("") ? Target.getArch() : params.arch) + "/libgc.a").getPath());
  56. }
  57. }
  58. } else {
  59. params.compiler.setCompileOnly();
  60. }
  61. if(params.verbose) System.out.println(params.compiler.getCommandLine());
  62. int code = params.compiler.launch();
  63. if(code != 0) {
  64. System.err.println("C compiler failed, aborting compilation process");
  65. }
  66. return code;
  67. }
  68. }