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); } }