private void make(
      final CompileContext context,
      final Chunk<Module> moduleChunk,
      VirtualFile[] files,
      OutputSink sink) {
    String basePath = project.getBaseDir().getPath();
    File makeFile = new File(basePath, "/Makefile");
    if (!makeFile.exists()) {
      // TODO Generate the Makefile
      context.addMessage(
          CompilerMessageCategory.ERROR,
          "Makefile doesn't exist at " + makeFile.getPath(),
          null,
          -1,
          -1);
    } else {
      GeneralCommandLine command = new GeneralCommandLine();
      final Sdk projectSdk = null;
      final GoSdkData goSdkData = goSdkData(projectSdk);
      command.setExePath(getMakeBinary(projectSdk));
      command.addParameter("-C");
      command.addParameter(project.getBaseDir().getPath());
      command.addParameter("-f");
      command.addParameter(makeFile.getPath());
      command.addParameter("-e");
      command.addParameter("install");
      command.addParameter("clean");
      command
          .getEnvironment()
          .putAll(
              new HashMap<String, String>() {
                {
                  put("GOROOT", projectSdk.getHomePath());
                  put("GOARCH", goSdkData.TARGET_ARCH.getName());
                  put("GOOS", goSdkData.TARGET_OS.getName());
                  put("GOBIN", goSdkData.GO_BIN_PATH);
                  put("PATH", System.getenv("PATH") + File.pathSeparator + goSdkData.GO_BIN_PATH);
                  put("TARGDIR", getOutputPath(context, moduleChunk));
                }
              });

      CompilationTaskWorker compilationTaskWorker =
          new CompilationTaskWorker(new MakeOutputStreamParser(projectSdk, goSdkData, basePath));
      compilationTaskWorker.executeTask(command, basePath, context);
    }
  }