Exemple #1
0
		/// <summary>
		/// Run with following arguments:
		/// 
		/// </summary>
		/// <param name="args"></param>
		/// <returns></returns>
		static int Main ( string[] args )
		{
			Thread.CurrentThread.CurrentCulture	=	System.Globalization.CultureInfo.InvariantCulture;
			Log.AddListener( new StdLogListener() );

			var options = new BuildOptions();
			var parser = new CommandLineParser( options );


			try {

				if ( args.Any( a => a=="/help" )) {
					PrintHelp( parser );
					return 0;
				}

				if ( !parser.ParseCommandLine( args ) ) {
					return 1;
				}

				Builder.Build( options );


			} catch ( Exception ex ) {
				parser.ShowError( ex.Message );
				return 1;
			}

			return 0;
		}
		/// <summary>
		/// 
		/// </summary>
		/// <param name="options"></param>
		public BuildContext ( BuildOptions options, IniData iniData )
		{
			this.Options	=	options;

			Log.Message("Source directories:");

				contentPaths	=	new List<string>();
				contentPaths.Add( options.FullInputDirectory );
				contentPaths.AddRange( GetAllKeysFromSection( iniData, "ContentDirectories" ).Select( p => ResolveDirectory( p )).Where( p1 => p1!=null ) );

				foreach ( var dir in contentPaths ) {
					Log.Message("  {0}", dir );
				}

			Log.Message("");


			Log.Message("Binary directories:");
				binaryPaths	=	new List<string>();
				binaryPaths.AddRange( GetAllKeysFromSection( iniData, "BinaryDirectories" ).Select( p => ResolveDirectory( p )).Where( p1 => p1!=null ) );

				foreach ( var dir in binaryPaths ) {
					Log.Message("  {0}", dir );
				}
			Log.Message("");


			
			Log.Message("Target directory:");
			Log.Message("  {0}", options.FullOutputDirectory );
			Log.Message("");

			
			Log.Message("Temp directory:");
			Log.Message("  {0}", options.FullTempDirectory );

			Log.Message("");
			 
		}
Exemple #3
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="options"></param>
		public static void Build ( BuildOptions options )
		{
			Log.Message("");
			Log.Message("-------- Build started : {0} --------", options.InputDirectory );

			options.CheckOptionsAndMakeDirs();

			Log.Message("Reading '.content'...");
			//
			//	Parse INI file :
			//
			var ip = new StreamIniDataParser();
			ip.Parser.Configuration.AllowDuplicateSections	=	true;
			ip.Parser.Configuration.AllowDuplicateKeys		=	true;
			ip.Parser.Configuration.CommentString			=	"#";
			ip.Parser.Configuration.OverrideDuplicateKeys	=	true;
			ip.Parser.Configuration.KeyValueAssigmentChar	=	'=';
			ip.Parser.Configuration.AllowKeysWithoutValues	=	true;

			var iniData = ip.ReadData( new StreamReader( options.ContentIniFile ) );


			//
			//	Setup builder :
			//	
			var bindings = AssetProcessorBinding.GatherAssetProcessors();

			Log.Message("Asset processors:");
			foreach ( var bind in bindings ) {
				Log.Message("  {0,-20} - {1}", bind.Name, bind.Type.Name );
			}
			Log.Message("");

			var builder = new Builder( bindings );

			var result  = builder.Build( options, iniData );

			Log.Message("-------- {5} total, {0} succeeded, {1} failed, {2} up-to-date, {3} ignored, {4} skipped --------", 
				result.Succeded,
				result.Failed,
				result.UpToDate,
				result.Ignored,
				result.Skipped,
				result.Total );

			Log.Message("");

			if (result.Failed>0) {
				throw new BuildException("Build errors");
			}
		}
Exemple #4
0
		static Builder()
		{
			Options	=	new BuildOptions();
		}
Exemple #5
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="sourceFolder"></param>
		/// <param name="targetFolder"></param>
		/// <param name="force"></param>
		public BuildResult Build ( BuildOptions options, IniData iniData )
		{
			BuildResult result	=	new BuildResult();
	
			context				=	new BuildContext( options, iniData );
			var ignorePatterns	=	new string[0];

			if ( iniData.Sections.ContainsSection("Ignore") ) {
				ignorePatterns	=	iniData.Sections["Ignore"]
									.Select( element => element.KeyName )
									.Select( key => ContentUtils.BackslashesToSlashes( key ) )
									.ToArray();
			}


			if ( iniData.Sections.ContainsSection("Download") ) {
				Download( context, iniData.Sections["Download"], result );
			}


			//
			//	gather files on source folder ignoring 
			//	files that match ignore pattern :
			//
			Log.Message("Gathering files...");
			var assetSources =	GatherAssetFiles( ignorePatterns, iniData, context, ref result );
			Log.Message("");


			//
			//	Check hash collisions :
			//
			var collisions	=	assetSources
								.GroupBy( file0 => file0.TargetName )
								.Where( fileGroup1 => fileGroup1.Count() > 1 )
								.Distinct()
								.ToArray();

			if (collisions.Any()) {
				Log.Error("Hash collisions detected:");
				int collisionCount = 0;
				foreach ( var collision in collisions ) {
					Log.Error("  [{0}] {1}", collisionCount++, collision.Key);
					foreach ( var collisionEntry in collision ) {
						Log.Error( "    {0}",  collisionEntry.FullSourcePath );
					}
				}
				throw new BuildException("Hash collisions detected");
			}


			//
			//	remove stale built content :
			//
			Log.Message("Cleaning stale content up...");
			CleanStaleContent( options.FullOutputDirectory, assetSources );			
			Log.Message("");


			//
			//	Build everything :
			//
			foreach ( var assetSource in assetSources ) {
				
				var proc = assetSource.CreateProcessor();
				BuildAsset( proc, assetSource.BuildArguments, assetSource, ref result );

			}

			return result;
		}
Exemple #6
0
 static Builder()
 {
     Options = new BuildOptions();
 }
Exemple #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sourceFolder"></param>
        /// <param name="targetFolder"></param>
        /// <param name="force"></param>
        BuildResult Build(BuildOptions options, IniData iniData)
        {
            BuildResult result = new BuildResult();

            context = new BuildContext(options, iniData);
            var ignorePatterns = new string[0];

            if (iniData.Sections.ContainsSection("Ignore"))
            {
                ignorePatterns = iniData.Sections["Ignore"]
                                 .Select(element => element.KeyName)
                                 .Select(key => ContentUtils.BackslashesToSlashes(key))
                                 .ToArray();
            }


            if (iniData.Sections.ContainsSection("Download"))
            {
                Download(context, iniData.Sections["Download"], result);
            }


            //
            //	gather files on source folder ignoring
            //	files that match ignore pattern :
            //
            Log.Message("Gathering files...");
            var assetSources = new List <AssetSource>();

            assetSources.AddRange(GatherRequiredShaders(context, result));
            assetSources.AddRange(GatherAssetFiles(ignorePatterns, iniData, context, ref result));
            Log.Message("");

            File.WriteAllLines(Path.Combine(options.FullOutputDirectory, "assetdb"), assetSources.Select(asset => asset.KeyPath).OrderBy(n => n));


            //
            //	Check hash collisions :
            //
            var collisions = assetSources
                             .GroupBy(file0 => file0.TargetName)
                             .Where(fileGroup1 => fileGroup1.Count() > 1)
                             .Distinct()
                             .ToArray();

            if (collisions.Any())
            {
                Log.Error("Hash collisions detected:");
                int collisionCount = 0;
                foreach (var collision in collisions)
                {
                    Log.Error("  [{0}] {1}", collisionCount++, collision.Key);
                    foreach (var collisionEntry in collision)
                    {
                        Log.Error("    {0}", collisionEntry.FullSourcePath);
                    }
                }
                throw new BuildException("Hash collisions detected");
            }


            //
            //	remove stale built content :
            //
            Log.Message("Cleaning stale content up...");
            CleanStaleContent(options.FullOutputDirectory, assetSources);
            Log.Message("");


            //
            //	Build everything :
            //
            foreach (var assetSource in assetSources)
            {
                var proc = assetSource.CreateProcessor();
                BuildAsset(proc, assetSource.BuildArguments, assetSource, ref result);
            }


            //
            //	Build megatexture
            //
            BuildMegatexture(ref result);


            return(result);
        }