/// <summary> /// Enumerates list of libraries that should be linked with project build file. /// </summary> /// <param name="platform">One of the target platforms.</param> /// <param name="configuration">One of the target configurations.</param> public virtual IEnumerable <DependencyFile> EnumerateLinkedLibraries(TargetPlatform platform, TargetConfiguration configuration) { foreach (var libraryFile in Directory.EnumerateFiles(GetLocation())) { if (!MatchesPlatformConfiguration(libraryFile, platform, configuration)) { continue; } var libraryFileExtension = (Path.GetExtension(libraryFile) ?? "").ToLowerInvariant(); if (TargetInfo.IsMicrosoftPlatform(platform)) { switch (libraryFileExtension) { case ".lib": yield return(new DependencyFile(libraryFile, DependencyFileType.StaticLibrary)); break; } } else if (TargetInfo.IsApplePlatform(platform)) { // TODO: '.framework' bundles on Apple platforms. switch (libraryFileExtension) { case ".a": yield return(new DependencyFile(libraryFile, DependencyFileType.StaticLibrary)); break; case ".dylib": yield return(new DependencyFile(libraryFile, DependencyFileType.DynamicLibrary)); break; } } else if (TargetInfo.IsPosixPlatform(platform)) { switch (libraryFileExtension) { case ".a": yield return(new DependencyFile(libraryFile, DependencyFileType.StaticLibrary)); break; case ".so": yield return(new DependencyFile(libraryFile, DependencyFileType.DynamicLibrary)); break; } } else { throw new NotSupportedException("Unknown target platform for depenedency linked libraries."); } } }
/// <summary> /// Enumerates list of files that should be copied to project build output directory. /// </summary> /// <param name="platform">One of the target platforms.</param> /// <param name="configuration">One of the target configurations.</param> public virtual IEnumerable <DependencyFile> EnumerateCopyFiles(TargetPlatform platform, TargetConfiguration configuration) { foreach (var copyFilePath in Directory.EnumerateFiles(GetLocation())) { if (!MatchesPlatformConfiguration(copyFilePath, platform, configuration)) { continue; } var copyFileExtension = (Path.GetExtension(copyFilePath) ?? "").ToLowerInvariant(); if (TargetInfo.IsMicrosoftPlatform(platform)) { switch (copyFileExtension) { case ".dll": yield return(new DependencyFile(copyFilePath, DependencyFileType.DynamicLibrary)); break; } } else if (TargetInfo.IsApplePlatform(platform)) { switch (copyFileExtension) { case ".dylib": yield return(new DependencyFile(copyFilePath, DependencyFileType.DynamicLibrary)); break; } } else if (TargetInfo.IsPosixPlatform(platform)) { switch (copyFileExtension) { case ".so": yield return(new DependencyFile(copyFilePath, DependencyFileType.DynamicLibrary)); break; } } else { throw new NotSupportedException("Unknown target platform for depenedency copy files."); } } }
/// <summary> /// Returns directory of the compilation result. /// </summary> /// <param name="platform">One of the target platforms.</param> /// <param name="configuration">One of the target configurations.</param> public virtual string GetOutputFileName(TargetPlatform platform, TargetConfiguration configuration) { Debug.Assert(platform != TargetPlatform.Unknown); string outputExtension = null, outputPrefix = null; if (TargetInfo.IsMicrosoftPlatform(platform)) { switch (GetBuildType(platform, configuration)) { case ProjectBuildType.Application: outputPrefix = ""; outputExtension = ".exe"; break; case ProjectBuildType.DynamicLibrary: outputPrefix = ""; outputExtension = ".dll"; break; case ProjectBuildType.StaticLibrary: outputPrefix = ""; outputExtension = ".lib"; break; } } else if (TargetInfo.IsApplePlatform(platform)) { switch (GetBuildType(platform, configuration)) { case ProjectBuildType.Application: outputPrefix = ""; outputExtension = ".app"; break; case ProjectBuildType.DynamicLibrary: outputPrefix = ""; outputExtension = ".dylib"; break; case ProjectBuildType.StaticLibrary: outputPrefix = "lib"; outputExtension = ".a"; break; } } else if (TargetInfo.IsPosixPlatform(platform)) { switch (GetBuildType(platform, configuration)) { case ProjectBuildType.Application: outputPrefix = ""; outputExtension = ""; break; case ProjectBuildType.DynamicLibrary: outputPrefix = "lib"; outputExtension = ".so"; break; case ProjectBuildType.StaticLibrary: outputPrefix = "lib"; outputExtension = ".a"; break; } } else { throw new NotSupportedException("Unknown target platform for project output path."); } return(outputPrefix + GetName() + outputExtension); }