shithub: minivmac

ref: ea61a2a8e8601d5b732d2c13257413ad4f864b85
dir: /setup/WRBGCFLS.i/

View raw version
/*
	WRBGCFLS.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 Bash Gnu C specific FiLeS
*/


#define WriteXCDcallgcc WriteCompileCExec
#if 0
LOCALPROC WriteXCDcallgcc(void)
{
#if 0
	if ((gbk_ide_xcd == cur_ide) && (ide_vers >= 2100)
		&& (ide_vers < 2200))
	{
		/*
			This doesn't seem to make any difference in default
			Xcode 2.1 install. Current guess is that default
			headers don't support MACOSX_DEPLOYMENT_TARGET,
			but the ide is supporting 10.4 sdk that is
			included but not installed by default.
		*/
		WriteCStrToDestFile("export MACOSX_DEPLOYMENT_TARGET=10.");
		if (gbk_cpufam_ppc == gbo_cpufam) {
			WriteCStrToDestFile("1");
		} else {
			WriteCStrToDestFile("4");
		}
		WriteCStrToDestFile(" ; ");
	}
#endif
	WriteCStrToDestFile("gcc");
}
#endif

LOCALPROC WriteBgcCompileAsmLinkCommonOptions(void)
{
	if ((gbk_ide_xcd == cur_ide) && (ide_vers >= 2100)) {
		switch (cur_targ) {
			case gbk_targ_mach:
			case gbk_targ_imch:
			case gbk_targ_mc64:
			case gbk_targ_mx11:
			case gbk_targ_mi11:
			case gbk_targ_mx64:
				if (gbk_cpufam_x86 == gbo_cpufam) {
					WriteCStrToDestFile(" -arch i386");
				} else if (gbk_cpufam_x64 == gbo_cpufam) {
					WriteCStrToDestFile(" -arch x86_64");
				} else {
					WriteCStrToDestFile(" -arch ppc");
				}
				break;
			default:
				break;
		}
	}
	if (gbk_targfam_oind == gbo_targfam) {
		if (gbk_cpufam_x64 == gbo_cpufam) {
			WriteCStrToDestFile(" -m64");
		}
	} else if (gbk_targfam_lnds == gbo_targfam) {
		WriteCStrToDestFile(" -marm -mthumb-interwork");
	}
}

LOCALPROC WriteBgcLinkOSGlucompileCommonOptions(void)
{
	if ((gbk_ide_xcd == cur_ide) && (ide_vers >= 2200)) {
		if ((gbk_apifam_osx == gbo_apifam)
			|| (gbk_apifam_cco == gbo_apifam))
		{
			if (gbk_cpufam_ppc == gbo_cpufam) {
				WriteCStrToDestFile(" -mmacosx-version-min=10.1");
			} else
			if (gbk_cpufam_x64 == gbo_cpufam) {
				WriteCStrToDestFile(" -mmacosx-version-min=10.5");
			} else
			{
				WriteCStrToDestFile(" -mmacosx-version-min=10.4");
			}
			WriteCStrToDestFile(" -isysroot");
			if (ide_vers >= 3200) {
				WriteCStrToDestFile(" /Developer/SDKs/MacOSX10.6.sdk");
			} else if ((ide_vers >= 3100)
				|| (gbk_cpufam_x64 == gbo_cpufam))
			{
				WriteCStrToDestFile(" /Developer/SDKs/MacOSX10.5.sdk");
			} else {
				WriteCStrToDestFile(" /Developer/SDKs/MacOSX10.4u.sdk");
			}
		}
	}
}

LOCALPROC WriteBgcCompileLinkCommonOptions(void)
{
	if (gbk_dbg_on == gbo_dbg) {
		WriteCStrToDestFile(" -g");
	}
}

LOCALPROC WriteBgcCOptions(void)
{
	WriteCStrToDestFile(
		" -Wall -Wmissing-prototypes -Wno-uninitialized");

	if (gbk_apifam_nds != gbo_apifam) {
		WriteCStrToDestFile(" -Wundef -Wstrict-prototypes");
	}
	if (gbk_ide_cyg == cur_ide) {
		if (gbk_targfam_cygw != gbo_targfam) {
			WriteCStrToDestFile(" -mno-cygwin");
		}
	}
	if (gbk_ide_xcd == cur_ide) {
		WriteCStrToDestFile(" -fpascal-strings");
	}
	if (gbk_ide_xcd == cur_ide) {
		switch (cur_targ) {
			case gbk_targ_mach:
			case gbk_targ_imch:
			case gbk_targ_mc64:
			case gbk_targ_mx11:
			case gbk_targ_mi11:
			case gbk_targ_mx64:
				WriteCStrToDestFile(" -mdynamic-no-pic");
				break;
		}
	}
	WriteBgcCompileAsmLinkCommonOptions();
	WriteBgcCompileLinkCommonOptions();

	if (gbk_apifam_nds == gbo_apifam) {
		WriteCStrToDestFile(" -march=armv5te -mtune=arm946e-s");
	}

	if (1 /* WantConfigDir */) {
		WriteCStrToDestFile(" -I");
		Write_cfg_d_ToDestFile();
		WriteCStrToDestFile(" -I");
		Write_src_d_ToDestFile();
	}
}

LOCALPROC WriteBgcCOptOptions(void)
{
	if (gbk_dbg_on != gbo_dbg) {
		/* WriteCStrToDestFile(" -O3"); */
		if (gbk_targfam_lnds == gbo_targfam) {
			WriteCStrToDestFile(" -O2");
		} else {
			WriteCStrToDestFile(" -Os");
		}
	} else {
		WriteCStrToDestFile(" -O0");
	}
}

LOCALPROC DoFrameWorkBGCaddFile(void)
{
	WriteCStrToDestFile(" -framework ");
	WriteCStrToDestFile(DoFrameWork_gd()->s);
}

LOCALPROC Write_machoRsrcBgcDeps(void)
{
	WriteMakeDependFile(WriteMainRsrcSrcPath);
	WriteMakeDependFile(Write_machoAppIconPath);
}

LOCALPROC Write_machoRsrcBgcBuild(void)
{
	WriteDestFileLn("/Developer/Tools/Rez \\");
	++DestFileIndent;
		WriteDestFileLn("-i /Developer/Headers/FlatCarbon \\");
		WriteBgnDestFileLn();
			WriteCStrToDestFile("\"");
			WriteMainRsrcSrcPath();
			WriteCStrToDestFile("\" \\");
		WriteEndDestFileLn();
		WriteBgnDestFileLn();
			WriteCStrToDestFile("-o \"");
			Write_machoRsrcPath();
			WriteCStrToDestFile("\" \\");
		WriteEndDestFileLn();
		WriteDestFileLn("-useDF");
	--DestFileIndent;
}

LOCALPROC WriteBashGccMakeFile(void)
{
	WriteDestFileLn("# make file generated by gryphel build system");

	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("mk_COptionsCommon = -c");
	WriteBgcCOptions();
	WriteEndDestFileLn();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("mk_COptionsOSGLU = $(mk_COptionsCommon)");
	WriteBgcLinkOSGlucompileCommonOptions();
	WriteBgcCOptOptions();
	WriteEndDestFileLn();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("mk_COptions = $(mk_COptionsCommon)");
	WriteBgcCOptOptions();
	WriteEndDestFileLn();

	WriteBlankLineToDestFile();
	WriteDestFileLn(".PHONY: TheDefaultOutput clean");

	WriteBlankLineToDestFile();
	WriteBgnDestFileLn();
	WriteCStrToDestFile("TheDefaultOutput :");
	WriteMakeDependFile(Write_machobinpath_ToDestFile);
	WriteEndDestFileLn();

	WriteBlankLineToDestFile();
	DoAllSrcFilesWithSetup(DoSrcFileMakeCompile);

	WriteBlankLineToDestFile();
	WriteBgnDestFileLn();
	WriteCStrToDestFile("ObjFiles = ");
	WriteBackSlashToDestFile();
	WriteEndDestFileLn();
	++DestFileIndent;
		DoAllSrcFilesStandardMakeObjects();
		WriteBlankLineToDestFile();
	--DestFileIndent;

	if (HaveMacBundleApp) {
		WriteBlankLineToDestFile();
		WriteMakeRule(Write_machoAppIconPath,
			Write_tmachoShellDeps,
			Write_tmachoShell);
	}
	if (gbk_apifam_win == gbo_apifam) {
		WriteBlankLineToDestFile();
		WriteBgnDestFileLn();
		WriteMainRsrcObjPath();
		WriteCStrToDestFile(": ");
		WriteMainRsrcSrcPath();
		WriteEndDestFileLn();
		++DestFileIndent;
			WriteBgnDestFileLn();
			WriteCStrToDestFile("windres.exe");
			WriteCStrToDestFile(" -i");
			WritePathArgInMakeCmnd(WriteMainRsrcSrcPath);
			WriteCStrToDestFile(" --input-format=rc -o");
			WritePathArgInMakeCmnd(WriteMainRsrcObjPath);
			WriteCStrToDestFile(" -O coff  --include-dir SRC");
			WriteEndDestFileLn();
		--DestFileIndent;
		WriteBlankLineToDestFile();
	}

	WriteBlankLineToDestFile();
	WriteBgnDestFileLn();
	Write_machobinpath_ToDestFile();
	WriteCStrToDestFile(" : $(ObjFiles)");
	if (HaveMacBundleApp) {
		WriteMakeDependFile(Write_machoAppIconPath);
	}
	if (HaveMacRrscs) {
		WriteMakeDependFile(Write_machoRsrcPath);
	}
	if (gbk_apifam_win == gbo_apifam) {
		WriteMakeDependFile(WriteMainRsrcObjPath);
	}
	WriteEndDestFileLn();
	++DestFileIndent;
		WriteBgnDestFileLn();
		WriteXCDcallgcc();
		WriteCStrToDestFile(" \\");
		WriteEndDestFileLn();
		++DestFileIndent;
			WriteBgnDestFileLn();
			WriteCStrToDestFile("-o");
			if (gbk_apifam_nds == gbo_apifam) {
				WritePathArgInMakeCmnd(WriteBinElfObjObjPath);
			} else {
				WritePathArgInMakeCmnd(Write_machobinpath_ToDestFile);
			}
			WriteCStrToDestFile(" \\");
			WriteEndDestFileLn();

			WriteBgnDestFileLn();
			WriteCStrToDestFile("$(ObjFiles)");
			if ((gbk_apifam_osx == gbo_apifam)
				|| (gbk_apifam_cco == gbo_apifam))
			{
				DoAllFrameWorksWithSetup(DoFrameWorkBGCaddFile);
				if (ide_vers >= 4000) {
					WriteCStrToDestFile(" -Wl,-no_pie");
				}
			} else if (gbk_apifam_win == gbo_apifam) {
				WritePathArgInMakeCmnd(WriteMainRsrcObjPath);
				if (gbk_targ_wcar == cur_targ) {
					WriteCStrToDestFile(
						" -lcommctrl -lcoredll -laygshell -lmmtimer");
				} else {
					WriteCStrToDestFile(
						" -mwindows -lwinmm -lole32 -luuid");
					if (gbk_ide_cyg == cur_ide) {
						WriteCStrToDestFile(" -mno-cygwin");
					}
				}
			} else if (gbk_apifam_gtk == gbo_apifam) {
				WriteCStrToDestFile(" `pkg-config --libs gtk+-2.0`");
			} else if (gbk_apifam_sdl == gbo_apifam) {
				if (gbk_targfam_mach == gbo_targfam) {
					WriteCStrToDestFile(" -L/usr/local/lib -lSDLmain"
						" -lSDL -Wl,-framework,Cocoa");
				} else {
					WriteCStrToDestFile(" -lSDL");
				}
			} else if (gbk_apifam_sd2 == gbo_apifam) {
				if (gbk_targfam_mach == gbo_targfam) {
					WriteCStrToDestFile(
						" -Wl,-framework,Cocoa,-framework,SDL2");
				} else {
					WriteCStrToDestFile(" -lSDL2");
				}
			} else if (gbk_apifam_nds == gbo_apifam) {
				WriteCStrToDestFile(" -L$(DEVKITPRO)/libnds/lib");
				WriteCStrToDestFile(" -lfilesystem -lfat -lnds9");
			} else {
				if (gbk_targfam_slrs == gbo_targfam) {
					WriteCStrToDestFile(" -lposix4");
				}
#if MayUseSound
				if (gbk_sndapi_alsa == gbo_sndapi) {
					WriteCStrToDestFile(" -ldl");
#if 0
					WriteCStrToDestFile(" -lasound");
#endif
				} else if (gbk_sndapi_ddsp == gbo_sndapi) {
					if ((gbk_targfam_nbsd == gbo_targfam)
						|| (gbk_targfam_obsd == gbo_targfam))
					{
						WriteCStrToDestFile(" -lossaudio");
					}
				}
#endif
#if 0
				WriteCStrToDestFile(" -lXext");
#endif
				if (gbk_targfam_nbsd == gbo_targfam) {
					WriteCStrToDestFile(" -L/usr/X11R7/lib");
					WriteCStrToDestFile(" -R/usr/X11R7/lib");
				} else if (gbk_targfam_dbsd == gbo_targfam) {
					WriteCStrToDestFile(" -L/usr/pkg/lib");
				} else if (gbk_targfam_minx == gbo_targfam) {
					WriteCStrToDestFile(" -L/usr/pkg/X11R6/lib");
				} else if (gbk_targfam_irix == gbo_targfam) {
					WriteCStrToDestFile(" -L/usr/lib/X11");
				} else {
					WriteCStrToDestFile(" -L/usr/X11R6/lib");
				}
				WriteCStrToDestFile(" -lX11");
			}
			if (gbk_apifam_nds == gbo_apifam) {
				WriteCStrToDestFile(" -specs=ds_arm9.specs");
			}
			WriteBgcCompileAsmLinkCommonOptions();
			WriteBgcLinkOSGlucompileCommonOptions();
			WriteBgcCompileLinkCommonOptions();
			WriteEndDestFileLn();
		--DestFileIndent;
		if (gbk_dbg_on != gbo_dbg) {
			switch (cur_ide) {
				case gbk_ide_bgc:
					if ((gbk_targfam_minx == gbo_targfam)
						|| (gbk_targfam_linx == gbo_targfam)
						|| (gbk_targfam_oind == gbo_targfam)
							/*
								for oi64, strip makes it larger!
								but still compresses smaller.
							*/
						|| (gbk_targfam_fbsd == gbo_targfam)
						|| (gbk_targfam_obsd == gbo_targfam)
						|| (gbk_targfam_nbsd == gbo_targfam)
						|| (gbk_targfam_dbsd == gbo_targfam)
						)
					{
						WriteBgnDestFileLn();
						WriteCStrToDestFile("strip --strip-unneeded");
						WritePathArgInMakeCmnd(
							Write_machobinpath_ToDestFile);
						WriteEndDestFileLn();
					} else if (gbk_targfam_irix == gbo_targfam) {
						WriteBgnDestFileLn();
						WriteCStrToDestFile("strip -s");
						WritePathArgInMakeCmnd(
							Write_machobinpath_ToDestFile);
						WriteEndDestFileLn();
					}
					break;
				case gbk_ide_xcd:
					WriteBgnDestFileLn();
					WriteCStrToDestFile("strip -u -r");
					WritePathArgInMakeCmnd(
						Write_machobinpath_ToDestFile);
					WriteEndDestFileLn();
					break;
				case gbk_ide_dvc:
				case gbk_ide_mgw:
				case gbk_ide_cyg:
					WriteBgnDestFileLn();
					WriteCStrToDestFile("strip.exe");
					WritePathArgInMakeCmnd(WriteAppNamePath);
					WriteEndDestFileLn();
					break;
				default:
					break;
			}
		}
		if (gbk_apifam_nds == gbo_apifam) {
			WriteBgnDestFileLn();
				WriteCStrToDestFile(
					"$(DEVKITARM)/bin/arm-eabi-objcopy.exe -O binary");
				WritePathArgInMakeCmnd(WriteBinElfObjObjPath);
				WritePathArgInMakeCmnd(WriteBinArmObjObjPath);
			WriteEndDestFileLn();
			WriteBgnDestFileLn();
				WriteCStrToDestFile("$(DEVKITARM)/bin/ndstool.exe -c");
				WritePathArgInMakeCmnd(WriteAppNamePath);
				WriteCStrToDestFile(" -9");
				WritePathArgInMakeCmnd(WriteBinArmObjObjPath);
				WriteCStrToDestFile(" -b $(DEVKITPRO)/libnds/icon.bmp");
				WriteCStrToDestFile(
					" \";www.devkitpro.org;www.drunkencoders.com\"");
			WriteEndDestFileLn();
		}
	--DestFileIndent;

	if (HaveMacRrscs) {
		WriteBlankLineToDestFile();
		WriteMakeRule(Write_machoRsrcPath,
			Write_machoRsrcBgcDeps,
			Write_machoRsrcBgcBuild);
	}

	WriteBlankLineToDestFile();
	WriteDestFileLn("clean :");
	++DestFileIndent;
		WriteDestFileLn("rm -f $(ObjFiles)");
		if (HaveMacBundleApp) {
			WriteRmDir(WriteAppNamePath);
		} else {
			if (gbk_apifam_win == gbo_apifam) {
				WriteRmFile(WriteMainRsrcObjPath);
			} else if (gbk_apifam_nds == gbo_apifam) {
				WriteRmFile(WriteBinElfObjObjPath);
				WriteRmFile(WriteBinArmObjObjPath);
			}
			WriteRmFile(WriteAppNamePath);
		}
	--DestFileIndent;
}

LOCALPROC WriteBashGccSpecificFiles(void)
{
	if (HaveMacBundleApp) {
		WritePListData();
	}

	if (WantSandbox) {
		WriteEntitlementsData();
	}

	WriteADstFile1("my_project_d",
		"Makefile", "", "Make file",
		WriteBashGccMakeFile);
}