String CompilerThread_createLibtoolString(ProjectData& projData, const ArrayList<String>& inputFiles, const String& outputFile) { String projectRoot = (String)ProjLoad_getSavedProjectsFolder() + '/' + projData.getFolderName(); String command = libtoolCommand + ' '; ProjectType projType = projData.getProjectType(); if(projType==PROJECTTYPE_DYNAMICLIBRARY) { command += "-dynamic "; } else if(projType==PROJECTTYPE_STATICLIBRARY) { command += "-static "; } //user-specified compiler flags ArrayList<String>& flags = projData.getProjectSettings().getCompilerFlags(); for(int i=0; i<flags.size(); i++) { String& flag = flags.get(i); command += flag + " "; } //source (input) files for(int i=0; i<inputFiles.size(); i++) { const String& file = inputFiles.get(i); String extension = CompilerThread_getExtensionForFilename(file); if(!extension.equals("h")) { command += (String)"\"" + file + "\" "; } } command += (String)"-o \"" + outputFile + "\""; return command; }
String CompilerThread_createCompileString(ProjectData& projData, const ArrayList<String>& inputFiles, const String& outputFile) { String projectRoot = (String)ProjLoad_getSavedProjectsFolder() + '/' + projData.getFolderName(); String command = clangCommand + ' '; ProjectType projType = projData.getProjectType(); if(projType==PROJECTTYPE_DYNAMICLIBRARY) { command += "-dynamiclib "; } //sdk root String sdk = projData.getProjectSettings().getSDK(); if(!sdk.equals("")) { String sdkPath = (String)Global_getSDKFolderPath() + "/" + sdk; command += (String)"-isysroot \"" + sdkPath + "\" "; } //include directories ArrayList<String>& includes = projData.getIncludeDirs(); for(int i=0; i<includes.size(); i++) { String& includeDir = includes.get(i); if(includeDir.length()>0) { if(includeDir.charAt(0)!='/') { command += (String)"-I\"" + projectRoot + "/ext/" + includeDir + "\" "; } else { command += (String)"-I\"" + includeDir + "\" "; } } } //frameworks ArrayList<String>& frameworks = projData.getFrameworkList(); for(int i=0; i<frameworks.size(); i++) { String& framework = frameworks.get(i); command += (String)"-framework " + framework + " "; } //c++ standard library and objective-c library command += "-lstdc++ -lobjc "; //turn off fixit info command += "-fno-diagnostics-fixit-info -fno-caret-diagnostics "; //set disabled warning flags ArrayList<String>& disabledWarnings = projData.getProjectSettings().getDisabledWarnings(); for(int i=0; i<disabledWarnings.size(); i++) { String warning = disabledWarnings.get(i); if(warning.length()>2 && warning.charAt(0)=='-' && warning.charAt(1)=='W') { String noWarning = (String)"-Wno-" + warning.substring(2) + ' '; command += noWarning; } } //user-specified compiler flags ArrayList<String>& flags = projData.getProjectSettings().getCompilerFlags(); for(int i=0; i<flags.size(); i++) { String& flag = flags.get(i); command += flag + " "; } //source (input) files for(int i=0; i<inputFiles.size(); i++) { const String& file = inputFiles.get(i); String extension = CompilerThread_getExtensionForFilename(file); if(!extension.equals("h")) { command += (String)"\"" + file + "\" "; } } //lib directories ArrayList<String> srcTypes = CompilerThread_getSourceTypes(); ArrayList<String>& libs = projData.getLibDirs(); for(int i=0; i<libs.size(); i++) { String& libDir = libs.get(i); if(libDir.length()>0) { ArrayList<String> libFiles; if(libDir.charAt(0)!='/') { String fullLibDir = projectRoot + "/ext/" + libDir; libFiles = FileTools::getFilenamesWithExtension(fullLibDir, srcTypes); } else { libFiles = FileTools::getFilenamesWithExtension(libDir, srcTypes); } for(int j=0; j<libFiles.size(); j++) { String& file = libFiles.get(j); String extension = ""; int dotIndex = file.lastIndexOf("."); if(dotIndex!=-1) { extension = file.substring(dotIndex+1, file.length()); } if(extension=="dylib") { command += (String)"-l \""+file+"\" "; } else { command += (String)"\"" + file + "\" "; } } } } //TODO replace version info with specified version info in ProjectData if(projType==PROJECTTYPE_DYNAMICLIBRARY) { command += "-current_version 1.0 -compatibility_version 1.0 -fvisibility=hidden "; } //output file (executable) command += (String)"-o \"" + outputFile + "\" "; return command; }
String CompilerThread_createAssembleString(ProjectData& projData, const String& file, const String& outputFile, const String& dependencyFile) { String projectRoot = (String)ProjLoad_getSavedProjectsFolder() + '/' + projData.getFolderName(); String command = clangCommand + ' '; String fileExtension = ""; int dotIndex = file.lastIndexOf("."); if(dotIndex!=-1) { fileExtension = file.substring(dotIndex+1, file.length()); } if(dependencyFile.length()>0) { command += (String)"-MD -MF \"" + dependencyFile + "\" "; } //sdk root String sdk = projData.getProjectSettings().getSDK(); if(!sdk.equals("")) { String sdkPath = (String)Global_getSDKFolderPath() + "/" + sdk; command += (String)"-isysroot \"" + sdkPath + "\" "; } //include directories ArrayList<String>& includes = projData.getIncludeDirs(); for(int i=0; i<includes.size(); i++) { String& includeDir = includes.get(i); if(includeDir.length()>0) { if(includeDir.charAt(0)!='/') { command += (String)"-I\"" + projectRoot + "/ext/" + includeDir + "\" "; } else { command += (String)"-I\"" + includeDir + "\" "; } } } //c++ flag if(fileExtension=="cpp" || fileExtension=="CPP" || fileExtension=="mm" || fileExtension=="MM" || fileExtension=="cxx" || fileExtension=="CXX" || fileExtension=="c++" || fileExtension=="C++") { command += "-stdlib=libstdc++ -std=c++11 "; } //assemble flag command += "-c "; //turn off fixit info command += "-fno-diagnostics-fixit-info -fno-caret-diagnostics "; //set disabled warning flags ArrayList<String>& disabledWarnings = projData.getProjectSettings().getDisabledWarnings(); for(int i=0; i<disabledWarnings.size(); i++) { String warning = disabledWarnings.get(i); if(warning.length()>2 && warning.charAt(0)=='-' && warning.charAt(1)=='W') { String noWarning = (String)"-Wno-" + warning.substring(2) + ' '; command += noWarning; } } //user-specified compiler flags ArrayList<String>& flags = projData.getProjectSettings().getAssemblerFlags(); for(int i=0; i<flags.size(); i++) { String& flag = flags.get(i); command += flag + " "; } //source file command += (String)"\"" + file + "\" "; //output file command += (String)"-o \"" + outputFile + "\""; return command; }