private static void gen_cppinterop(config_cppinterop cfg, string root, string top) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = false; using (XmlWriter f = XmlWriter.Create(Path.Combine(top, cfg.get_project_filename()), settings)) { f.WriteStartDocument(); f.WriteComment("Automatically generated"); f.WriteStartElement("Project", "http://schemas.microsoft.com/developer/msbuild/2003"); switch (cfg.env) { default: f.WriteAttributeString("ToolsVersion", ToolsVersion); break; } f.WriteAttributeString("DefaultTargets", "Build"); f.WriteStartElement("ItemGroup"); f.WriteAttributeString("Label", "ProjectConfigurations"); f.WriteStartElement("ProjectConfiguration"); f.WriteAttributeString("Include", string.Format("Debug|{0}", cfg.fixed_cpu())); f.WriteElementString("Configuration", "Debug"); f.WriteElementString("Platform", cfg.fixed_cpu()); f.WriteEndElement(); // ProjectConfiguration f.WriteStartElement("ProjectConfiguration"); f.WriteAttributeString("Include", string.Format("Release|{0}", cfg.fixed_cpu())); f.WriteElementString("Configuration", "Release"); f.WriteElementString("Platform", cfg.fixed_cpu()); f.WriteEndElement(); // ProjectConfiguration f.WriteEndElement(); // ItemGroup f.WriteStartElement("PropertyGroup"); f.WriteElementString("ProjectGuid", cfg.guid); f.WriteElementString("DefaultLanguage", "en-us"); f.WriteElementString("RootNamespace", "SQLitePCL.cppinterop"); switch (cfg.env) { case "net45": f.WriteElementString("Keyword", "ManagedCProj"); f.WriteElementString("TargetFrameworkVersion", "v4.5"); break; } f.WriteEndElement(); // PropertyGroup f.WriteStartElement("Import"); f.WriteAttributeString("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props"); f.WriteEndElement(); // Import f.WriteStartElement("PropertyGroup"); f.WriteElementString("ConfigurationType", "DynamicLibrary"); switch (cfg.env) { case "net45": f.WriteElementString("PlatformToolset", PlatformToolset); f.WriteElementString("CLRSupport", "true"); break; } f.WriteEndElement(); // PropertyGroup switch (cfg.env) { case "net45": f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); write_cpp_define(f, "NEED_TYPEDEFS"); write_cpp_define(f, "WIN32"); f.WriteEndElement(); // ClCompile f.WriteEndElement(); // ItemDefinitionGroup break; } f.WriteStartElement("PropertyGroup"); f.WriteAttributeString("Condition", string.Format(" '$(Configuration)' == 'Debug' ")); f.WriteElementString("UseDebugLibraries", "true"); f.WriteElementString("LinkKeyFile", @"..\key.snk"); f.WriteEndElement(); // PropertyGroup f.WriteStartElement("PropertyGroup"); f.WriteAttributeString("Condition", string.Format(" '$(Configuration)' == 'Release' ")); f.WriteElementString("UseDebugLibraries", "false"); f.WriteElementString("LinkKeyFile", @"..\key.snk"); f.WriteEndElement(); // PropertyGroup f.WriteStartElement("Import"); f.WriteAttributeString("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props"); f.WriteEndElement(); // Import f.WriteStartElement("PropertyGroup"); f.WriteElementString("TargetName", "SQLitePCL.cppinterop"); f.WriteElementString("OutDir", string.Format("$(Configuration)\\bin\\{0}\\", cfg.get_dest_subpath())); f.WriteElementString("IntDir", string.Format("$(Configuration)\\obj\\{0}\\", cfg.get_dest_subpath())); write_cpp_includepath(f, root, "sqlite3\\"); f.WriteElementString("LinkIncremental", "false"); f.WriteElementString("GenerateManifest", "false"); f.WriteEndElement(); // PropertyGroup f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); f.WriteElementString("PrecompiledHeader", "NotUsing"); f.WriteElementString("AdditionalOptions", "/bigobj %(AdditionalOptions)"); //f.WriteElementString("CompileAsWinRT", "false"); //f.WriteElementString("SDLCheck", "false"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("SubSystem", "Console"); f.WriteElementString("IgnoreAllDefaultLibraries", "false"); f.WriteElementString("AdditionalDependencies", string.Format("$(Configuration)\\bin\\{0}\\sqlite3.lib;%(AdditionalDependencies)", cfg.get_sqlite3_item().get_dest_subpath())); //f.WriteElementString("GenerateWindowsMetadata", "false"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup f.WriteStartElement("ItemDefinitionGroup"); f.WriteAttributeString("Condition", string.Format("'$(Configuration)'=='{0}' ", "Debug")); f.WriteStartElement("ClCompile"); f.WriteElementString("Optimization", "Disabled"); write_cpp_define(f, "_DEBUG"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("GenerateDebugInformation", "true"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); f.WriteAttributeString("Condition", string.Format("'$(Configuration)'=='{0}' ", "Release")); f.WriteElementString("Optimization", "MaxSpeed"); //f.WriteElementString("FunctionLevelLinking", "true"); //f.WriteElementString("IntrinsicFunctions", "true"); write_cpp_define(f, "NDEBUG"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("GenerateDebugInformation", "false"); //f.WriteElementString("EnableCOMDATFolding", "true"); //f.WriteElementString("OptimizeReferences", "true"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup f.WriteStartElement("ItemGroup"); f.WriteStartElement("ClCompile"); f.WriteAttributeString("Include", Path.Combine(root, "src\\cpp\\sqlite3_cx.cpp")); f.WriteEndElement(); // ClCompile f.WriteEndElement(); // ItemGroup switch (cfg.env) { case "net45": f.WriteStartElement("ItemGroup"); f.WriteStartElement("Reference"); f.WriteAttributeString("Include", "System"); f.WriteEndElement(); // Reference f.WriteEndElement(); // ItemGroup break; } #if not // TODO if this supported other ways of getting sqlite, like // _dynamic_sqlite3 or _static_sqlcipher, the following would be different f.WriteStartElement("ItemGroup"); f.WriteStartElement("ProjectReference"); { config_sqlite3 other = cfg.get_sqlite3_item(); f.WriteAttributeString("Include", other.get_project_filename()); f.WriteElementString("Project", other.guid); } f.WriteEndElement(); // ProjectReference f.WriteEndElement(); // ItemGroup #endif f.WriteStartElement("Import"); f.WriteAttributeString("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets"); f.WriteEndElement(); // Import switch (cfg.env) { case "net45": break; } f.WriteEndElement(); // Project f.WriteEndDocument(); } }
private static void gen_cppinterop(config_cppinterop cfg, string root, string top) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = false; using (XmlWriter f = XmlWriter.Create(Path.Combine(top, cfg.get_project_filename()), settings)) { f.WriteStartDocument(); f.WriteComment("Automatically generated"); f.WriteStartElement("Project", "http://schemas.microsoft.com/developer/msbuild/2003"); switch (cfg.env) { case "winrt81": case "wp81_rt": case "wp81_sl": f.WriteAttributeString("ToolsVersion", "12.0"); break; default: f.WriteAttributeString("ToolsVersion", "4.0"); break; } f.WriteAttributeString("DefaultTargets", "Build"); f.WriteStartElement("ItemGroup"); f.WriteAttributeString("Label", "ProjectConfigurations"); f.WriteStartElement("ProjectConfiguration"); f.WriteAttributeString("Include", string.Format("Debug|{0}", cfg.fixed_cpu())); f.WriteElementString("Configuration", "Debug"); f.WriteElementString("Platform", cfg.fixed_cpu()); f.WriteEndElement(); // ProjectConfiguration f.WriteStartElement("ProjectConfiguration"); f.WriteAttributeString("Include", string.Format("Release|{0}", cfg.fixed_cpu())); f.WriteElementString("Configuration", "Release"); f.WriteElementString("Platform", cfg.fixed_cpu()); f.WriteEndElement(); // ProjectConfiguration f.WriteEndElement(); // ItemGroup f.WriteStartElement("PropertyGroup"); f.WriteElementString("ProjectGuid", cfg.guid); f.WriteElementString("DefaultLanguage", "en-us"); f.WriteElementString("RootNamespace", "SQLitePCL.cppinterop"); switch (cfg.env) { case "net45": f.WriteElementString("Keyword", "ManagedCProj"); f.WriteElementString("TargetFrameworkVersion", "v4.5"); break; case "winrt80": f.WriteElementString("Keyword", "Win32Proj"); f.WriteElementString("MinimumVisualStudioVersion", "11.0"); f.WriteElementString("WindowsAppContainer", "true"); f.WriteElementString("AppContainerApplication", "true"); f.WriteElementString("ApplicationType", "Windows Store"); f.WriteElementString("ApplicationTypeRevision", "8.0"); break; case "winrt81": f.WriteElementString("Keyword", "Win32Proj"); f.WriteElementString("MinimumVisualStudioVersion", "12.0"); f.WriteElementString("WindowsAppContainer", "true"); f.WriteElementString("AppContainerApplication", "true"); f.WriteElementString("ApplicationType", "Windows Store"); f.WriteElementString("ApplicationTypeRevision", "8.1"); break; case "wp80": f.WriteElementString("WinMDAssembly", "true"); f.WriteElementString("MinimumVisualStudioVersion", "11.0"); break; case "wp81_rt": f.WriteElementString("Keyword", "Win32Proj"); f.WriteElementString("MinimumVisualStudioVersion", "12.0"); f.WriteElementString("AppContainerApplication", "true"); f.WriteElementString("ApplicationType", "Windows Phone"); f.WriteElementString("ApplicationTypeRevision", "8.1"); break; case "wp81_sl": f.WriteElementString("Keyword", "Win32Proj"); f.WriteElementString("MinimumVisualStudioVersion", "12.0"); f.WriteElementString("AppContainerApplication", "true"); f.WriteElementString("ApplicationType", "Windows Phone Silverlight"); f.WriteElementString("ApplicationTypeRevision", "8.1"); break; } f.WriteEndElement(); // PropertyGroup f.WriteStartElement("Import"); f.WriteAttributeString("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props"); f.WriteEndElement(); // Import f.WriteStartElement("PropertyGroup"); f.WriteElementString("ConfigurationType", "DynamicLibrary"); switch (cfg.env) { case "net45": f.WriteElementString("PlatformToolset", "v110"); f.WriteElementString("CLRSupport", "true"); break; case "winrt80": f.WriteElementString("PlatformToolset", "v110"); break; case "winrt81": f.WriteElementString("PlatformToolset", "v120"); break; case "wp80": f.WriteElementString("PlatformToolset", "v110_wp80"); break; case "wp81_rt": f.WriteElementString("PlatformToolset", "v120_wp81"); break; case "wp81_sl": f.WriteElementString("PlatformToolset", "v120"); break; } f.WriteEndElement(); // PropertyGroup switch (cfg.env) { case "net45": f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); write_cpp_define(f, "NEED_TYPEDEFS"); write_cpp_define(f, "WIN32"); f.WriteEndElement(); // ClCompile f.WriteEndElement(); // ItemDefinitionGroup break; case "winrt80": f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); write_cpp_define(f, "_WINRT_DLL"); f.WriteElementString("AdditionalUsingDirectories", "$(WindowsSDK_WindowsMetaData);$(AdditionalUsingDirectories)"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("AdditionalDependencies", "runtimeobject.lib;%(AdditionalDependencies)"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup break; case "winrt81": f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); write_cpp_define(f, "_WINRT_DLL"); f.WriteElementString("AdditionalUsingDirectories", "$(WindowsSDK_WindowsMetaData);$(AdditionalUsingDirectories)"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("AdditionalDependencies", "runtimeobject.lib;%(AdditionalDependencies)"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup break; case "wp80": f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); write_cpp_define(f, "_WINRT_DLL"); f.WriteElementString("AdditionalUsingDirectories", "$(WindowsSDK_WindowsMetaData);$(AdditionalUsingDirectories)"); f.WriteElementString("CompileAsWinRT", "true"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("GenerateWindowsMetadata", "true"); f.WriteElementString("IgnoreSpecificDefaultLibraries", "ole32.lib;%(IgnoreSpecificDefaultLibraries)"); f.WriteElementString("AdditionalDependencies", "WindowsPhoneCore.lib;runtimeobject.lib;PhoneAppModelHost.lib;%(AdditionalDependencies)"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup break; case "wp81_rt": f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); write_cpp_define(f, "_WINRT_DLL"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup break; case "wp81_sl": f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); write_cpp_define(f, "_WINRT_DLL"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup break; } f.WriteStartElement("PropertyGroup"); f.WriteAttributeString("Condition", string.Format(" '$(Configuration)' == 'Debug' ")); f.WriteElementString("UseDebugLibraries", "true"); f.WriteEndElement(); // PropertyGroup f.WriteStartElement("PropertyGroup"); f.WriteAttributeString("Condition", string.Format(" '$(Configuration)' == 'Release' ")); f.WriteElementString("UseDebugLibraries", "false"); f.WriteEndElement(); // PropertyGroup f.WriteStartElement("Import"); f.WriteAttributeString("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props"); f.WriteEndElement(); // Import f.WriteStartElement("PropertyGroup"); f.WriteElementString("TargetName", "SQLitePCL.cppinterop"); f.WriteElementString("OutDir", string.Format("$(Configuration)\\bin\\{0}\\", cfg.get_dest_subpath())); f.WriteElementString("IntDir", string.Format("$(Configuration)\\obj\\{0}\\", cfg.get_dest_subpath())); write_cpp_includepath(f, root, "sqlite3\\"); f.WriteElementString("LinkIncremental", "false"); f.WriteElementString("GenerateManifest", "false"); f.WriteEndElement(); // PropertyGroup f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); f.WriteElementString("PrecompiledHeader", "NotUsing"); f.WriteElementString("AdditionalOptions", "/bigobj %(AdditionalOptions)"); //f.WriteElementString("CompileAsWinRT", "false"); //f.WriteElementString("SDLCheck", "false"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("SubSystem", "Console"); f.WriteElementString("IgnoreAllDefaultLibraries", "false"); f.WriteElementString("AdditionalDependencies", string.Format("$(Configuration)\\bin\\{0}\\sqlite3.lib;%(AdditionalDependencies)", cfg.get_sqlite3_item().get_dest_subpath())); //f.WriteElementString("GenerateWindowsMetadata", "false"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup f.WriteStartElement("ItemDefinitionGroup"); f.WriteAttributeString("Condition", string.Format("'$(Configuration)'=='{0}' ", "Debug")); f.WriteStartElement("ClCompile"); f.WriteElementString("Optimization", "Disabled"); write_cpp_define(f, "_DEBUG"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("GenerateDebugInformation", "true"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup f.WriteStartElement("ItemDefinitionGroup"); f.WriteStartElement("ClCompile"); f.WriteAttributeString("Condition", string.Format("'$(Configuration)'=='{0}' ", "Release")); f.WriteElementString("Optimization", "MaxSpeed"); //f.WriteElementString("FunctionLevelLinking", "true"); //f.WriteElementString("IntrinsicFunctions", "true"); write_cpp_define(f, "NDEBUG"); f.WriteEndElement(); // ClCompile f.WriteStartElement("Link"); f.WriteElementString("GenerateDebugInformation", "false"); //f.WriteElementString("EnableCOMDATFolding", "true"); //f.WriteElementString("OptimizeReferences", "true"); f.WriteEndElement(); // Link f.WriteEndElement(); // ItemDefinitionGroup f.WriteStartElement("ItemGroup"); f.WriteStartElement("ClCompile"); f.WriteAttributeString("Include", Path.Combine(root, "src\\cpp\\sqlite3_cx.cpp")); f.WriteEndElement(); // ClCompile f.WriteEndElement(); // ItemGroup switch (cfg.env) { case "winrt80": break; case "winrt81": break; case "wp81_rt": break; case "net45": f.WriteStartElement("ItemGroup"); f.WriteStartElement("Reference"); f.WriteAttributeString("Include", "System"); f.WriteEndElement(); // Reference f.WriteEndElement(); // ItemGroup break; case "wp80": f.WriteStartElement("ItemGroup"); f.WriteStartElement("Reference"); f.WriteAttributeString("Include", "platform.winmd"); f.WriteElementString("IsWinMDFile", "true"); f.WriteElementString("Private", "false"); f.WriteEndElement(); // Reference f.WriteEndElement(); // ItemGroup break; case "wp81_sl": break; } #if not // TODO if this supported other ways of getting sqlite, like // _dynamic_sqlite3 or _static_sqlcipher, the following would be different f.WriteStartElement("ItemGroup"); f.WriteStartElement("ProjectReference"); { config_sqlite3 other = cfg.get_sqlite3_item(); f.WriteAttributeString("Include", other.get_project_filename()); f.WriteElementString("Project", other.guid); } f.WriteEndElement(); // ProjectReference f.WriteEndElement(); // ItemGroup #endif f.WriteStartElement("Import"); f.WriteAttributeString("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets"); f.WriteEndElement(); // Import switch (cfg.env) { case "winrt80": break; case "winrt81": break; case "wp81_rt": break; case "net45": break; case "wp80": f.WriteStartElement("Import"); f.WriteAttributeString("Project", "$(MSBuildExtensionsPath)\\Microsoft\\WindowsPhone\\v$(TargetPlatformVersion)\\Microsoft.Cpp.WindowsPhone.$(TargetPlatformVersion).targets"); f.WriteEndElement(); // Import break; case "wp81_sl": break; } f.WriteEndElement(); // Project f.WriteEndDocument(); } }