mirror of
https://github.com/InvisibleUp/uvmac.git
synced 2024-12-22 23:29:41 +00:00
439 lines
12 KiB
OpenEdge ABL
439 lines
12 KiB
OpenEdge ABL
/*
|
|
WRCNFGGL.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 "CNFGGLob.h"
|
|
*/
|
|
|
|
|
|
LOCALPROC WriteConfigurationWarning(void)
|
|
{
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn(
|
|
"This file is automatically generated by the build system,");
|
|
WriteDestFileLn(
|
|
"which tries to know what options are valid in what");
|
|
WriteDestFileLn(
|
|
"combinations. Avoid changing this file manually unless");
|
|
WriteDestFileLn(
|
|
"you know what you're doing.");
|
|
}
|
|
|
|
LOCALPROC WriteCommonCNFGGLOBContents(void)
|
|
{
|
|
WriteDestFileLn("/*");
|
|
++DestFileIndent;
|
|
WriteDestFileLn(
|
|
"Configuration options used by both platform specific");
|
|
WriteDestFileLn(
|
|
"and platform independent code.");
|
|
WriteConfigurationWarning();
|
|
--DestFileIndent;
|
|
WriteDestFileLn("*/");
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* adapt to current compiler/host processor */");
|
|
|
|
if (gbk_ide_mw8 == cur_ide) {
|
|
WriteDestFileLn("/* make sure this is correct CNFGGLOB */");
|
|
|
|
WriteCheckPreDef("__MWERKS__");
|
|
switch (gbo_cpufam) {
|
|
case gbk_cpufam_68k:
|
|
WriteCheckPreDef("__MC68K__");
|
|
if (gbk_targ_mfpu == cur_targ) {
|
|
WriteCheckPreDef("__MC68881__");
|
|
} else {
|
|
WriteCheckPreNDef("__MC68881__");
|
|
}
|
|
break;
|
|
case gbk_cpufam_ppc:
|
|
WriteCheckPreDef("__POWERPC__");
|
|
break;
|
|
case gbk_cpufam_x86:
|
|
WriteCheckPreDef("__INTEL__");
|
|
break;
|
|
}
|
|
} else if ((gbk_ide_bgc == cur_ide)
|
|
|| (gbk_ide_xcd == cur_ide)
|
|
|| (gbk_ide_mvc == cur_ide))
|
|
{
|
|
switch (gbo_cpufam) {
|
|
case gbk_cpufam_x86:
|
|
WriteDestFileLn("#ifdef __x86_64__");
|
|
WriteDestFileLn("#error \"source is configured for"
|
|
" 32 bit compiler\"");
|
|
WriteDestFileLn("#endif");
|
|
break;
|
|
case gbk_cpufam_x64:
|
|
WriteDestFileLn("#ifdef __i386__");
|
|
WriteDestFileLn("#error \"source is configured for"
|
|
" 64 bit compiler\"");
|
|
WriteDestFileLn("#endif");
|
|
break;
|
|
}
|
|
}
|
|
|
|
WriteBlankLineToDestFile();
|
|
|
|
#if NeedIntFormatInfo
|
|
WriteCompCondBool("MostSigByteFirst",
|
|
(gbk_cpufam_68k == gbo_cpufam)
|
|
|| (gbk_cpufam_ppc == gbo_cpufam));
|
|
WriteCompCondBool("LeastSigByteFirst",
|
|
(gbk_cpufam_x86 == gbo_cpufam)
|
|
|| (gbk_cpufam_x64 == gbo_cpufam));
|
|
WriteCompCondBool("TwosCompSigned",
|
|
(gbk_cpufam_68k == gbo_cpufam)
|
|
|| (gbk_cpufam_ppc == gbo_cpufam)
|
|
|| (gbk_cpufam_x86 == gbo_cpufam)
|
|
|| (gbk_cpufam_x64 == gbo_cpufam));
|
|
#endif
|
|
|
|
if (gbk_cpufam_68k == gbo_cpufam) {
|
|
WriteDestFileLn("#define HaveCPUfamM68K 1");
|
|
}
|
|
|
|
if ((gbk_ide_bgc == cur_ide)
|
|
|| (gbk_ide_xcd == cur_ide)
|
|
|| (gbk_ide_mvc == cur_ide)
|
|
|| (gbk_ide_cyg == cur_ide)
|
|
|| (gbk_ide_dkp == cur_ide))
|
|
{
|
|
WriteDestFileLn(
|
|
"#define MayInline inline __attribute__((always_inline))");
|
|
} else
|
|
if (gbk_ide_snc == cur_ide) {
|
|
WriteDestFileLn("#define MayInline inline");
|
|
} else
|
|
if (gbk_ide_mw8 == cur_ide) {
|
|
WriteDestFileLn("#define MayInline __inline__");
|
|
} else
|
|
if (gbk_ide_msv == cur_ide) {
|
|
if (ide_vers >= 6000) {
|
|
WriteDestFileLn("#define MayInline __forceinline");
|
|
} else {
|
|
WriteDestFileLn("#define MayInline __inline");
|
|
}
|
|
} else
|
|
{
|
|
/* WriteDestFileLn("#define MayInline"); */
|
|
}
|
|
|
|
if ((gbk_ide_bgc == cur_ide)
|
|
|| (gbk_ide_xcd == cur_ide)
|
|
|| (gbk_ide_mvc == cur_ide)
|
|
|| (gbk_ide_cyg == cur_ide)
|
|
|| (gbk_ide_dkp == cur_ide))
|
|
{
|
|
WriteDestFileLn(
|
|
"#define MayNotInline __attribute__((noinline))");
|
|
} else
|
|
if ((gbk_ide_msv == cur_ide) && (ide_vers >= 7000)) {
|
|
WriteDestFileLn("#define MayNotInline __declspec(noinline)");
|
|
} else
|
|
{
|
|
/* WriteDestFileLn("#define MayNotInline"); */
|
|
}
|
|
|
|
if (gbk_ide_mvc == cur_ide) {
|
|
if ((gbk_cpufam_68k == gbo_cpufam)
|
|
|| (gbk_cpufam_ppc == gbo_cpufam))
|
|
{
|
|
WriteDestFileLn("#define BigEndianUnaligned 1");
|
|
WriteDestFileLn("#define LittleEndianUnaligned 0");
|
|
} else if ((gbk_cpufam_x86 == gbo_cpufam)
|
|
|| (gbk_cpufam_x64 == gbo_cpufam))
|
|
{
|
|
WriteDestFileLn("#define BigEndianUnaligned 0");
|
|
WriteDestFileLn("#define LittleEndianUnaligned 1");
|
|
} else {
|
|
WriteDestFileLn("#define BigEndianUnaligned 0");
|
|
WriteDestFileLn("#define LittleEndianUnaligned 0");
|
|
}
|
|
|
|
if (gbk_cpufam_x86 == gbo_cpufam) {
|
|
WriteDestFileLn(
|
|
"#define my_reg_call __attribute__ ((regparm(3)))");
|
|
}
|
|
|
|
if (gbk_cpufam_x86 == gbo_cpufam) {
|
|
WriteDestFileLn(
|
|
"#define my_osglu_call __attribute__ "
|
|
"((force_align_arg_pointer))");
|
|
}
|
|
|
|
WriteDestFileLn("#define my_cond_rare(x) "
|
|
"(__builtin_expect(x, 0))");
|
|
WriteDestFileLn("#define Have_ASR 1");
|
|
if (gbk_cpufam_x64 == gbo_cpufam) {
|
|
WriteDestFileLn("#define HaveUi6Div 1");
|
|
}
|
|
if (gbk_targ_wcar == cur_targ) {
|
|
WriteDestFileLn("#define HaveUi5to6Mul 0");
|
|
}
|
|
if ((gbk_cpufam_x64 == gbo_cpufam)
|
|
|| (gbk_cpufam_ppc == gbo_cpufam)
|
|
|| (gbk_cpufam_arm == gbo_cpufam))
|
|
{
|
|
WriteDestFileLn("#define HaveGlbReg 1");
|
|
}
|
|
WriteDestFileLn(
|
|
"#define my_align_8 __attribute__ ((aligned (8)))");
|
|
}
|
|
|
|
WriteCompCondBool("SmallGlobals", gbk_cpufam_68k == gbo_cpufam);
|
|
|
|
if ((gbk_ide_bgc == cur_ide)
|
|
|| (gbk_ide_xcd == cur_ide)
|
|
|| (gbk_ide_mvc == cur_ide)
|
|
|| (gbk_ide_ccc == cur_ide)
|
|
|| (gbk_ide_dvc == cur_ide)
|
|
|| (gbk_ide_mgw == cur_ide)
|
|
|| (gbk_ide_dmc == cur_ide)
|
|
|| (gbk_ide_lcc == cur_ide)
|
|
|| (gbk_ide_cyg == cur_ide)
|
|
|| (gbk_ide_dkp == cur_ide)
|
|
)
|
|
{
|
|
WriteDestFileLn("#define cIncludeUnused 0");
|
|
} else {
|
|
WriteDestFileLn("#define cIncludeUnused 1");
|
|
}
|
|
|
|
if (gbk_ide_lcc == cur_ide) {
|
|
WriteDestFileLn("#define UnusedParam(x)");
|
|
} else {
|
|
WriteDestFileLn("#define UnusedParam(p) (void) p");
|
|
}
|
|
|
|
if (gbk_ide_msv == cur_ide) {
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* --- set up compiler options --- */");
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* ignore integer conversion warnings */");
|
|
WriteDestFileLn(
|
|
"#pragma warning(disable : 4244 4761 4018 4245 4024 4305)");
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* ignore unused inline warning */");
|
|
WriteDestFileLn("#pragma warning(disable : 4514 4714)");
|
|
#if 0
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* ignore type redefinition warning */");
|
|
WriteDestFileLn("#pragma warning(disable : 4142)");
|
|
#endif
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn(
|
|
"/* ignore unary minus operator"
|
|
" applied to unsigned type warning */");
|
|
WriteDestFileLn("#pragma warning(disable : 4146)");
|
|
|
|
if (cur_mIIorIIX
|
|
|| (em_cpu_vers >= 2))
|
|
{
|
|
/* C4127: conditional expression is constant */
|
|
/*
|
|
C4701: local variable may have been used without having
|
|
been initialized
|
|
*/
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* more warnings */");
|
|
WriteDestFileLn("#pragma warning(disable : 4127 4701)");
|
|
}
|
|
|
|
} else if (gbk_ide_plc == cur_ide) {
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("#pragma warn(disable: 2135 2137)");
|
|
}
|
|
|
|
if (gbk_ide_mw8 == cur_ide) {
|
|
if (gbk_dbg_on != gbo_dbg) {
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("#ifdef OptForSpeed");
|
|
WriteDestFileLn("#pragma optimize_for_size off");
|
|
WriteDestFileLn("#endif");
|
|
}
|
|
}
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* --- integer types ---- */");
|
|
|
|
/*
|
|
define signed and unsigned integer types
|
|
for 8 bits, 16 bits, 32 bits, and so on.
|
|
|
|
the computer might not have integer types
|
|
of a given size. in this case should define
|
|
a type of correct size, such as a structure
|
|
type, even if the computer can't directly do
|
|
integer operations on it. then set
|
|
HaveReal?i?b to 0.
|
|
*/
|
|
|
|
/* 8 bits */
|
|
|
|
/* (ui3b)0 - (ui3b)1 == (ui3b)255 */
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef unsigned char ui3b;");
|
|
WriteDestFileLn("#define HaveRealui3b 1");
|
|
|
|
/* sizeof(si3b) == sizeof(ui3b) */
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef signed char si3b;");
|
|
WriteDestFileLn("#define HaveRealsi3b 1");
|
|
|
|
/* 16 bits */
|
|
|
|
/* (ui4b)0 - (ui4b)1 == (ui4b)65535 */
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef unsigned short ui4b;");
|
|
WriteDestFileLn("#define HaveRealui4b 1");
|
|
|
|
/* sizeof(si4b) == sizeof(ui4b) */
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef short si4b;");
|
|
WriteDestFileLn("#define HaveRealsi4b 1");
|
|
|
|
/* 32 bits */
|
|
|
|
/* (ui5b)0 - (ui5b)1 == (ui5b)4294967295 */
|
|
WriteBlankLineToDestFile();
|
|
if (gbk_cpufam_x64 == gbo_cpufam) {
|
|
WriteDestFileLn("typedef unsigned int ui5b;");
|
|
} else {
|
|
WriteDestFileLn("typedef unsigned long ui5b;");
|
|
}
|
|
WriteDestFileLn("#define HaveRealui5b 1");
|
|
|
|
/* sizeof(si5b) == sizeof(ui5b) */
|
|
WriteBlankLineToDestFile();
|
|
if (gbk_cpufam_x64 == gbo_cpufam) {
|
|
WriteDestFileLn("typedef int si5b;");
|
|
} else {
|
|
WriteDestFileLn("typedef long si5b;");
|
|
}
|
|
WriteDestFileLn("#define HaveRealsi5b 1");
|
|
|
|
/* 64 bits */ /* this is mostly for illustration, not used */
|
|
#if 0
|
|
struct ui6b {
|
|
ui5b f0;
|
|
ui5b f1;
|
|
};
|
|
typedef struct ui6b ui6b;
|
|
|
|
struct si6b {
|
|
ui5b f0;
|
|
si5b f1;
|
|
};
|
|
typedef struct si6b si6b;
|
|
#endif
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("#define HaveRealui6b 0");
|
|
WriteDestFileLn("#define HaveRealsi6b 0");
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* --- integer representation types ---- */");
|
|
|
|
/*
|
|
for each integer type, define
|
|
the most efficient representation
|
|
for parameter passing and temporary
|
|
variables on the current
|
|
computer.
|
|
*/
|
|
|
|
WriteBlankLineToDestFile();
|
|
#if ModPPCi3rTypes
|
|
if (gbk_cpufam_ppc == gbo_cpufam) {
|
|
WriteDestFileLn("typedef ui5b ui3r;");
|
|
WriteDestFileLn("#define ui3beqr 0");
|
|
} else
|
|
#endif
|
|
{
|
|
WriteDestFileLn("typedef ui3b ui3r;");
|
|
WriteDestFileLn("#define ui3beqr 1");
|
|
}
|
|
|
|
WriteBlankLineToDestFile();
|
|
#if ModPPCi3rTypes
|
|
if (gbk_cpufam_ppc == gbo_cpufam) {
|
|
WriteDestFileLn("typedef si5b si3r;");
|
|
WriteDestFileLn("#define si3beqr 0");
|
|
} else
|
|
#endif
|
|
{
|
|
WriteDestFileLn("typedef si3b si3r;");
|
|
WriteDestFileLn("#define si3beqr 1");
|
|
}
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef ui4b ui4r;");
|
|
WriteDestFileLn("#define ui4beqr 1");
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef si4b si4r;");
|
|
WriteDestFileLn("#define si4beqr 1");
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef ui5b ui5r;");
|
|
WriteDestFileLn("#define ui5beqr 1");
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("typedef si5b si5r;");
|
|
WriteDestFileLn("#define si5beqr 1");
|
|
|
|
if (gbk_ide_mvc == cur_ide) {
|
|
if (gbk_cpufam_x86 == gbo_cpufam)
|
|
{
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* for probable register parameters */");
|
|
WriteDestFileLn("#define ui4rr ui5r");
|
|
WriteDestFileLn("#define ui3rr ui5r");
|
|
} else if (gbk_cpufam_x64 == gbo_cpufam) {
|
|
#if 0
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn("/* for probable register parameters */");
|
|
WriteDestFileLn("#define ui4rr unsigned long int");
|
|
WriteDestFileLn("#define ui3rr unsigned long int");
|
|
#endif
|
|
WriteDestFileLn("#define si5rr signed long");
|
|
}
|
|
|
|
WriteBlankLineToDestFile();
|
|
WriteDestFileLn(
|
|
"#define MySwapUi5r(x) ((ui5r)__builtin_bswap32(x))");
|
|
WriteDestFileLn("#define HaveMySwapUi5r 1");
|
|
}
|
|
}
|
|
|
|
LOCALPROC Write64bitConfig(void)
|
|
{
|
|
WriteBlankLineToDestFile();
|
|
if (gbk_ide_msv == cur_ide) {
|
|
WriteDestFileLn("typedef signed __int64 si6r;");
|
|
WriteDestFileLn("typedef signed __int64 si6b;");
|
|
WriteDestFileLn("typedef unsigned __int64 ui6r;");
|
|
WriteDestFileLn("typedef unsigned __int64 ui6b;");
|
|
WriteDestFileLn("#define LIT64(a) a##Ui64");
|
|
} else {
|
|
WriteDestFileLn("typedef signed long long si6r;");
|
|
WriteDestFileLn("typedef signed long long si6b;");
|
|
WriteDestFileLn("typedef unsigned long long ui6r;");
|
|
WriteDestFileLn("typedef unsigned long long ui6b;");
|
|
WriteDestFileLn("#define LIT64(a) a##ULL");
|
|
}
|
|
}
|