uvmac/setup/makefiles/msvc.c
InvisibleUp a8e9bc990e Started a rewrite of the makefile generator.
Probably not worth it, let's be honest...
2019-07-27 14:58:45 -04:00

2006 lines
51 KiB
C

/*
WRMSCFLS.i
Copyright (C) 2007 Paul C. Pratt
You can redistribute this file and/or modify it under the terms
of version 2 of the GNU General Public License as published by
the Free Software Foundation. You should have received a copy
of the license along with this file; see the file COPYING.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
license for more details.
*/
/*
WRite Microsoft C specific FiLeS
*/
LOCALPROC WriteMSVCQuotedDefine(char *s)
{
WriteCStrToDestFile(" /D ");
WriteQuoteToDestFile();
WriteCStrToDestFile(s);
WriteQuoteToDestFile();
}
LOCALPROC WriteCLexeFlags(void)
{
blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
WriteCStrToDestFile("/nologo");
#if 0
if (gbk_dbg_on != gbo_dbg) {
/* Optimizations : Minimize Size */
WriteCStrToDestFile(" /O1");
} else
#endif
{
/* Maximize chance of correct compile */
/* Optimizations : Disabled */
WriteCStrToDestFile(" /Od");
}
if (WinCE) {
WriteCStrToDestFile(
" /D _WIN32_WCE=420 /D WIN32_PLATFORM_PSPC=400"
" /D UNDER_CE=420");
if (gbk_cpufam_arm == gbo_cpufam) {
WriteCStrToDestFile(
" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\"");
} else {
WriteCStrToDestFile(
" /D \"_i386_\" /D \"_X86_\" /D \"x86\" /D \"i_386_\"");
}
} else {
WriteMSVCQuotedDefine("WIN32");
WriteMSVCQuotedDefine("_WINDOWS");
}
if (gbk_dbg_on == gbo_dbg) {
WriteMSVCQuotedDefine("_DEBUG");
} else {
WriteMSVCQuotedDefine("NDEBUG");
}
if (WinCE) {
WriteMSVCQuotedDefine("UNICODE");
WriteMSVCQuotedDefine("_UNICODE");
} else {
if (ide_vers >= 6000) {
WriteMSVCQuotedDefine("_MBCS");
}
}
if ((gbk_dbg_on == gbo_dbg) && (gbk_targ_wx86 == cur_targ)) {
WriteCStrToDestFile(" /Gm"); /* minimal rebuild */
}
/* WriteCStrToDestFile(" /GX"); enable exception handling */
if (WinCE) {
if (gbk_cpufam_x86 == gbo_cpufam) {
WriteCStrToDestFile(" /Gs8192");
/* in the default template. why? */
}
}
if (gbk_dbg_on == gbo_dbg) {
if (ide_vers >= 7000) {
WriteCStrToDestFile(" /RTC1");
} else {
WriteCStrToDestFile(" /GZ");
}
} else {
WriteCStrToDestFile(" /GF"); /* string pooling */
}
if (WinCE) {
if (gbk_cpufam_arm == gbo_cpufam) {
if (gbk_dbg_on == gbo_dbg) {
WriteCStrToDestFile(" /M$(CECrtMTDebug)");
} else {
WriteCStrToDestFile(" /MC");
}
}
/*
default template doesn't do this for
x86. why not?
*/
} else {
if (gbk_dbg_on == gbo_dbg) {
if ((ide_vers >= 8000)
|| (gbk_cpufam_x64 == gbo_cpufam))
{
WriteCStrToDestFile(" /MTd");
} else {
WriteCStrToDestFile(" /MLd");
}
} else {
if ((ide_vers >= 8000)
|| (gbk_cpufam_x64 == gbo_cpufam))
{
WriteCStrToDestFile(" /MT");
} else {
WriteCStrToDestFile(" /ML");
}
}
}
#if 0
if (ide_vers < 8000) {
WriteCStrToDestFile(" /GS");
/* became default later */
/*
perhaps instead use /GS- in later versions
maybe this should be an option set in SPBASDEF
*/
}
#endif
WriteCStrToDestFile(" /W4");
WriteCStrToDestFile(" /c");
if ((ide_vers >= 7000) && (ide_vers < 9000)) {
/* Detect 64-bit Portability Issues */
WriteCStrToDestFile(" /Wp64");
}
if (ide_vers >= 7000) {
/* and probably earlier, at least back to 6.0 */
/* Enable Function-Level Linking */
WriteCStrToDestFile(" /Gy");
}
if (gbk_dbg_on == gbo_dbg) {
/* Debug Information Format */
if (WinCE || (gbk_targ_wx64 == cur_targ)) {
WriteCStrToDestFile(" /Zi");
} else {
WriteCStrToDestFile(" /ZI");
}
}
}
LOCALPROC WriteRCexeFlags(void)
{
blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
WriteCStrToDestFile("/l 0x409 /d ");
WriteQuoteToDestFile();
if (gbk_dbg_on == gbo_dbg) {
WriteCStrToDestFile("_DEBUG");
} else {
WriteCStrToDestFile("NDEBUG");
}
WriteQuoteToDestFile();
if (WinCE) {
WriteCStrToDestFile(
" /d UNDER_CE=420 /d _WIN32_WCE=420 /d \"UNICODE\""
" /d \"_UNICODE\" /d WIN32_PLATFORM_PSPC=400 /r");
if (gbk_cpufam_arm == gbo_cpufam) {
WriteCStrToDestFile(
" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\"");
} else {
WriteCStrToDestFile(
" /d \"_i386_\" /d \"_X86_\" /d \"x86\"");
}
}
}
LOCALPROC WriteFileToMSVCSource(MyProc p)
{
WriteDestFileLn("# Begin Source File");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("SOURCE=");
p();
WriteEndDestFileLn();
WriteDestFileLn("# End Source File");
}
LOCALPROC WriteDocTypeMSVCresource(void)
{
WriteFileToMSVCSource(WriteDocTypeIconFilePath);
}
LOCALPROC WriteMSVCBeginGroup(char *group, char *filter)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("# Begin Group ");
WriteQuoteToDestFile();
WriteCStrToDestFile(group);
WriteQuoteToDestFile();
WriteEndDestFileLn();
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("# PROP Default_Filter ");
WriteQuoteToDestFile();
WriteCStrToDestFile(filter);
WriteQuoteToDestFile();
WriteEndDestFileLn();
}
LOCALPROC WriteMSVCEndGroup(void)
{
WriteDestFileLn("# End Group");
}
LOCALPROC WriteMSVCdbgLevelName(void)
{
char *s;
switch (gbo_dbg) {
case gbk_dbg_on:
s = "Debug";
break;
case gbk_dbg_test:
s = "Test";
break;
case gbk_dbg_off:
s = "Release";
break;
default:
s = "(unknown Debug Level)";
break;
}
WriteCStrToDestFile(s);
}
LOCALPROC WriteMSVCTargetName00(void)
{
blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
WriteCStrToDestFile("Win32");
if (WinCE) {
if (gbk_cpufam_arm == gbo_cpufam) {
WriteCStrToDestFile(" (WCE ARMV4)");
} else {
WriteCStrToDestFile(" (WCE emulator)");
}
} else {
WriteCStrToDestFile(" (x86)");
}
}
LOCALPROC WriteMSVCTargetName0(void)
{
WriteStrAppAbbrev();
WriteCStrToDestFile(" - ");
WriteMSVCTargetName00();
WriteSpaceToDestFile();
WriteMSVCdbgLevelName();
}
LOCALPROC WriteMSVCTargetName(void)
{
WriteQuoteToDestFile();
WriteMSVCTargetName0();
WriteQuoteToDestFile();
}
LOCALPROC WriteMSVCMakefileName(void)
{
WriteQuoteToDestFile();
WriteStrAppAbbrev();
if (gbk_targfam_wnce == gbo_targfam) {
WriteCStrToDestFile(".vcn");
} else {
WriteCStrToDestFile(".mak");
}
WriteQuoteToDestFile();
}
LOCALPROC WriteMSVCQuotedProp(char *p, char *s)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("# PROP ");
WriteCStrToDestFile(p);
WriteSpaceToDestFile();
WriteQuoteToDestFile();
WriteCStrToDestFile(s);
WriteQuoteToDestFile();
WriteEndDestFileLn();
}
LOCALPROC DoSrcFileMSVCAddFile(void)
{
WriteDestFileLn("# Begin Source File");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("SOURCE=");
WriteSrcFileFilePath();
WriteEndDestFileLn();
#if 0
if (gbk_dbg_on != gbo_dbg) {
if (fast) {
WriteDestFileLn("# ADD CPP /O2 /Ob2");
}
}
#endif
WriteDestFileLn("# End Source File");
}
LOCALPROC DoSrcFileMSVCAddHeader(void)
{
if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
WriteDestFileLn("# Begin Source File");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("SOURCE=");
WriteSrcFileHeaderPath();
WriteEndDestFileLn();
WriteDestFileLn("# End Source File");
}
}
LOCALPROC DoExtraHeaderMSVCAdd(void)
{
WriteDestFileLn("# Begin Source File");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("SOURCE=");
WriteExtraHeaderFilePath();
WriteEndDestFileLn();
WriteDestFileLn("# End Source File");
}
LOCALFUNC char * MSVCWorkspaceExt(void)
{
return (gbk_targfam_wnce == gbo_targfam)
? ".vcw" : ".dsw";
}
LOCALFUNC char * MSVCProjectExt(void)
{
return (gbk_targfam_wnce == gbo_targfam)
? ".vcp" : ".dsp";
}
LOCALPROC WriteMSVCWorkSpaceFile(void)
{
blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
if (WinCE) {
WriteDestFileLn(
"Microsoft eMbedded Visual Tools Workspace File,"
" Format Version 4.00");
} else {
WriteDestFileLn(
"Microsoft Developer Studio Workspace File,"
" Format Version 6.00");
}
WriteDestFileLn(
"# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!");
WriteBlankLineToDestFile();
WriteDestFileLn(
"############################################################"
"###################");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("Project: ");
WriteQuoteToDestFile();
WriteStrAppAbbrev();
WriteQuoteToDestFile();
WriteCStrToDestFile("=.");
WriteBackSlashToDestFile();
WriteStrAppAbbrev();
WriteCStrToDestFile(MSVCProjectExt());
WriteCStrToDestFile(" - Package Owner=<4>");
WriteEndDestFileLn();
WriteBlankLineToDestFile();
WriteDestFileLn("Package=<5>");
WriteDestFileLn("{{{");
WriteDestFileLn("}}}");
WriteBlankLineToDestFile();
WriteDestFileLn("Package=<4>");
WriteDestFileLn("{{{");
WriteDestFileLn("}}}");
WriteBlankLineToDestFile();
WriteDestFileLn(
"############################################################"
"###################");
WriteBlankLineToDestFile();
WriteDestFileLn("Global:");
WriteBlankLineToDestFile();
WriteDestFileLn("Package=<5>");
WriteDestFileLn("{{{");
WriteDestFileLn("}}}");
WriteBlankLineToDestFile();
WriteDestFileLn("Package=<3>");
WriteDestFileLn("{{{");
WriteDestFileLn("}}}");
WriteBlankLineToDestFile();
WriteDestFileLn(
"############################################################"
"###################");
WriteBlankLineToDestFile();
}
LOCALPROC WriteMSVCProjectFile(void)
{
blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
WriteBgnDestFileLn();
WriteCStrToDestFile("# Microsoft ");
if (WinCE) {
WriteCStrToDestFile("eMbedded Visual Tools");
} else {
WriteCStrToDestFile("Developer Studio");
}
WriteCStrToDestFile(" Project File - Name=");
WriteQuoteToDestFile();
WriteStrAppAbbrev();
WriteQuoteToDestFile();
WriteCStrToDestFile(" - Package Owner=<4>");
WriteEndDestFileLn();
if (WinCE) {
WriteDestFileLn(
"# Microsoft eMbedded Visual Tools Generated Build File,"
" Format Version 6.02");
} else {
WriteDestFileLn(
"# Microsoft Developer Studio Generated Build File,"
" Format Version 6.00");
}
WriteDestFileLn("# ** DO NOT EDIT **");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("# TARGTYPE ");
WriteQuoteToDestFile();
WriteMSVCTargetName00();
WriteCStrToDestFile(" Application");
WriteQuoteToDestFile();
if (WinCE) {
if (gbk_cpufam_arm == gbo_cpufam) {
WriteCStrToDestFile(" 0xa301");
} else {
WriteCStrToDestFile(" 0xa601");
}
} else {
WriteCStrToDestFile(" 0x0101");
}
WriteEndDestFileLn();
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("CFG=");
/* WriteAppVariationStr(); */
WriteMSVCTargetName0();
WriteEndDestFileLn();
WriteDestFileLn(
"!MESSAGE This is not a valid makefile."
" To build this project using NMAKE,");
WriteDestFileLn("!MESSAGE use the Export Makefile command and run");
WriteDestFileLn("!MESSAGE ");
WriteBgnDestFileLn();
WriteCStrToDestFile("!MESSAGE NMAKE /f ");
WriteMSVCMakefileName();
WriteCStrToDestFile(".");
WriteEndDestFileLn();
WriteDestFileLn("!MESSAGE ");
WriteDestFileLn(
"!MESSAGE You can specify a configuration when running NMAKE");
WriteDestFileLn(
"!MESSAGE by defining the macro CFG on the command line."
" For example:");
WriteDestFileLn("!MESSAGE ");
WriteBgnDestFileLn();
WriteCStrToDestFile("!MESSAGE NMAKE /f ");
WriteMSVCMakefileName();
WriteCStrToDestFile(" CFG=");
WriteMSVCTargetName();
WriteEndDestFileLn();
WriteDestFileLn("!MESSAGE ");
WriteDestFileLn("!MESSAGE Possible choices for configuration are:");
WriteDestFileLn("!MESSAGE ");
WriteBgnDestFileLn();
WriteCStrToDestFile("!MESSAGE ");
WriteMSVCTargetName();
WriteCStrToDestFile(" (based on ");
WriteQuoteToDestFile();
WriteMSVCTargetName00();
WriteCStrToDestFile(" Application");
WriteQuoteToDestFile();
WriteCStrToDestFile(")");
WriteEndDestFileLn();
WriteDestFileLn("!MESSAGE ");
WriteBlankLineToDestFile();
WriteDestFileLn("# Begin Project");
WriteDestFileLn("# PROP AllowPerConfigDependencies 0");
WriteMSVCQuotedProp("Scc_ProjName", "");
WriteMSVCQuotedProp("Scc_LocalPath", "");
if (WinCE) {
WriteDestFileLn("# PROP ATL_Project 2"); /* not needed ? */
}
WriteBgnDestFileLn();
WriteCStrToDestFile("CPP=");
WriteCompileCExec();
WriteEndDestFileLn();
WriteDestFileLn("MTL=midl.exe");
WriteDestFileLn("RSC=rc.exe");
WriteDestFileLn("# PROP BASE Use_MFC 0");
WriteDestFileLn("# PROP BASE Use_Debug_Libraries 1");
WriteMSVCQuotedProp("BASE Output_Dir", "Debug");
WriteMSVCQuotedProp("BASE Intermediate_Dir", "Debug");
WriteMSVCQuotedProp("BASE Target_Dir", "");
WriteDestFileLn("# PROP Use_MFC 0");
if (gbk_dbg_on == gbo_dbg) {
WriteDestFileLn("# PROP Use_Debug_Libraries 1");
} else {
WriteDestFileLn("# PROP Use_Debug_Libraries 0");
}
WriteMSVCQuotedProp("Output_Dir", obj_d_name);
WriteMSVCQuotedProp("Intermediate_Dir", obj_d_name);
WriteDestFileLn("# PROP Ignore_Export_Lib 0");
WriteMSVCQuotedProp("Target_Dir", "");
WriteDestFileLn("# ADD BASE CPP");
WriteBgnDestFileLn();
WriteCStrToDestFile("# ADD CPP ");
WriteCLexeFlags();
if (! WinCE) {
WriteCStrToDestFile(" /FD");
}
WriteCStrToDestFile(" /I ");
WriteQuoteToDestFile();
Write_cfg_d_ToDestFile();
WriteQuoteToDestFile();
WriteEndDestFileLn();
WriteDestFileLn("# ADD BASE MTL");
WriteBgnDestFileLn();
WriteCStrToDestFile("# ADD MTL /nologo /D ");
WriteQuoteToDestFile();
if (gbk_dbg_on == gbo_dbg) {
WriteCStrToDestFile("_DEBUG");
} else {
WriteCStrToDestFile("NDEBUG");
}
WriteQuoteToDestFile();
WriteCStrToDestFile(" /mktyplib203 /win32");
if (WinCE) {
WriteCStrToDestFile(" /o \"NUL\"");
}
WriteEndDestFileLn();
WriteDestFileLn("# ADD BASE RSC");
WriteBgnDestFileLn();
WriteCStrToDestFile("# ADD RSC ");
WriteRCexeFlags();
WriteCStrToDestFile(" /I ");
WriteQuoteToDestFile();
Write_src_d_ToDestFile();
WriteQuoteToDestFile();
WriteEndDestFileLn();
WriteDestFileLn("BSC32=bscmake.exe");
WriteDestFileLn("# ADD BASE BSC32");
WriteDestFileLn("# ADD BSC32 /nologo");
WriteDestFileLn("LINK32=link.exe");
WriteDestFileLn("# ADD BASE LINK32");
WriteBgnDestFileLn();
WriteCStrToDestFile("# ADD LINK32");
if (WinCE) {
WriteCStrToDestFile(
" commctrl.lib coredll.lib aygshell.lib Mmtimer.lib");
} else {
WriteCStrToDestFile(
" kernel32.lib user32.lib gdi32.lib"
" winspool.lib comdlg32.lib advapi32.lib shell32.lib"
" ole32.lib oleaut32.lib uuid.lib winmm.lib");
}
WriteCStrToDestFile(" /nologo");
if (WinCE) {
WriteCStrToDestFile(
" /base:\"0x00010000\" /stack:0x10000,0x1000"
" /entry:\"WinMainCRTStartup\""
" /nodefaultlib:\"$(CENoDefaultLib)\"");
}
WriteCStrToDestFile(" /subsystem:");
if (WinCE) {
WriteCStrToDestFile("$(CESubsystem)");
} else {
WriteCStrToDestFile("windows");
}
if (gbk_dbg_on == gbo_dbg) {
WriteCStrToDestFile(" /debug");
} else {
WriteCStrToDestFile(" /incremental:no");
}
WriteCStrToDestFile(" /machine:");
if (gbk_cpufam_arm == gbo_cpufam) {
WriteCStrToDestFile("ARM");
} else {
if (WinCE) {
WriteCStrToDestFile("IX86");
} else {
WriteCStrToDestFile("I386"); /* maybe should be IX86 ? */
}
}
WriteCStrToDestFile(" /out:");
WriteQuoteToDestFile();
WriteAppNameStr();
WriteQuoteToDestFile();
if (WinCE) {
if (gbk_cpufam_arm == gbo_cpufam) {
WriteCStrToDestFile(" /align:\"4096\"");
/* is this really needed ? */
} else {
WriteCStrToDestFile(
" $(CEx86Corelibc) /nodefaultlib:\"OLDNAMES.lib\"");
}
}
if (gbk_dbg_on == gbo_dbg) {
WriteCStrToDestFile(" /pdbtype:sept");
}
WriteEndDestFileLn();
WriteDestFileLn("# Begin Target");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("# Name ");
WriteMSVCTargetName();
WriteEndDestFileLn();
WriteMSVCBeginGroup("Source Files",
"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat");
DoAllSrcFilesWithSetup(
DoSrcFileMSVCAddFile);
WriteFileToMSVCSource(WriteMainRsrcSrcPath);
WriteMSVCEndGroup();
WriteMSVCBeginGroup("Header Files", "h;hpp;hxx;hm;inl");
DoAllSrcFilesWithSetup(
DoSrcFileMSVCAddHeader);
WriteMSVCEndGroup();
WriteMSVCBeginGroup("Resource Files",
"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe");
DoAllDocTypesWithSetup(WriteDocTypeMSVCresource);
WriteMSVCEndGroup();
WriteMSVCBeginGroup("Include Files", "h;hpp;hxx;hm;inl");
DoAllExtraHeaders2WithSetup(DoExtraHeaderMSVCAdd);
WriteMSVCEndGroup();
WriteDestFileLn("# End Target");
WriteDestFileLn("# End Project");
}
LOCALPROC WriteMSVCSpecificFiles(void)
{
WriteADstFile1("my_project_d",
vStrAppAbbrev, MSVCWorkspaceExt(), "Workspace file",
WriteMSVCWorkSpaceFile);
WriteADstFile1("my_project_d",
vStrAppAbbrev, MSVCProjectExt(), "Project file",
WriteMSVCProjectFile);
}
LOCALPROC WriteXMLQuotedProp(char *s, MyProc p)
{
WriteBgnDestFileLn();
WriteCStrToDestFile(s);
WriteCStrToDestFile("=");
WriteQuoteToDestFile();
p();
WriteQuoteToDestFile();
WriteEndDestFileLn();
}
LOCALPROC WriteMSVCPlatformName(void)
{
if (gbk_targ_wx64 == cur_targ) {
WriteCStrToDestFile("x64");
} else {
WriteCStrToDestFile("Win32");
}
}
LOCALPROC WriteMSVCXMLPlatformProps(void)
{
WriteXMLQuotedProp("Name", WriteMSVCPlatformName);
}
LOCALPROC WriteMSVCXMLPlatforms(void)
{
WriteXMLtaglinewithprops("Platform", WriteMSVCXMLPlatformProps);
}
LOCALPROC WriteMSVCXMLConfigurationName(void)
{
WriteMSVCdbgLevelName();
WriteCStrToDestFile("|");
WriteMSVCPlatformName();
}
LOCALPROC WriteMSVCXMLConfigurationProps(void)
{
WriteXMLQuotedProp("Name", WriteMSVCXMLConfigurationName);
WriteXMLQuotedProp("OutputDirectory", Write_obj_d_ToDestFile);
WriteXMLQuotedProp("IntermediateDirectory", Write_obj_d_ToDestFile);
WriteDestFileLn("ConfigurationType=\"1\"");
WriteDestFileLn("CharacterSet=\"2\"");
if (gbk_dbg_on != gbo_dbg) {
WriteDestFileLn("WholeProgramOptimization=\"0\"");
}
}
LOCALPROC WriteMSVCToolConfig(char *s, MyProc p)
{
WriteDestFileLn("<Tool");
++DestFileIndent;
WriteBgnDestFileLn();
WriteCStrToDestFile("Name=");
WriteQuoteToDestFile();
WriteCStrToDestFile(s);
WriteQuoteToDestFile();
WriteEndDestFileLn();
if (NULL != p) {
p();
}
--DestFileIndent;
WriteDestFileLn("/>");
}
LOCALPROC WriteMSVCCompilerToolConfig(void)
{
#if 0
if (gbk_dbg_on != gbo_dbg) {
WriteDestFileLn("Optimization=\"1\"");
WriteDestFileLn("FavorSizeOrSpeed=\"0\"");
WriteDestFileLn("WholeProgramOptimization=\"false\"");
WriteDestFileLn("OmitFramePointers=\"true\"");
} else
#endif
{
/* Maximize chance of correct compile */
WriteDestFileLn("Optimization=\"0\"");
}
if (gbk_dbg_on == gbo_dbg) {
WriteDestFileLn(
"PreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"");
WriteDestFileLn("MinimalRebuild=\"true\"");
} else {
WriteDestFileLn(
"PreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"");
WriteDestFileLn("StringPooling=\"true\"");
}
WriteXMLQuotedProp("AdditionalIncludeDirectories",
Write_cfg_d_ToDestFile);
WriteDestFileLn("ExceptionHandling=\"0\"");
if (gbk_dbg_on == gbo_dbg) {
WriteDestFileLn("BasicRuntimeChecks=\"3\"");
if (ide_vers >= 8000) {
WriteDestFileLn("RuntimeLibrary=\"1\"");
} else {
WriteDestFileLn("RuntimeLibrary=\"5\"");
}
} else {
if (ide_vers >= 8000) {
WriteDestFileLn("RuntimeLibrary=\"0\"");
} else {
WriteDestFileLn("RuntimeLibrary=\"4\"");
}
}
if (ide_vers < 8000) {
WriteDestFileLn("BufferSecurityCheck=\"false\"");
/* perhaps later versions also */
/* maybe this should be an option set in SPBASDEF */
}
WriteDestFileLn("EnableFunctionLevelLinking=\"true\"");
WriteDestFileLn("UsePrecompiledHeader=\"0\"");
WriteDestFileLn("WarningLevel=\"4\"");
if (ide_vers < 9000) {
WriteDestFileLn("Detect64BitPortabilityProblems=\"true\"");
}
if (gbk_dbg_on == gbo_dbg) {
WriteDestFileLn("DebugInformationFormat=\"4\"");
} else {
WriteDestFileLn("DebugInformationFormat=\"0\"");
}
WriteDestFileLn("CompileAs=\"0\"");
}
LOCALPROC WriteMSVCResourceCompilerToolConfig(void)
{
WriteXMLQuotedProp("AdditionalIncludeDirectories",
Write_src_d_ToDestFile);
}
LOCALPROC WriteMSVCLinkerToolConfig(void)
{
WriteDestFileLn("AdditionalDependencies=\"winmm.lib\"");
WriteXMLQuotedProp("OutputFile", WriteAppNamePath);
if (gbk_dbg_on == gbo_dbg) {
WriteDestFileLn("LinkIncremental=\"2\"");
} else {
WriteDestFileLn("LinkIncremental=\"1\"");
}
if (ide_vers >= 8000) {
WriteDestFileLn("GenerateManifest=\"false\"");
}
if (gbk_dbg_on == gbo_dbg) {
WriteDestFileLn("GenerateDebugInformation=\"true\"");
} else {
WriteDestFileLn("GenerateDebugInformation=\"false\"");
}
WriteDestFileLn("SubSystem=\"2\"");
if (gbk_dbg_on != gbo_dbg) {
WriteDestFileLn("OptimizeReferences=\"2\"");
WriteDestFileLn("EnableCOMDATFolding=\"2\"");
}
if (ide_vers >= 9000) {
WriteDestFileLn("RandomizedBaseAddress=\"1\"");
WriteDestFileLn("DataExecutionPrevention=\"0\"");
}
if (gbk_targ_wx64 == cur_targ) {
WriteDestFileLn("TargetMachine=\"17\"");
} else {
WriteDestFileLn("TargetMachine=\"1\"");
}
}
LOCALPROC WriteMSVCXMLConfigurationBody(void)
{
WriteMSVCToolConfig("VCPreBuildEventTool", NULL);
WriteMSVCToolConfig("VCCustomBuildTool", NULL);
if (ide_vers >= 7100) {
WriteMSVCToolConfig("VCXMLDataGeneratorTool", NULL);
}
WriteMSVCToolConfig("VCWebServiceProxyGeneratorTool", NULL);
WriteMSVCToolConfig("VCMIDLTool", NULL);
WriteMSVCToolConfig("VCCLCompilerTool",
WriteMSVCCompilerToolConfig);
if (ide_vers >= 8000) {
WriteMSVCToolConfig("VCManagedResourceCompilerTool", NULL);
}
WriteMSVCToolConfig("VCResourceCompilerTool",
WriteMSVCResourceCompilerToolConfig);
WriteMSVCToolConfig("VCPreLinkEventTool", NULL);
WriteMSVCToolConfig("VCLinkerTool", WriteMSVCLinkerToolConfig);
if (ide_vers >= 8000) {
WriteMSVCToolConfig("VCALinkTool", NULL);
WriteMSVCToolConfig("VCManifestTool", NULL);
WriteMSVCToolConfig("VCXDCMakeTool", NULL);
WriteMSVCToolConfig("VCBscMakeTool", NULL);
WriteMSVCToolConfig("VCFxCopTool", NULL);
WriteMSVCToolConfig("VCAppVerifierTool", NULL);
} else if (ide_vers >= 7100) {
WriteMSVCToolConfig("VCManagedWrapperGeneratorTool", NULL);
WriteMSVCToolConfig("VCAuxiliaryManagedWrapperGeneratorTool",
NULL);
}
if (ide_vers < 9000) {
WriteMSVCToolConfig("VCWebDeploymentTool", NULL);
}
WriteMSVCToolConfig("VCPostBuildEventTool", NULL);
}
LOCALPROC WriteMSVCXMLConfigurations(void)
{
WriteXMLtaggedLinesWithProps("Configuration",
WriteMSVCXMLConfigurationProps,
WriteMSVCXMLConfigurationBody);
}
LOCALPROC WriteMSVCXMLSourceFilesProps(void)
{
WriteDestFileLn("Name=\"Source Files\"");
WriteBgnDestFileLn();
WriteCStrToDestFile("Filter=\"cpp;c");
if (ide_vers >= 8000) {
WriteCStrToDestFile(";cc");
}
WriteCStrToDestFile(";cxx;def;odl;idl;hpj;bat;asm");
if (ide_vers >= 7100) {
WriteCStrToDestFile(";asmx");
}
WriteCStrToDestFile("\"");
WriteEndDestFileLn();
if (ide_vers >= 7100) {
WriteDestFileLn(
"UniqueIdentifier=\"{"
"00020000-0000-0000-0000-000000000000}\"");
}
}
LOCALPROC DoMSVCXMLAddFile(MyProc p)
{
WriteDestFileLn("<File");
++DestFileIndent;
WriteXMLQuotedProp("RelativePath", p);
WriteDestFileLn(">");
--DestFileIndent;
WriteDestFileLn("</File>");
}
LOCALPROC DoSrcFileMSVCXMLAddFile(void)
{
DoMSVCXMLAddFile(WriteSrcFileFilePath);
}
LOCALPROC WriteMSVCXMLSourceFilesBody(void)
{
DoAllSrcFilesWithSetup(DoSrcFileMSVCXMLAddFile);
}
LOCALPROC WriteMSVCXMLHeaderFilesProps(void)
{
WriteDestFileLn("Name=\"Header Files\"");
WriteBgnDestFileLn();
WriteCStrToDestFile("Filter=\"h;hpp;hxx;hm;inl;inc");
if (ide_vers >= 7100) {
WriteCStrToDestFile(";xsd");
}
WriteCStrToDestFile("\"");
WriteEndDestFileLn();
if (ide_vers >= 7100) {
WriteDestFileLn(
"UniqueIdentifier=\"{"
"00030000-0000-0000-0000-000000000000}\"");
}
}
LOCALPROC DoSrcFileMSVCXMLAddHeader(void)
{
if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
DoMSVCXMLAddFile(WriteSrcFileHeaderPath);
}
}
LOCALPROC WriteMSVCXMLHeaderFilesBody(void)
{
DoAllSrcFilesWithSetup(DoSrcFileMSVCXMLAddHeader);
}
LOCALPROC WriteMSVCXMLResourceFilesProps(void)
{
WriteDestFileLn("Name=\"Resource Files\"");
WriteBgnDestFileLn();
WriteCStrToDestFile(
"Filter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;"
"jpeg;jpe");
if (ide_vers >= 7100) {
WriteCStrToDestFile(";resx");
}
if (ide_vers >= 8000) {
WriteCStrToDestFile(";tiff;tif;png;wav");
}
WriteCStrToDestFile("\"");
WriteEndDestFileLn();
if (ide_vers >= 7100) {
WriteDestFileLn(
"UniqueIdentifier=\"{"
"00040000-0000-0000-0000-000000000000}\"");
}
}
LOCALPROC WriteDocTypeMSVCXMLresource(void)
{
DoMSVCXMLAddFile(WriteDocTypeIconFilePath);
}
LOCALPROC WriteMSVCXMLResourceFilesBody(void)
{
DoMSVCXMLAddFile(WriteMainRsrcSrcPath);
DoAllDocTypesWithSetup(WriteDocTypeMSVCXMLresource);
}
LOCALPROC WriteMSVCXMLIncludeFilesProps(void)
{
WriteDestFileLn("Name=\"Include Files\"");
WriteDestFileLn("Filter=\"h;hpp;hxx;hm;inl;inc;xsd\"");
}
LOCALPROC DoMSVCXMLAddAddExtraHeader(void)
{
DoMSVCXMLAddFile(WriteExtraHeaderFilePath);
}
LOCALPROC WriteMSVCXMLIncludeFilesBody(void)
{
DoAllExtraHeaders2WithSetup(DoMSVCXMLAddAddExtraHeader);
}
LOCALPROC WriteMSVCXMLFiles(void)
{
WriteXMLtaggedLinesWithProps("Filter",
WriteMSVCXMLSourceFilesProps,
WriteMSVCXMLSourceFilesBody);
WriteXMLtaggedLinesWithProps("Filter",
WriteMSVCXMLHeaderFilesProps,
WriteMSVCXMLHeaderFilesBody);
WriteXMLtaggedLinesWithProps("Filter",
WriteMSVCXMLResourceFilesProps,
WriteMSVCXMLResourceFilesBody);
WriteXMLtaggedLinesWithProps("Filter",
WriteMSVCXMLIncludeFilesProps,
WriteMSVCXMLIncludeFilesBody);
}
LOCALPROC WriteMSVCXMLSolutionFile(void)
{
if (ide_vers >= 8000) {
WriteDestFileLn("\357\273\277"); /* UTF-8 byte-order mark */
}
if (ide_vers >= 11000) {
WriteDestFileLn(
"Microsoft Visual Studio Solution File,"
" Format Version 12.00");
if (ide_vers >= 15000) {
WriteDestFileLn("# Visual Studio 15");
} else if (ide_vers >= 14000) {
WriteDestFileLn("# Visual Studio 14");
} else if (ide_vers >= 12000) {
WriteDestFileLn("# Visual Studio 2013");
} else {
WriteDestFileLn("# Visual Studio 2012");
}
} else if (ide_vers >= 10000) {
WriteDestFileLn(
"Microsoft Visual Studio Solution File,"
" Format Version 11.00");
WriteDestFileLn("# Visual Studio 2010");
} else if (ide_vers >= 9000) {
WriteDestFileLn(
"Microsoft Visual Studio Solution File,"
" Format Version 10.00");
/* WriteDestFileLn("# Visual C++ Express 2008"); */
WriteDestFileLn("# Visual Studio 2008");
} else if (ide_vers >= 8000) {
WriteDestFileLn(
"Microsoft Visual Studio Solution File,"
" Format Version 9.00");
/* WriteDestFileLn("# Visual C++ Express 2005"); */
WriteDestFileLn("# Visual Studio 2005");
} else if (ide_vers >= 7100) {
WriteDestFileLn(
"Microsoft Visual Studio Solution File,"
" Format Version 8.00");
} else {
WriteDestFileLn(
"Microsoft Visual Studio Solution File,"
" Format Version 7.00");
}
WriteBgnDestFileLn();
WriteCStrToDestFile(
"Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"");
WriteStrAppAbbrev();
WriteCStrToDestFile("\", \"");
WriteStrAppAbbrev();
if (ide_vers >= 10000) {
WriteCStrToDestFile(".vcxproj");
} else {
WriteCStrToDestFile(".vcproj");
}
WriteCStrToDestFile(
"\", \"{00010000-0000-0000-0000-000000000000}\"");
WriteEndDestFileLn();
if ((ide_vers >= 7100) && (ide_vers < 8000)) {
++DestFileIndent;
WriteDestFileLn(
"ProjectSection(ProjectDependencies)"" = postProject");
WriteDestFileLn("EndProjectSection");
--DestFileIndent;
}
WriteDestFileLn("EndProject");
WriteDestFileLn("Global");
++DestFileIndent;
if (ide_vers >= 8000) {
WriteDestFileLn(
"GlobalSection(SolutionConfigurationPlatforms)"
" = preSolution");
++DestFileIndent;
WriteBgnDestFileLn();
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile(" = ");
WriteMSVCXMLConfigurationName();
WriteEndDestFileLn();
--DestFileIndent;
WriteDestFileLn("EndGlobalSection");
WriteDestFileLn(
"GlobalSection(ProjectConfigurationPlatforms)"
" = postSolution");
++DestFileIndent;
WriteBgnDestFileLn();
WriteCStrToDestFile(
"{00010000-0000-0000-0000-000000000000}.");
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile(".ActiveCfg = ");
WriteMSVCXMLConfigurationName();
WriteEndDestFileLn();
WriteBgnDestFileLn();
WriteCStrToDestFile(
"{00010000-0000-0000-0000-000000000000}.");
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile(".Build.0 = ");
WriteMSVCXMLConfigurationName();
WriteEndDestFileLn();
--DestFileIndent;
WriteDestFileLn("EndGlobalSection");
WriteDestFileLn(
"GlobalSection(SolutionProperties) = preSolution");
++DestFileIndent;
WriteDestFileLn("HideSolutionNode = FALSE");
--DestFileIndent;
WriteDestFileLn("EndGlobalSection");
} else {
WriteDestFileLn(
"GlobalSection(SolutionConfiguration) = preSolution");
++DestFileIndent;
WriteBgnDestFileLn();
if (ide_vers >= 7100) {
WriteMSVCdbgLevelName();
} else {
WriteCStrToDestFile("ConfigName.0");
}
WriteCStrToDestFile(" = ");
WriteMSVCdbgLevelName();
WriteEndDestFileLn();
--DestFileIndent;
WriteDestFileLn("EndGlobalSection");
if (ide_vers < 7100) {
WriteCStrToDestFile(
"GlobalSection(ProjectDependencies)"
" = postSolution");
WriteCStrToDestFile("EndGlobalSection");
}
WriteDestFileLn(
"GlobalSection(ProjectConfiguration) = postSolution");
++DestFileIndent;
WriteBgnDestFileLn();
WriteCStrToDestFile(
"{00010000-0000-0000-0000-000000000000}.");
WriteMSVCdbgLevelName();
WriteCStrToDestFile(".ActiveCfg = ");
WriteMSVCXMLConfigurationName();
WriteEndDestFileLn();
WriteBgnDestFileLn();
WriteCStrToDestFile(
"{00010000-0000-0000-0000-000000000000}.");
WriteMSVCdbgLevelName();
WriteCStrToDestFile(".Build.0 = ");
WriteMSVCXMLConfigurationName();
WriteEndDestFileLn();
--DestFileIndent;
WriteDestFileLn("EndGlobalSection");
WriteDestFileLn(
"GlobalSection(ExtensibilityGlobals) = postSolution");
WriteDestFileLn("EndGlobalSection");
WriteDestFileLn(
"GlobalSection(ExtensibilityAddIns) = postSolution");
WriteDestFileLn("EndGlobalSection");
}
--DestFileIndent;
WriteDestFileLn("EndGlobal");
}
LOCALPROC WriteMSVCXMLProjectProps(void)
{
WriteDestFileLn("ProjectType=\"Visual C++\"");
if (ide_vers >= 9000) {
WriteDestFileLn("Version=\"9.00\"");
} else if (ide_vers >= 8000) {
WriteDestFileLn("Version=\"8.00\"");
} else if (ide_vers >= 7100) {
WriteDestFileLn("Version=\"7.10\"");
} else {
WriteDestFileLn("Version=\"7.00\"");
}
WriteXMLQuotedProp("Name", WriteStrAppAbbrev);
WriteDestFileLn(
"ProjectGUID=\"{00010000-0000-0000-0000-000000000000}\"");
if (ide_vers >= 8000) {
WriteXMLQuotedProp("RootNamespace", WriteStrAppAbbrev);
}
WriteDestFileLn("Keyword=\"Win32Proj\"");
if (ide_vers >= 9000) {
WriteDestFileLn("TargetFrameworkVersion=\"131072\"");
}
}
LOCALPROC WriteMSVCXMLProjectBody(void)
{
WriteXMLtaggedLines("Platforms", WriteMSVCXMLPlatforms);
if (ide_vers >= 8000) {
WriteXMLtaggedLines("ToolFiles", NULL);
}
WriteXMLtaggedLines("Configurations", WriteMSVCXMLConfigurations);
if (ide_vers >= 7100) {
WriteXMLtaggedLines("References", NULL);
}
WriteXMLtaggedLines("Files", WriteMSVCXMLFiles);
WriteXMLtaggedLines("Globals", NULL);
}
LOCALPROC WriteMSVCXMLProjectFile(void)
{
WriteDestFileLn(
"<?xml version=\"1.0\" encoding=\"Windows-1252\"?>");
WriteXMLtaggedLinesWithProps("VisualStudioProject",
WriteMSVCXMLProjectProps,
WriteMSVCXMLProjectBody);
}
LOCALPROC WriteMSVCXMLSpecificFiles(void)
{
WriteADstFile1("my_project_d",
vStrAppAbbrev, ".sln", "Solutions file",
WriteMSVCXMLSolutionFile);
WriteADstFile1("my_project_d",
vStrAppAbbrev, ".vcproj", "Project file",
WriteMSVCXMLProjectFile);
}
LOCALPROC DoSrcFileNMakeAddObjFile(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("\"");
WriteSrcFileObjPath();
WriteCStrToDestFile("\" \\");
WriteEndDestFileLn();
}
LOCALPROC WriteMainRsrcObjMSCbuild(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("rc.exe ");
WriteRCexeFlags();
WriteCStrToDestFile(" /fo\"");
WriteMainRsrcObjPath();
WriteCStrToDestFile("\"");
WriteCStrToDestFile(" /i");
WriteQuoteToDestFile();
Write_src_d_ToDestFile();
WriteQuoteToDestFile();
WriteCStrToDestFile(" \"");
WriteMainRsrcSrcPath();
WriteCStrToDestFile("\"");
WriteEndDestFileLn();
}
LOCALPROC WriteNMakeMakeFile(void)
{
blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
WriteDestFileLn("# make file generated by gryphel build system");
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("mk_COptions=");
WriteCLexeFlags();
WriteCStrToDestFile(" /I\"");
Write_cfg_d_ToDestFile();
WriteCStrToDestFile("\\\\\"");
/* yes, a double backslash is what is needed */
WriteCStrToDestFile(" /Fo\"");
Write_obj_d_ToDestFile();
WriteCStrToDestFile("\\\\\"");
WriteCStrToDestFile(" /Fd\"");
Write_obj_d_ToDestFile();
WriteCStrToDestFile("\\\\\"");
WriteEndDestFileLn();
WriteBlankLineToDestFile();
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("TheDefaultOutput :");
WriteMakeDependFile(WriteAppNamePath);
WriteEndDestFileLn();
WriteBlankLineToDestFile();
WriteBlankLineToDestFile();
DoAllSrcFilesWithSetup(DoSrcFileMakeCompile);
WriteBlankLineToDestFile();
WriteDestFileLn("ObjFiles= \\");
++DestFileIndent;
DoAllSrcFilesSortWithSetup(DoSrcFileNMakeAddObjFile);
--DestFileIndent;
WriteBlankLineToDestFile();
WriteBlankLineToDestFile();
WriteBlankLineToDestFile();
WriteMakeRule(WriteMainRsrcObjPath,
WriteMainRsrcObjMSCdeps, WriteMainRsrcObjMSCbuild);
WriteBlankLineToDestFile();
WriteBlankLineToDestFile();
WriteBgnDestFileLn();
WriteCStrToDestFile("\"");
WriteAppNamePath();
WriteCStrToDestFile("\" : $(ObjFiles) \"");
WriteMainRsrcObjPath();
WriteCStrToDestFile("\"");
WriteEndDestFileLn();
++DestFileIndent;
WriteDestFileLn("link.exe @<<");
++DestFileIndent;
WriteBgnDestFileLn();
WriteCStrToDestFile("/out:\"");
WriteAppNamePath();
WriteCStrToDestFile("\"");
WriteEndDestFileLn();
WriteBgnDestFileLn();
WriteCStrToDestFile("/nologo");
if (WinCE) {
WriteCStrToDestFile(" /subsystem:windowsce,4.20");
} else {
WriteCStrToDestFile(" /subsystem:windows");
}
if (gbk_dbg_on == gbo_dbg) {
WriteCStrToDestFile(" /debug");
} else {
WriteCStrToDestFile(" /incremental:no");
}
WriteCStrToDestFile(" /opt:ref /opt:icf");
/*
more or less default, but putting this in
makes difference at least in visual studio 2005
*/
WriteEndDestFileLn();
WriteBgnDestFileLn();
WriteCStrToDestFile("/pdb:\"");
Write_obj_d_ToDestFile();
WriteCStrToDestFile("\\");
WriteStrAppAbbrev();
WriteCStrToDestFile(".pdb\"");
WriteCStrToDestFile(" /machine:");
if (gbk_cpufam_arm == gbo_cpufam) {
WriteCStrToDestFile("ARM");
} else if (gbk_cpufam_x64 == gbo_cpufam) {
if (ide_vers >= 7100) {
WriteCStrToDestFile("X64");
} else {
WriteCStrToDestFile("AMD64");
}
} else {
if (ide_vers >= 7100) {
WriteCStrToDestFile("X86");
} else {
WriteCStrToDestFile("I386");
}
}
WriteEndDestFileLn();
if (WinCE) {
WriteDestFileLn("/base:\"0x00010000\"");
WriteDestFileLn("/stack:0x10000,0x1000");
WriteDestFileLn("/entry:WinMainCRTStartup");
WriteDestFileLn("/align:4096");
}
if (ide_vers >= 9000) {
WriteDestFileLn("/dynamicbase:no");
/* smaller exe, maybe not as secure */
}
if (WinCE) {
WriteDestFileLn("commctrl.lib");
WriteDestFileLn("coredll.lib");
WriteDestFileLn("aygshell.lib");
WriteDestFileLn("Mmtimer.lib");
WriteDestFileLn("/nodefaultlib:libc.lib");
WriteDestFileLn("/nodefaultlib:libcd.lib");
WriteDestFileLn("/nodefaultlib:libcmt.lib");
WriteDestFileLn("/nodefaultlib:libcmtd.lib");
WriteDestFileLn("/nodefaultlib:msvcrt.lib");
WriteDestFileLn("/nodefaultlib:msvcrtd.lib");
} else {
WriteDestFileLn("winmm.lib");
WriteDestFileLn("kernel32.lib");
WriteDestFileLn("user32.lib");
WriteDestFileLn("gdi32.lib");
WriteDestFileLn("winspool.lib");
WriteDestFileLn("comdlg32.lib");
WriteDestFileLn("advapi32.lib");
WriteDestFileLn("shell32.lib");
WriteDestFileLn("ole32.lib");
WriteDestFileLn("oleaut32.lib");
WriteDestFileLn("uuid.lib");
if ((gbk_cpufam_x64 == gbo_cpufam)
&& (ide_vers >= 7000)
&& (ide_vers < 7100))
{
WriteDestFileLn("bufferoverflowU.lib");
}
}
WriteBgnDestFileLn();
WriteCStrToDestFile("\"");
WriteMainRsrcObjPath();
WriteCStrToDestFile("\"");
WriteEndDestFileLn();
WriteDestFileLn("$(ObjFiles)");
--DestFileIndent;
--DestFileIndent;
WriteDestFileLn("<<");
WriteBlankLineToDestFile();
WriteBlankLineToDestFile();
WriteDestFileLn("CLEAN :");
++DestFileIndent;
DoAllSrcFilesStandardErase();
WriteRmFile(WriteMainRsrcObjPath);
WriteRmFile(WriteAppNamePath);
--DestFileIndent;
}
LOCALPROC WriteNMakeSpecificFiles(void)
{
WriteADstFile1("my_project_d",
"MAKEFILE", "", "Make file",
WriteNMakeMakeFile);
}
LOCALPROC DoSrcFileMSVC10XMLAddFile(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("<ClCompile Include=\"");
WriteSrcFileFilePath();
WriteCStrToDestFile("\" />");
WriteEndDestFileLn();
}
LOCALPROC DoSrcFileMSVC10XMLAddHeaderFile(void)
{
if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
WriteBgnDestFileLn();
WriteCStrToDestFile("<ClInclude Include=\"");
WriteSrcFileHeaderPath();
WriteCStrToDestFile("\" />");
WriteEndDestFileLn();
}
}
LOCALPROC DoMSVC10XMLAddAddExtraHeader(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("<ClInclude Include=\"");
WriteExtraHeaderFilePath();
WriteCStrToDestFile("\" />");
WriteEndDestFileLn();
}
LOCALPROC DoMSVC10XMLAddDocType(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("<None Include=\"");
WriteDocTypeIconFilePath();
WriteCStrToDestFile("\" />");
WriteEndDestFileLn();
}
LOCALPROC WriteMSVC10OutDir(void)
{
WriteCStrToDestFile(".\\");
}
LOCALPROC WriteMSVC10IntDir(void)
{
Write_obj_d_ToDestFile();
WriteCStrToDestFile("\\");
}
LOCALPROC WriteMSVCXML10ProjectFile(void)
{
WriteCStrToDestFile("\357\273\277"); /* UTF-8 byte-order mark */
WriteDestFileLn("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
WriteBgnDestFileLn();
WriteCStrToDestFile(
"<Project DefaultTargets=\"Build\"");
if (ide_vers >= 15000) {
WriteCStrToDestFile(
" ToolsVersion=\"15.0\"");
} else if (ide_vers >= 14000) {
WriteCStrToDestFile(
" ToolsVersion=\"14.0\"");
} else if (ide_vers >= 12000) {
WriteCStrToDestFile(
" ToolsVersion=\"12.0\"");
} else {
WriteCStrToDestFile(
" ToolsVersion=\"4.0\"");
}
WriteCStrToDestFile(
" xmlns="
"\"http://schemas.microsoft.com/developer/msbuild/2003\">"
);
WriteEndDestFileLn();
++DestFileIndent;
WriteDestFileLn("<ItemGroup Label=\"ProjectConfigurations\">");
++DestFileIndent;
WriteBgnDestFileLn();
WriteCStrToDestFile("<ProjectConfiguration Include=\"");
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile("\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteXMLtagBeginProcValEndLine("Configuration",
WriteMSVCdbgLevelName);
WriteXMLtagBeginProcValEndLine("Platform",
WriteMSVCPlatformName);
--DestFileIndent;
WriteDestFileLn("</ProjectConfiguration>");
--DestFileIndent;
WriteDestFileLn("</ItemGroup>");
WriteDestFileLn("<PropertyGroup Label=\"Globals\">");
++DestFileIndent;
WriteXMLtagBeginValEndLine("ProjectGuid",
"{00010000-0000-0000-0000-000000000000}");
WriteXMLtagBeginValEndLine("Keyword", "Win32Proj");
WriteXMLtagBeginProcValEndLine("RootNamespace",
WriteStrAppAbbrev);
if (ide_vers >= 15000) {
WriteXMLtagBeginValEndLine(
"WindowsTargetPlatformVersion", "10.0.14393.0");
}
--DestFileIndent;
WriteDestFileLn("</PropertyGroup>");
WriteDestFileLn("<Import Project=\""
"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />");
WriteBgnDestFileLn();
WriteCStrToDestFile("<PropertyGroup Condition=\""
"'$(Configuration)|$(Platform)'=='");
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile("'\" Label=\"Configuration\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteXMLtagBeginValEndLine("ConfigurationType",
"Application");
if (gbk_dbg_on != gbo_dbg) {
WriteXMLtagBeginValEndLine("WholeProgramOptimization",
"false");
}
if (ide_vers >= 11000) {
if (ide_vers >= 14000) {
WriteXMLtagBeginValEndLine("PlatformToolset",
"v141");
} else if (ide_vers >= 14000) {
WriteXMLtagBeginValEndLine("PlatformToolset",
"v140");
} else if (ide_vers >= 12000) {
WriteXMLtagBeginValEndLine("PlatformToolset",
"v120");
} else {
WriteXMLtagBeginValEndLine("PlatformToolset",
"v110");
}
}
WriteXMLtagBeginValEndLine("CharacterSet", "MultiByte");
--DestFileIndent;
WriteDestFileLn("</PropertyGroup>");
WriteDestFileLn("<Import Project=\""
"$(VCTargetsPath)\\Microsoft.Cpp.props\" />");
WriteDestFileLn("<ImportGroup Label=\"ExtensionSettings\">");
WriteDestFileLn("</ImportGroup>");
WriteBgnDestFileLn();
WriteCStrToDestFile("<ImportGroup");
WriteCStrToDestFile(" Label=\"PropertySheets\"");
WriteCStrToDestFile(
" Condition=\"'$(Configuration)|$(Platform)'=='");
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile("'\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteDestFileLn("<Import Project=\""
"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\""
" Condition=\"exists('$(UserRootDir)\\"
"Microsoft.Cpp.$(Platform).user.props')\""
" Label=\"LocalAppDataPlatform\" />");
--DestFileIndent;
WriteDestFileLn("</ImportGroup>");
WriteDestFileLn("<PropertyGroup Label=\"UserMacros\" />");
WriteBgnDestFileLn();
WriteCStrToDestFile("<PropertyGroup");
WriteCStrToDestFile(
" Condition=\"'$(Configuration)|$(Platform)'=='");
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile("'\"");
WriteCStrToDestFile(">");
WriteEndDestFileLn();
++DestFileIndent;
WriteXMLtagBeginProcValEndLine("OutDir", WriteMSVC10OutDir);
WriteXMLtagBeginProcValEndLine("IntDir", WriteMSVC10IntDir);
if (gbk_dbg_on == gbo_dbg) {
WriteXMLtagBeginValEndLine("LinkIncremental", "true");
} else {
WriteXMLtagBeginValEndLine("LinkIncremental", "false");
}
WriteXMLtagBeginValEndLine("GenerateManifest", "false");
WriteEndXMLtagLine("PropertyGroup");
WriteBgnDestFileLn();
WriteCStrToDestFile("<ItemDefinitionGroup"
" Condition=\"'$(Configuration)|$(Platform)'=='");
WriteMSVCXMLConfigurationName();
WriteCStrToDestFile("'\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteBeginXMLtagLine("ClCompile");
WriteXMLtagBeginValEndLine("WarningLevel", "Level4");
WriteXMLtagBeginValEndLine("PrecompiledHeader",
"NotUsing");
#if 0
if (gbk_dbg_on != gbo_dbg) {
WriteXMLtagBeginValEndLine("Optimization",
"MinSpace");
WriteXMLtagBeginValEndLine("FavorSizeOrSpeed",
"Neither");
WriteXMLtagBeginValEndLine(
"WholeProgramOptimization", "false");
WriteXMLtagBeginValEndLine("OmitFramePointers",
"true");
} else
#endif
{
/* Maximize chance of correct compile */
WriteXMLtagBeginValEndLine("Optimization",
"Disabled");
}
if (gbk_dbg_on == gbo_dbg) {
WriteDestFileLn("<PreprocessorDefinitions>"
"WIN32;_DEBUG;_WINDOWS;"
"%(PreprocessorDefinitions)"
"</PreprocessorDefinitions>");
if (gbk_targ_wx64 != cur_targ) {
WriteXMLtagBeginValEndLine("MinimalRebuild",
"true");
}
WriteXMLtagBeginValEndLine("BasicRuntimeChecks",
"EnableFastChecks");
WriteXMLtagBeginValEndLine("RuntimeLibrary",
"MultiThreadedDebug");
if (gbk_targ_wx64 == cur_targ) {
WriteXMLtagBeginValEndLine(
"DebugInformationFormat",
"ProgramDatabase");
} else {
WriteXMLtagBeginValEndLine(
"DebugInformationFormat",
"EditAndContinue");
}
} else {
WriteDestFileLn("<PreprocessorDefinitions>"
"WIN32;NDEBUG;_WINDOWS;"
"%(PreprocessorDefinitions)"
"</PreprocessorDefinitions>");
WriteXMLtagBeginValEndLine("StringPooling", "true");
WriteXMLtagBeginValEndLine("RuntimeLibrary",
"MultiThreaded");
/*
MultiThreadedDLL makes smaller exe,
maybe more compatibility issues
*/
}
WriteBgnDestFileLn();
WriteXMLtagBegin("AdditionalIncludeDirectories");
Write_cfg_d_ToDestFile();
WriteCStrToDestFile(";%(AdditionalIncludeDirectories)");
WriteXMLtagEnd("AdditionalIncludeDirectories");
WriteEndDestFileLn();
WriteXMLtagBeginValEndLine("FunctionLevelLinking",
"true");
WriteXMLtagBeginValEndLine("ExceptionHandling",
"false");
WriteEndXMLtagLine("ClCompile");
WriteBeginXMLtagLine("ResourceCompile");
WriteBgnDestFileLn();
WriteXMLtagBegin("AdditionalIncludeDirectories");
Write_src_d_ToDestFile();
WriteCStrToDestFile(";%(AdditionalIncludeDirectories)");
WriteXMLtagEnd("AdditionalIncludeDirectories");
WriteEndDestFileLn();
WriteEndXMLtagLine("ResourceCompile");
WriteBeginXMLtagLine("Link");
WriteXMLtagBeginValEndLine("SubSystem", "Windows");
if (gbk_dbg_on == gbo_dbg) {
WriteXMLtagBeginValEndLine(
"GenerateDebugInformation", "true");
} else {
WriteXMLtagBeginValEndLine(
"GenerateDebugInformation", "false");
}
if (gbk_dbg_on != gbo_dbg) {
WriteXMLtagBeginValEndLine("EnableCOMDATFolding",
"true");
WriteXMLtagBeginValEndLine("OptimizeReferences",
"true");
}
WriteDestFileLn("<AdditionalDependencies>"
"winmm.lib;%(AdditionalDependencies)"
"</AdditionalDependencies>");
WriteXMLtagBeginProcValEndLine("OutputFile",
WriteAppNamePath);
WriteXMLtagBeginValEndLine("RandomizedBaseAddress",
"false");
WriteEndXMLtagLine("Link");
--DestFileIndent;
WriteDestFileLn("</ItemDefinitionGroup>");
WriteBeginXMLtagLine("ItemGroup");
DoAllDocTypesWithSetup(DoMSVC10XMLAddDocType);
WriteEndXMLtagLine("ItemGroup");
WriteBeginXMLtagLine("ItemGroup");
DoAllSrcFilesWithSetup(
DoSrcFileMSVC10XMLAddHeaderFile);
DoAllExtraHeaders2WithSetup(
DoMSVC10XMLAddAddExtraHeader);
WriteEndXMLtagLine("ItemGroup");
WriteBeginXMLtagLine("ItemGroup");
DoAllSrcFilesWithSetup(
DoSrcFileMSVC10XMLAddFile);
WriteEndXMLtagLine("ItemGroup");
WriteBeginXMLtagLine("ItemGroup");
WriteBgnDestFileLn();
WriteCStrToDestFile("<ResourceCompile Include=\"");
WriteMainRsrcSrcPath();
WriteCStrToDestFile("\" />");
WriteEndDestFileLn();
WriteEndXMLtagLine("ItemGroup");
WriteDestFileLn("<Import Project=\""
"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />");
WriteDestFileLn("<ImportGroup Label=\"ExtensionTargets\">");
WriteDestFileLn("</ImportGroup>");
--DestFileIndent;
WriteDestFileLn("</Project>");
}
LOCALPROC DoSrcFileMSVC10XMLAddClCompile(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("<ClCompile Include=\"");
WriteSrcFileFilePath();
WriteCStrToDestFile("\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteDestFileLn("<Filter>Source Files</Filter>");
--DestFileIndent;
WriteDestFileLn("</ClCompile>");
}
LOCALPROC DoSrcFileMSVC10XMLAddClInclude(void)
{
if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
WriteBgnDestFileLn();
WriteCStrToDestFile("<ClInclude Include=\"");
WriteSrcFileHeaderPath();
WriteCStrToDestFile("\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteDestFileLn("<Filter>Header Files</Filter>");
--DestFileIndent;
WriteDestFileLn("</ClInclude>");
}
}
LOCALPROC DoExtraHeaderMSVC10XMLAddClInclude(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("<ClInclude Include=\"");
WriteExtraHeaderFilePath();
WriteCStrToDestFile("\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteDestFileLn("<Filter>Include Files</Filter>");
--DestFileIndent;
WriteDestFileLn("</ClInclude>");
}
LOCALPROC WriteDocTypeMSVC10resource(void)
{
WriteBgnDestFileLn();
WriteCStrToDestFile("<None Include=\"");
WriteDocTypeIconFilePath();
WriteCStrToDestFile("\">");
WriteEndDestFileLn();
++DestFileIndent;
WriteDestFileLn("<Filter>Resource Files</Filter>");
--DestFileIndent;
WriteDestFileLn("</None>");
}
LOCALPROC WriteMSVC10XMLProjectFiltersProps(void)
{
WriteCStrToDestFile(" ToolsVersion=\"4.0\" xmlns="
"\"http://schemas.microsoft.com/developer/msbuild/2003\"");
}
LOCALPROC WriteMSVC10XMLProjectFiltersBodyFilters(void)
{
WriteDestFileLn("<Filter Include=\"Header Files\">");
++DestFileIndent;
WriteDestFileLn("<UniqueIdentifier>"
"{00030000-0000-0000-0000-000000000000}"
"</UniqueIdentifier>");
WriteDestFileLn("<Extensions>"
"h;hpp;hxx;hm;inl;inc;xsd"
"</Extensions>");
--DestFileIndent;
WriteDestFileLn("</Filter>");
WriteDestFileLn("<Filter Include=\"Resource Files\">");
++DestFileIndent;
WriteDestFileLn("<UniqueIdentifier>"
"{00040000-0000-0000-0000-000000000000}"
"</UniqueIdentifier>");
WriteDestFileLn("<Extensions>"
"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;"
"resx;tiff;tif;png;wav"
"</Extensions>");
--DestFileIndent;
WriteDestFileLn("</Filter>");
WriteDestFileLn("<Filter Include=\"Include Files\">");
++DestFileIndent;
WriteDestFileLn("<UniqueIdentifier>"
"{00050000-0000-0000-0000-000000000000}"
"</UniqueIdentifier>");
WriteDestFileLn("<Extensions>"
"h;hpp;hxx;hm;inl;inc;xsd"
"</Extensions>");
--DestFileIndent;
WriteDestFileLn("</Filter>");
WriteDestFileLn("<Filter Include=\"Source Files\">");
++DestFileIndent;
WriteDestFileLn("<UniqueIdentifier>"
"{00020000-0000-0000-0000-000000000000}"
"</UniqueIdentifier>");
WriteDestFileLn("<Extensions>"
"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
"</Extensions>");
--DestFileIndent;
WriteDestFileLn("</Filter>");
}
LOCALPROC WriteMSVC10XMLProjectFiltersBodyClCompiles(void)
{
DoAllSrcFilesWithSetup(
DoSrcFileMSVC10XMLAddClCompile);
}
LOCALPROC WriteMSVC10XMLProjectFiltersBodyClIncludes(void)
{
DoAllSrcFilesWithSetup(
DoSrcFileMSVC10XMLAddClInclude);
DoAllExtraHeaders2WithSetup(
DoExtraHeaderMSVC10XMLAddClInclude);
}
LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceCompileProp(void)
{
WriteCStrToDestFile(" Include=\"");
WriteMainRsrcSrcPath();
WriteCStrToDestFile("\"");
}
LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceCompileBody(void)
{
WriteXMLtagBeginValEndLine("Filter", "Resource Files");
}
LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceCompiles(void)
{
WriteXMLtaggedLinesWith1LnProps("ResourceCompile",
WriteMSVC10XMLProjectFiltersBodyResourceCompileProp,
WriteMSVC10XMLProjectFiltersBodyResourceCompileBody);
}
LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceFiles(void)
{
DoAllDocTypesWithSetup(WriteDocTypeMSVC10resource);
}
LOCALPROC WriteMSVC10XMLProjectFiltersItemGroup(MyProc p)
{
WriteXMLtaggedLines("ItemGroup", p);
}
LOCALPROC WriteMSVC10XMLProjectFiltersBody(void)
{
WriteMSVC10XMLProjectFiltersItemGroup(
WriteMSVC10XMLProjectFiltersBodyFilters);
WriteMSVC10XMLProjectFiltersItemGroup(
WriteMSVC10XMLProjectFiltersBodyClCompiles);
WriteMSVC10XMLProjectFiltersItemGroup(
WriteMSVC10XMLProjectFiltersBodyClIncludes);
WriteMSVC10XMLProjectFiltersItemGroup(
WriteMSVC10XMLProjectFiltersBodyResourceCompiles);
WriteMSVC10XMLProjectFiltersItemGroup(
WriteMSVC10XMLProjectFiltersBodyResourceFiles);
}
LOCALPROC WriteMSVCXML10ProjectFiltersFile(void)
{
WriteCStrToDestFile("\357\273\277"); /* UTF-8 byte-order mark */
WriteDestFileLn("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
WriteXMLtaggedLinesWith1LnProps("Project",
WriteMSVC10XMLProjectFiltersProps,
WriteMSVC10XMLProjectFiltersBody);
}
LOCALPROC WriteMSVCXML10SpecificFiles(void)
{
WriteADstFile1("my_project_d",
vStrAppAbbrev, ".sln", "Solutions file",
WriteMSVCXMLSolutionFile);
WriteADstFile1("my_project_d",
vStrAppAbbrev, ".vcxproj", "Project file",
WriteMSVCXML10ProjectFile);
WriteADstFile1("my_project_d",
vStrAppAbbrev, ".vcxproj.filters", "Project Filters file",
WriteMSVCXML10ProjectFiltersFile);
}
LOCALPROC WriteMsvSpecificFiles(void)
{
if (UseCmndLine) {
WriteNMakeSpecificFiles();
} else {
if (ide_vers >= 10000) {
WriteMSVCXML10SpecificFiles();
} else if (ide_vers >= 7000) {
WriteMSVCXMLSpecificFiles();
} else {
WriteMSVCSpecificFiles();
}
}
}