summaryrefslogtreecommitdiff
path: root/sdk_hdrs/DropInCompilerLinker.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xsdk_hdrs/DropInCompilerLinker.h407
1 files changed, 406 insertions, 1 deletions
diff --git a/sdk_hdrs/DropInCompilerLinker.h b/sdk_hdrs/DropInCompilerLinker.h
index 4dd87f6..439619b 100755
--- a/sdk_hdrs/DropInCompilerLinker.h
+++ b/sdk_hdrs/DropInCompilerLinker.h
@@ -1 +1,406 @@
-/* * DropInCompilerLinker.h - Drop-In Interface for Metrowerks CodeWarrior� Compilers and Linkers * * Copyright � 1996 Metrowerks, Inc. All rights reserved. * */ #ifndef __DROPINCOMPILERLINKER_H__ #define __DROPINCOMPILERLINKER_H__ #ifdef __MWERKS__ # pragma once #endif #ifndef __CWPlugins_H__ #include "CWPlugins.h" #endif #ifndef __COMPILERMAPPING_H__ #include "CompilerMapping.h" #endif #ifdef __MWERKS__ #pragma options align=mac68k #endif #ifdef _MSC_VER #pragma pack(push,2) #endif #ifdef __cplusplus extern "C" { #endif #if CW_USE_PRAGMA_IMPORT #pragma import on #endif /* this is the current version number of the API documented herein */ #define DROPINCOMPILERLINKERAPIVERSION_4 4 #define DROPINCOMPILERLINKERAPIVERSION_5 5 #define DROPINCOMPILERLINKERAPIVERSION_6 6 #define DROPINCOMPILERLINKERAPIVERSION_7 7 #define DROPINCOMPILERLINKERAPIVERSION_8 8 #define DROPINCOMPILERLINKERAPIVERSION_9 9 #define DROPINCOMPILERLINKERAPIVERSION_10 10 #define DROPINCOMPILERLINKERAPIVERSION_11 11 #define DROPINCOMPILERLINKERAPIVERSION_12 12 #define DROPINCOMPILERLINKERAPIVERSION_13 13 #define DROPINCOMPILERLINKERAPIVERSION DROPINCOMPILERLINKERAPIVERSION_13 /* deprecated request codes */ enum { reqInitCompiler = reqInitialize, /* (called when compiler is loaded) */ reqTermCompiler = reqTerminate, /* (called when compiler is unloaded) */ reqInitLinker = reqInitialize, /* (called when linker is loaded) */ reqTermLinker = reqTerminate /* (called when linker is unloaded) */ }; /* request codes (common) */ enum { reqTargetCompileEnded = -17, /* Sent when target's compile phase ends */ reqTargetCompileStarted = -16, /* Sent when target's compile phase starts */ reqTargetLinkEnded = -15, /* Sent when the link has ended */ reqTargetLinkStarted = -14, /* Sent when the link starts */ reqFileListBuildEnded = -13, /* Sent when the group file build ends */ reqFileListBuildStarted = -12, /* Sent when the group file build starts */ reqSubProjectBuildEnded = -11, /* Sent when subproject's build ends */ reqSubProjectBuildStarted = -10, /* Sent when subproject's build starts */ reqTargetBuildEnded = -9, /* Sent when target's build ends */ reqTargetBuildStarted = -8, /* Sent when target's build starts */ reqProjectBuildEnded = -7, /* Sent when project build ends */ reqProjectBuildStarted = -6, /* Sent when project build starts */ reqTargetLoaded = -5, /* called when the "keeps target info" flag is set */ reqTargetPrefsChanged = -4, /* called when the "keeps target info" flag is set */ reqTargetUnloaded = -3 /* called when the "keeps target info" flag is set */ }; /* requests codes (compilers) */ enum { reqCompile = 0, /* compile/precompile/preprocess source file */ /* and return results */ reqMakeParse, /* used internally by Metrowerks */ reqCompDisassemble, /* disassemble a specific file in the project */ reqCheckSyntax, /* check syntax, but don't generate code */ reqPreprocessForDebugger /* when preprocess, don't open window w/results */ }; /* requests codes (linkers) */ enum { reqLink = 0, /* link project and generate executable or library */ reqDisassemble, /* disassemble a specific file in the project */ reqTargetInfo, /* get info about the generated executable */ reqPreRun /* give linker a last chance to modify target info */ }; /* Returned as part of CWFileInfo to indicate the */ /* type of data pointed to by the filedata pointer */ enum { filetypeText, /* data is text */ filetypeUnknown /* unknown type, could be precompiled header */ }; /* executable linkage types, used in CWTargetInfo.linkType */ enum { exelinkageFlat, /* flat executable */ exelinkageSegmented, /* uses 68K code segments */ exelinkageOverlay1 /* uses overlay groups and overlays */ }; /* output file type, used in CWTargetInfo.outputType */ enum { linkOutputNone, /* linker produces no output */ linkOutputFile, /* linker produces a file */ linkOutputDirectory /* linker produces a directory */ }; /* Constants for the targetCPU field of the CWTargetInfo struct */ enum { targetCPU68K = CWFOURCHAR('6','8','k',' '), targetCPUPowerPC = CWFOURCHAR('p','p','c',' '), targetCPUi80x86 = CWFOURCHAR('8','0','8','6'), targetCPUMips = CWFOURCHAR('m','i','p','s'), targetCPUNECv800 = CWFOURCHAR('v','8','0','0'), targetCPUEmbeddedPowerPC = CWFOURCHAR('e','P','P','C'), targetCPUARM = CWFOURCHAR('a','r','m',' '), targetCPUSparc = CWFOURCHAR('s','p','r','c'), targetCPUIA64 = CWFOURCHAR('I','A','6','4'), targetCPUAny = CWFOURCHAR('*','*','*','*'), targetCPUMCORE = CWFOURCHAR('m','c','o','r'), targetCPU_Intent = CWFOURCHAR('n','t','n','t') }; /* Constants for the targetOS field of the CWTargetInfo struct */ enum { targetOSMacintosh = CWFOURCHAR('m','a','c',' '), targetOSWindows = CWFOURCHAR('w','i','n','t'), targetOSNetware = CWFOURCHAR('n','l','m',' '), targetOSMagicCap = CWFOURCHAR('m','c','a','p'), targetOSOS9 = CWFOURCHAR('o','s','9',' '), targetOSEmbeddedABI = CWFOURCHAR('E','A','B','I'), targetOSJava = CWFOURCHAR('j','a','v','a'), /* java (no VM specification) */ targetOSJavaMS = CWFOURCHAR('j','v','m','s'), /* Microsoft VM */ targetOSJavaSun = CWFOURCHAR('j','v','s','n'), /* Sun VM */ targetOSJavaMRJ = CWFOURCHAR('j','v','m','r'), /* MRJ VM */ targetOSJavaMW = CWFOURCHAR('j','v','m','w'), /* Metrowerks VM */ targetOSPalm = CWFOURCHAR('p','a','l','m'), targetOSGTD5 = CWFOURCHAR('g','t','d','5'), targetOSSolaris = CWFOURCHAR('s','l','r','s'), targetOSLinux = CWFOURCHAR('l','n','u','x'), targetOSAny = CWFOURCHAR('*','*','*','*'), targetOS_Intent = CWFOURCHAR('n','t','n','t') }; /* linker flags, as used in member dropinflags of DropInFlags struct returned by linkers */ enum { cantDisassemble = 1L << 31, /* this linker doesn't support 'Disassemble' */ isPostLinker = 1L << 30, /* this is a post linker */ linkAllowDupFileNames = 1L << 29, /* allow multiple project files with the same name */ linkMultiTargAware = 1L << 28, /* the linker can be used with multiple targets */ isPreLinker = 1L << 27, /* this is a pre linker */ linkerUsesTargetStorage = 1L << 26, /* the linker keeps storage per target */ linkerUnmangles = 1L << 25, /* The linker supports unmangling. */ magicCapLinker = 1L << 24, /* Pre- or post-linker is used for MagicCap */ linkAlwaysReload = 1L << 23, /* Always reload the linker before request */ linkRequiresProjectBuildStartedMsg = 1L << 22, /* Linker listens for a Project Build Started/Ended message */ linkRequiresTargetBuildStartedMsg = 1L << 21, /* Linker listens for a Target Build Started/Ended message */ linkRequiresSubProjectBuildStartedMsg = 1L << 20, /* Linker listens for a Sub Project Build Started/Ended message */ linkRequiresFileListBuildStartedMsg = 1L << 19, /* Linker listens for a File List Build Started/Ended message */ linkRequiresTargetLinkStartedMsg = 1L << 18, /* Linker listens for a Target Link Started/Ended message */ linkerWantsPreRunRequest = 1L << 17, /* Linker wants to be sent the pre-run request */ linkerGetTargetInfoThreadSafe = 1L << 16, /* GetTargetInfo call doesn't use any globals, etc. */ linkerUsesCaseInsensitiveSymbols = 1L << 15, /* All languages used by linker contain case insensitive browser symbols */ linkerDisasmRequiresPreprocess = 1L << 14, /* (obsolete) file must be preprocesed before being passed to linker for disasm */ linkerUsesFrameworks = 1L << 13, /* target uses frameworks; enables framework-style file searching */ linkerInitializeOnMainThread = 1L << 12 /* The Linker needs to be intialized on the main thread. */ /* remaining flags are reserved for future use and should be zero-initialized */ }; /* ways to store dependency returned as CWFileSpec in StoreObjectData */ enum { cwAccessAbsolute, cwAccessPathRelative, cwAccessFileName, cwAccessFileRelative }; /* specifies what browser information compilers should generate */ /* they should always generate records for globals and functions */ typedef struct CWBrowseOptions { Boolean recordClasses; /* [<-] do we record info for classes */ Boolean recordEnums; /* [<-] do we record info for enums */ Boolean recordMacros; /* [<-] do we record info for macros */ Boolean recordTypedefs; /* [<-] do we record info for typedefs */ Boolean recordConstants; /* [<-] do we record info for constants */ Boolean recordTemplates; /* [<-] do we record info for templates */ Boolean recordUndefinedFunctions; /* [<-] do we record info for undefined functions */ SInt32 reserved1; /* reserved space */ SInt32 reserved2; /* reserved space */ } CWBrowseOptions; /* A dependency tag is associated with unit data in the StoreUnitData callback. It should */ /* change whenever unit data has changed in a way that forces its dependents to be rebuilt. */ /* Typically, it is just a checksum on the unit data. */ typedef UInt32 CWDependencyTag; /* dependency information passed back in StoreObjectData */ typedef struct CWDependencyInfo { SInt32 fileIndex; /* Another project entry. -1 => use fileSpec */ CWFileSpec fileSpec; /* location of file. Only used if fileIndex < 0 */ short fileSpecAccessType; /* One of cwAccessAbsolute, etc. above. Only */ /* used is specifying via fileSpec. */ short dependencyType; /* cwNormalDependency or cwInterfaceDependency. */ /* Values defined in CWPlugins.h */ } CWDependencyInfo; /* information used when calling StoreObjectData */ typedef struct CWObjectData { CWMemHandle objectdata; /* Handle to generated object code, */ /* resource data, or preprocessed text */ CWMemHandle browsedata; /* Handle to generated browse data */ SInt32 reserved1; /* reserved for future use, set to zero */ SInt32 codesize; /* size of generated code */ SInt32 udatasize; /* size of uninitialized data */ SInt32 idatasize; /* size of initialized data */ SInt32 compiledlines; /* number of lines of source compiled */ Boolean interfaceChanged; /* recompile interface dependents? */ SInt32 reserved2; /* reserved for future use, set to zero */ void* compilecontext; /* used internally by Metrowerks */ CWDependencyInfo* dependencies; /* optional array of dependencies */ short dependencyCount; /* overrides those collected by IDE */ CWFileSpec* objectfile; /* external object code file (i.e. .o file) */ } CWObjectData; /* characteristics of a link target */ typedef struct CWTargetInfo { short outputType; /* outputs file, directory, or nothing */ CWFileSpec outfile; /* generated executable file/folder spec */ CWFileSpec symfile; /* generated debug file spec */ CWFileSpec runfile; /* file to run, can be same or different from outfile */ short linkType; /* flat, segmented, or overlays */ Boolean canRun; /* "Run" can be performed on this target */ Boolean canDebug; /* "Run with Debugger" can be performed on this target */ CWDataType targetCPU; /* target CPU architecture (e.g. 68K, PowerPC, x86, MIPS)*/ CWDataType targetOS; /* target OS (e.g. MacOS, Windows, Unix) */ #if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS OSType outfileCreator; /* file creator, if outputType == linkOutputFile */ OSType outfileType; /* file type, if outputType == linkOutputFile */ OSType debuggerCreator; /* file creator of debugger for this target */ OSType runHelperCreator; /* creator of helper app to use when running this file. */ #endif #if CWPLUGIN_HOST == CWPLUGIN_HOST_WIN32 Boolean runHelperIsRegKey; /* true if runHelperName is a registry key */ Boolean debugHelperIsRegKey;/* true if debugHelperName is a registry key */ char args[512]; /* command line arguments */ char runHelperName[512]; /* full path to the run helper executable or a reg key */ Boolean runHelperRequiresURL;/* Indicates whether the outfile must be converted to */ /* a file scheme URL before being passed to the run */ /* helper app */ char reserved2; char debugHelperName[512];/* full path to the debug helper executable or a reg key*/ #endif // We need the args for Solaris #if (CWPLUGIN_HOST == CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST == CWPLUGIN_HOST_LINUX) char args[512]; /* command line arguments */ char runHelperName[512]; /* Relative path name from (Helper Apps) to run helper program */ Boolean runHelperRequiresURL; /* Indicates whether the outfile must be converted to */ /* a file scheme URL before being passed to the run */ /* helper app */ char reserved2[3]; char debugHelperName[512]; /* Relative path name from (Helper Apps) to debug helper */ #endif CWFileSpec linkAgainstFile; /* file parent targets link against (e.g. lib file) */ } CWTargetInfo; typedef struct CWUnmangleInfo { void* targetStorage; const char* mangledName; char* unmangleBuff; SInt32 unmangleBuffSize; unsigned short browserClassID; unsigned char browserLang; unsigned char filler1; } CWUnmangleInfo; /* Types used to get compiler-specific browser symbol information. */ typedef struct CWCompilerBrSymbol { char symName[32]; char symUIName[32]; } CWCompilerBrSymbol; typedef struct CWCompilerBrSymbolList { short count; CWCompilerBrSymbol items[1]; } CWCompilerBrSymbolList; typedef struct CWCompilerBrSymbolInfo { void* targetStorage; CWCompilerBrSymbolList* symList; /* [<-] Compiler should put a pointer to the read-only list here.*/ } CWCompilerBrSymbolInfo; typedef struct CWFrameworkInfo { CWFileSpec fileSpec; /* location of ".framework" directory */ char version[256]; /* which version directory to use; if empty use "Current" sym link */ } CWFrameworkInfo; /*** Declaration of plugin entry points that must be implemented by non-MacOS plugins ***/ /*** It can also be implemented by a MacOS plugin to override the 'Targ' resource ***/ CWPLUGIN_ENTRY (CWPlugin_GetTargetList)(const struct CWTargetList**); /*** Optional entry points ***/ CWPLUGIN_ENTRY (CWPlugin_GetDefaultMappingList)(const struct CWExtMapList**); CWPLUGIN_ENTRY (Helper_Unmangle)(CWUnmangleInfo*); CWPLUGIN_ENTRY (Helper_GetCompilerBrSymbols)(CWCompilerBrSymbolInfo*); /*** callbacks to the IDE, in addition to those in CWPlugins.h ***/ CW_CALLBACK CWIsPrecompiling(CWPluginContext context, Boolean* isPrecompiling); CW_CALLBACK CWIsAutoPrecompiling(CWPluginContext context, Boolean* isAutoPrecompiling); CW_CALLBACK CWIsPreprocessing(CWPluginContext context, Boolean* isPreprocessing); CW_CALLBACK CWIsGeneratingDebugInfo(CWPluginContext context, Boolean* isGenerating); CW_CALLBACK CWIsCachingPrecompiledHeaders(CWPluginContext context, Boolean* isCaching); CW_CALLBACK CWGetBrowseOptions(CWPluginContext context, CWBrowseOptions* browseOptions); CW_CALLBACK CWGetBuildSequenceNumber(CWPluginContext context, SInt32* sequenceNumber); CW_CALLBACK CWGetTargetInfo(CWPluginContext context, CWTargetInfo* targetInfo); CW_CALLBACK CWSetTargetInfo(CWPluginContext context, CWTargetInfo* targetInfo); CW_CALLBACK CWGetTargetStorage(CWPluginContext context, void** storage); CW_CALLBACK CWSetTargetStorage(CWPluginContext context, void* storage); CW_CALLBACK CWGetMainFileNumber(CWPluginContext context, SInt32* fileNumber); CW_CALLBACK CWGetMainFileID(CWPluginContext context, short* fileID); CW_CALLBACK CWGetMainFileSpec(CWPluginContext context, CWFileSpec* fileSpec); CW_CALLBACK CWGetMainFileText(CWPluginContext context, const char** text, SInt32* textLength); CW_CALLBACK CWCachePrecompiledHeader(CWPluginContext context, const CWFileSpec* filespec, CWMemHandle pchhandle); CW_CALLBACK CWLoadObjectData(CWPluginContext context, SInt32 whichfile, CWMemHandle* objectdata); CW_CALLBACK CWFreeObjectData(CWPluginContext context, SInt32 whichfile, CWMemHandle objectdata); CW_CALLBACK CWStoreObjectData(CWPluginContext context, SInt32 whichfile, CWObjectData* object); CW_CALLBACK CWGetSuggestedObjectFileSpec(CWPluginContext context, SInt32 whichfile, CWFileSpec* fileSpec); CW_CALLBACK CWGetStoredObjectFileSpec(CWPluginContext context, SInt32 whichfile, CWFileSpec* fileSpec); CW_CALLBACK CWDisplayLines(CWPluginContext context, SInt32 nlines); CW_CALLBACK CWBeginSubCompile(CWPluginContext context, SInt32 whichfile, CWPluginContext* subContext); CW_CALLBACK CWEndSubCompile(CWPluginContext subContext); CW_CALLBACK CWGetPrecompiledHeaderSpec(CWPluginContext context, CWFileSpec *pchspec, const char *target); CW_CALLBACK CWGetResourceFile(CWPluginContext context, CWFileSpec* filespec); CW_CALLBACK CWPutResourceFile(CWPluginContext context, const char* prompt, const char* name, CWFileSpec* filespec); /* Metrowerks Pascal support */ CW_CALLBACK CWLookUpUnit(CWPluginContext context, const char* name, Boolean isdependency, const void** unitdata, SInt32* unitdatalength); CW_CALLBACK CWSBMfiles(CWPluginContext context, short libref); CW_CALLBACK CWStoreUnit(CWPluginContext context, const char* unitname, CWMemHandle unitdata, CWDependencyTag dependencytag); CW_CALLBACK CWReleaseUnit(CWPluginContext context, void* unitdata); CW_CALLBACK CWUnitNameToFileName(CWPluginContext context, const char* unitname, char* filename); /* obsolete, for MacOS backward compatibility only */ #if CWPLUGIN_API == CWPLUGIN_API_MACOS CW_CALLBACK CWOSAlert(CWPluginContext context, const char* message, OSErr errorcode); CW_CALLBACK CWOSErrorMessage(CWPluginContext context, const char *msg, OSErr errorcode); #endif CW_CALLBACK CWGetModifiedFiles(CWPluginContext context, SInt32* modifiedFileCount, const SInt32** modifiedFiles); /* Get information from the "Runtime Settings" panel */ CW_CALLBACK CWGetCommandLineArgs(CWPluginContext context, const char** commandLineArgs); CW_CALLBACK CWGetWorkingDirectory(CWPluginContext context, CWFileSpec* workingDirectorySpec); CW_CALLBACK CWGetEnvironmentVariableCount(CWPluginContext context, SInt32* count); CW_CALLBACK CWGetEnvironmentVariable(CWPluginContext context, SInt32 index, const char** name, const char** value); CW_CALLBACK CWGetFrameworkCount(CWPluginContext context, SInt32* frameworkCount); CW_CALLBACK CWGetFrameworkInfo(CWPluginContext context, SInt32 whichFramework, CWFrameworkInfo* frameworkInfo); CW_CALLBACK CWGetFrameworkSharedLibrary(CWPluginContext context, SInt32 whichFramework, CWFileSpec* frameworkSharedLibrary); #if CW_USE_PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #ifdef _MSC_VER #pragma pack(pop,2) #endif #ifdef __MWERKS__ #pragma options align=reset #endif #endif /* __DROPINCOMPILERLINKER_H__ */ \ No newline at end of file
+/*
+ * DropInCompilerLinker.h - Drop-In Interface for Metrowerks CodeWarrior� Compilers and Linkers
+ *
+ * Copyright � 1996 Metrowerks, Inc. All rights reserved.
+ *
+ */
+
+#ifndef __DROPINCOMPILERLINKER_H__
+#define __DROPINCOMPILERLINKER_H__
+
+#ifdef __MWERKS__
+# pragma once
+#endif
+
+#ifndef __CWPlugins_H__
+#include "CWPlugins.h"
+#endif
+
+#ifndef __COMPILERMAPPING_H__
+#include "CompilerMapping.h"
+#endif
+
+#ifdef __MWERKS__
+#pragma options align=mac68k
+#endif
+
+#ifdef _MSC_VER
+#pragma pack(push,2)
+#endif
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#if CW_USE_PRAGMA_IMPORT
+#pragma import on
+#endif
+
+
+/* this is the current version number of the API documented herein */
+#define DROPINCOMPILERLINKERAPIVERSION_4 4
+#define DROPINCOMPILERLINKERAPIVERSION_5 5
+#define DROPINCOMPILERLINKERAPIVERSION_6 6
+#define DROPINCOMPILERLINKERAPIVERSION_7 7
+#define DROPINCOMPILERLINKERAPIVERSION_8 8
+#define DROPINCOMPILERLINKERAPIVERSION_9 9
+#define DROPINCOMPILERLINKERAPIVERSION_10 10
+#define DROPINCOMPILERLINKERAPIVERSION_11 11
+#define DROPINCOMPILERLINKERAPIVERSION_12 12
+#define DROPINCOMPILERLINKERAPIVERSION_13 13
+#define DROPINCOMPILERLINKERAPIVERSION DROPINCOMPILERLINKERAPIVERSION_13
+
+
+/* deprecated request codes */
+enum {
+ reqInitCompiler = reqInitialize, /* (called when compiler is loaded) */
+ reqTermCompiler = reqTerminate, /* (called when compiler is unloaded) */
+ reqInitLinker = reqInitialize, /* (called when linker is loaded) */
+ reqTermLinker = reqTerminate /* (called when linker is unloaded) */
+};
+
+/* request codes (common) */
+enum {
+ reqTargetCompileEnded = -17, /* Sent when target's compile phase ends */
+ reqTargetCompileStarted = -16, /* Sent when target's compile phase starts */
+ reqTargetLinkEnded = -15, /* Sent when the link has ended */
+ reqTargetLinkStarted = -14, /* Sent when the link starts */
+ reqFileListBuildEnded = -13, /* Sent when the group file build ends */
+ reqFileListBuildStarted = -12, /* Sent when the group file build starts */
+ reqSubProjectBuildEnded = -11, /* Sent when subproject's build ends */
+ reqSubProjectBuildStarted = -10, /* Sent when subproject's build starts */
+ reqTargetBuildEnded = -9, /* Sent when target's build ends */
+ reqTargetBuildStarted = -8, /* Sent when target's build starts */
+ reqProjectBuildEnded = -7, /* Sent when project build ends */
+ reqProjectBuildStarted = -6, /* Sent when project build starts */
+ reqTargetLoaded = -5, /* called when the "keeps target info" flag is set */
+ reqTargetPrefsChanged = -4, /* called when the "keeps target info" flag is set */
+ reqTargetUnloaded = -3 /* called when the "keeps target info" flag is set */
+};
+
+/* requests codes (compilers) */
+enum {
+ reqCompile = 0, /* compile/precompile/preprocess source file */
+ /* and return results */
+ reqMakeParse, /* used internally by Metrowerks */
+ reqCompDisassemble, /* disassemble a specific file in the project */
+ reqCheckSyntax, /* check syntax, but don't generate code */
+ reqPreprocessForDebugger /* when preprocess, don't open window w/results */
+};
+
+/* requests codes (linkers) */
+enum {
+ reqLink = 0, /* link project and generate executable or library */
+ reqDisassemble, /* disassemble a specific file in the project */
+ reqTargetInfo, /* get info about the generated executable */
+ reqPreRun /* give linker a last chance to modify target info */
+};
+
+/* Returned as part of CWFileInfo to indicate the */
+/* type of data pointed to by the filedata pointer */
+enum {
+ filetypeText, /* data is text */
+ filetypeUnknown /* unknown type, could be precompiled header */
+};
+
+/* executable linkage types, used in CWTargetInfo.linkType */
+enum {
+ exelinkageFlat, /* flat executable */
+ exelinkageSegmented, /* uses 68K code segments */
+ exelinkageOverlay1 /* uses overlay groups and overlays */
+};
+
+/* output file type, used in CWTargetInfo.outputType */
+enum {
+ linkOutputNone, /* linker produces no output */
+ linkOutputFile, /* linker produces a file */
+ linkOutputDirectory /* linker produces a directory */
+};
+
+/* Constants for the targetCPU field of the CWTargetInfo struct */
+enum {
+ targetCPU68K = CWFOURCHAR('6','8','k',' '),
+ targetCPUPowerPC = CWFOURCHAR('p','p','c',' '),
+ targetCPUi80x86 = CWFOURCHAR('8','0','8','6'),
+ targetCPUMips = CWFOURCHAR('m','i','p','s'),
+ targetCPUNECv800 = CWFOURCHAR('v','8','0','0'),
+ targetCPUEmbeddedPowerPC = CWFOURCHAR('e','P','P','C'),
+ targetCPUARM = CWFOURCHAR('a','r','m',' '),
+ targetCPUSparc = CWFOURCHAR('s','p','r','c'),
+ targetCPUIA64 = CWFOURCHAR('I','A','6','4'),
+ targetCPUAny = CWFOURCHAR('*','*','*','*'),
+ targetCPUMCORE = CWFOURCHAR('m','c','o','r'),
+ targetCPU_Intent = CWFOURCHAR('n','t','n','t')
+};
+
+/* Constants for the targetOS field of the CWTargetInfo struct */
+enum {
+ targetOSMacintosh = CWFOURCHAR('m','a','c',' '),
+ targetOSWindows = CWFOURCHAR('w','i','n','t'),
+ targetOSNetware = CWFOURCHAR('n','l','m',' '),
+ targetOSMagicCap = CWFOURCHAR('m','c','a','p'),
+ targetOSOS9 = CWFOURCHAR('o','s','9',' '),
+ targetOSEmbeddedABI = CWFOURCHAR('E','A','B','I'),
+ targetOSJava = CWFOURCHAR('j','a','v','a'), /* java (no VM specification) */
+ targetOSJavaMS = CWFOURCHAR('j','v','m','s'), /* Microsoft VM */
+ targetOSJavaSun = CWFOURCHAR('j','v','s','n'), /* Sun VM */
+ targetOSJavaMRJ = CWFOURCHAR('j','v','m','r'), /* MRJ VM */
+ targetOSJavaMW = CWFOURCHAR('j','v','m','w'), /* Metrowerks VM */
+ targetOSPalm = CWFOURCHAR('p','a','l','m'),
+ targetOSGTD5 = CWFOURCHAR('g','t','d','5'),
+ targetOSSolaris = CWFOURCHAR('s','l','r','s'),
+ targetOSLinux = CWFOURCHAR('l','n','u','x'),
+ targetOSAny = CWFOURCHAR('*','*','*','*'),
+ targetOS_Intent = CWFOURCHAR('n','t','n','t')
+};
+
+/* linker flags, as used in member dropinflags of DropInFlags struct returned by linkers */
+enum {
+ cantDisassemble = 1L << 31, /* this linker doesn't support 'Disassemble' */
+ isPostLinker = 1L << 30, /* this is a post linker */
+ linkAllowDupFileNames = 1L << 29, /* allow multiple project files with the same name */
+ linkMultiTargAware = 1L << 28, /* the linker can be used with multiple targets */
+ isPreLinker = 1L << 27, /* this is a pre linker */
+ linkerUsesTargetStorage = 1L << 26, /* the linker keeps storage per target */
+ linkerUnmangles = 1L << 25, /* The linker supports unmangling. */
+ magicCapLinker = 1L << 24, /* Pre- or post-linker is used for MagicCap */
+ linkAlwaysReload = 1L << 23, /* Always reload the linker before request */
+ linkRequiresProjectBuildStartedMsg = 1L << 22, /* Linker listens for a Project Build Started/Ended message */
+ linkRequiresTargetBuildStartedMsg = 1L << 21, /* Linker listens for a Target Build Started/Ended message */
+ linkRequiresSubProjectBuildStartedMsg = 1L << 20, /* Linker listens for a Sub Project Build Started/Ended message */
+ linkRequiresFileListBuildStartedMsg = 1L << 19, /* Linker listens for a File List Build Started/Ended message */
+ linkRequiresTargetLinkStartedMsg = 1L << 18, /* Linker listens for a Target Link Started/Ended message */
+ linkerWantsPreRunRequest = 1L << 17, /* Linker wants to be sent the pre-run request */
+ linkerGetTargetInfoThreadSafe = 1L << 16, /* GetTargetInfo call doesn't use any globals, etc. */
+ linkerUsesCaseInsensitiveSymbols = 1L << 15, /* All languages used by linker contain case insensitive browser symbols */
+ linkerDisasmRequiresPreprocess = 1L << 14, /* (obsolete) file must be preprocesed before being passed to linker for disasm */
+ linkerUsesFrameworks = 1L << 13, /* target uses frameworks; enables framework-style file searching */
+ linkerInitializeOnMainThread = 1L << 12 /* The Linker needs to be intialized on the main thread. */
+ /* remaining flags are reserved for future use and should be zero-initialized */
+};
+
+/* ways to store dependency returned as CWFileSpec in StoreObjectData */
+enum {
+ cwAccessAbsolute,
+ cwAccessPathRelative,
+ cwAccessFileName,
+ cwAccessFileRelative
+};
+
+/* specifies what browser information compilers should generate */
+/* they should always generate records for globals and functions */
+typedef struct CWBrowseOptions {
+ Boolean recordClasses; /* [<-] do we record info for classes */
+ Boolean recordEnums; /* [<-] do we record info for enums */
+ Boolean recordMacros; /* [<-] do we record info for macros */
+ Boolean recordTypedefs; /* [<-] do we record info for typedefs */
+ Boolean recordConstants; /* [<-] do we record info for constants */
+ Boolean recordTemplates; /* [<-] do we record info for templates */
+ Boolean recordUndefinedFunctions; /* [<-] do we record info for undefined functions */
+ SInt32 reserved1; /* reserved space */
+ SInt32 reserved2; /* reserved space */
+} CWBrowseOptions;
+
+/* A dependency tag is associated with unit data in the StoreUnitData callback. It should */
+/* change whenever unit data has changed in a way that forces its dependents to be rebuilt. */
+/* Typically, it is just a checksum on the unit data. */
+typedef UInt32 CWDependencyTag;
+
+/* dependency information passed back in StoreObjectData */
+typedef struct CWDependencyInfo {
+ SInt32 fileIndex; /* Another project entry. -1 => use fileSpec */
+ CWFileSpec fileSpec; /* location of file. Only used if fileIndex < 0 */
+ short fileSpecAccessType; /* One of cwAccessAbsolute, etc. above. Only */
+ /* used is specifying via fileSpec. */
+ short dependencyType; /* cwNormalDependency or cwInterfaceDependency. */
+ /* Values defined in CWPlugins.h */
+} CWDependencyInfo;
+
+/* information used when calling StoreObjectData */
+typedef struct CWObjectData {
+ CWMemHandle objectdata; /* Handle to generated object code, */
+ /* resource data, or preprocessed text */
+ CWMemHandle browsedata; /* Handle to generated browse data */
+ SInt32 reserved1; /* reserved for future use, set to zero */
+ SInt32 codesize; /* size of generated code */
+ SInt32 udatasize; /* size of uninitialized data */
+ SInt32 idatasize; /* size of initialized data */
+ SInt32 compiledlines; /* number of lines of source compiled */
+ Boolean interfaceChanged; /* recompile interface dependents? */
+ SInt32 reserved2; /* reserved for future use, set to zero */
+ void* compilecontext; /* used internally by Metrowerks */
+ CWDependencyInfo* dependencies; /* optional array of dependencies */
+ short dependencyCount; /* overrides those collected by IDE */
+ CWFileSpec* objectfile; /* external object code file (i.e. .o file) */
+} CWObjectData;
+
+
+/* characteristics of a link target */
+typedef struct CWTargetInfo {
+ short outputType; /* outputs file, directory, or nothing */
+ CWFileSpec outfile; /* generated executable file/folder spec */
+ CWFileSpec symfile; /* generated debug file spec */
+ CWFileSpec runfile; /* file to run, can be same or different from outfile */
+ short linkType; /* flat, segmented, or overlays */
+ Boolean canRun; /* "Run" can be performed on this target */
+ Boolean canDebug; /* "Run with Debugger" can be performed on this target */
+ CWDataType targetCPU; /* target CPU architecture (e.g. 68K, PowerPC, x86, MIPS)*/
+ CWDataType targetOS; /* target OS (e.g. MacOS, Windows, Unix) */
+
+#if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS
+ OSType outfileCreator; /* file creator, if outputType == linkOutputFile */
+ OSType outfileType; /* file type, if outputType == linkOutputFile */
+ OSType debuggerCreator; /* file creator of debugger for this target */
+ OSType runHelperCreator; /* creator of helper app to use when running this file. */
+#endif
+#if CWPLUGIN_HOST == CWPLUGIN_HOST_WIN32
+ Boolean runHelperIsRegKey; /* true if runHelperName is a registry key */
+ Boolean debugHelperIsRegKey;/* true if debugHelperName is a registry key */
+ char args[512]; /* command line arguments */
+ char runHelperName[512]; /* full path to the run helper executable or a reg key */
+ Boolean runHelperRequiresURL;/* Indicates whether the outfile must be converted to */
+ /* a file scheme URL before being passed to the run */
+ /* helper app */
+ char reserved2;
+ char debugHelperName[512];/* full path to the debug helper executable or a reg key*/
+#endif
+
+// We need the args for Solaris
+#if (CWPLUGIN_HOST == CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST == CWPLUGIN_HOST_LINUX)
+ char args[512]; /* command line arguments */
+ char runHelperName[512]; /* Relative path name from (Helper Apps) to run helper program */
+ Boolean runHelperRequiresURL; /* Indicates whether the outfile must be converted to */
+ /* a file scheme URL before being passed to the run */
+ /* helper app */
+ char reserved2[3];
+ char debugHelperName[512]; /* Relative path name from (Helper Apps) to debug helper */
+
+
+#endif
+
+ CWFileSpec linkAgainstFile; /* file parent targets link against (e.g. lib file) */
+} CWTargetInfo;
+
+typedef struct CWUnmangleInfo {
+ void* targetStorage;
+ const char* mangledName;
+ char* unmangleBuff;
+ SInt32 unmangleBuffSize;
+ unsigned short browserClassID;
+ unsigned char browserLang;
+ unsigned char filler1;
+} CWUnmangleInfo;
+
+
+/* Types used to get compiler-specific browser symbol information. */
+typedef struct CWCompilerBrSymbol {
+ char symName[32];
+ char symUIName[32];
+} CWCompilerBrSymbol;
+
+
+typedef struct CWCompilerBrSymbolList {
+ short count;
+ CWCompilerBrSymbol items[1];
+} CWCompilerBrSymbolList;
+
+typedef struct CWCompilerBrSymbolInfo {
+ void* targetStorage;
+ CWCompilerBrSymbolList* symList; /* [<-] Compiler should put a pointer to the read-only list here.*/
+} CWCompilerBrSymbolInfo;
+
+typedef struct CWFrameworkInfo {
+ CWFileSpec fileSpec; /* location of ".framework" directory */
+ char version[256]; /* which version directory to use; if empty use "Current" sym link */
+} CWFrameworkInfo;
+
+/*** Declaration of plugin entry points that must be implemented by non-MacOS plugins ***/
+/*** It can also be implemented by a MacOS plugin to override the 'Targ' resource ***/
+
+CWPLUGIN_ENTRY (CWPlugin_GetTargetList)(const struct CWTargetList**);
+
+/*** Optional entry points ***/
+
+CWPLUGIN_ENTRY (CWPlugin_GetDefaultMappingList)(const struct CWExtMapList**);
+CWPLUGIN_ENTRY (Helper_Unmangle)(CWUnmangleInfo*);
+CWPLUGIN_ENTRY (Helper_GetCompilerBrSymbols)(CWCompilerBrSymbolInfo*);
+
+/*** callbacks to the IDE, in addition to those in CWPlugins.h ***/
+
+CW_CALLBACK CWIsPrecompiling(CWPluginContext context, Boolean* isPrecompiling);
+CW_CALLBACK CWIsAutoPrecompiling(CWPluginContext context, Boolean* isAutoPrecompiling);
+CW_CALLBACK CWIsPreprocessing(CWPluginContext context, Boolean* isPreprocessing);
+CW_CALLBACK CWIsGeneratingDebugInfo(CWPluginContext context, Boolean* isGenerating);
+CW_CALLBACK CWIsCachingPrecompiledHeaders(CWPluginContext context, Boolean* isCaching);
+CW_CALLBACK CWGetBrowseOptions(CWPluginContext context, CWBrowseOptions* browseOptions);
+CW_CALLBACK CWGetBuildSequenceNumber(CWPluginContext context, SInt32* sequenceNumber);
+CW_CALLBACK CWGetTargetInfo(CWPluginContext context, CWTargetInfo* targetInfo);
+CW_CALLBACK CWSetTargetInfo(CWPluginContext context, CWTargetInfo* targetInfo);
+
+CW_CALLBACK CWGetTargetStorage(CWPluginContext context, void** storage);
+CW_CALLBACK CWSetTargetStorage(CWPluginContext context, void* storage);
+
+CW_CALLBACK CWGetMainFileNumber(CWPluginContext context, SInt32* fileNumber);
+CW_CALLBACK CWGetMainFileID(CWPluginContext context, short* fileID);
+CW_CALLBACK CWGetMainFileSpec(CWPluginContext context, CWFileSpec* fileSpec);
+CW_CALLBACK CWGetMainFileText(CWPluginContext context, const char** text, SInt32* textLength);
+
+CW_CALLBACK CWCachePrecompiledHeader(CWPluginContext context, const CWFileSpec* filespec, CWMemHandle pchhandle);
+
+CW_CALLBACK CWLoadObjectData(CWPluginContext context, SInt32 whichfile, CWMemHandle* objectdata);
+CW_CALLBACK CWFreeObjectData(CWPluginContext context, SInt32 whichfile, CWMemHandle objectdata);
+CW_CALLBACK CWStoreObjectData(CWPluginContext context, SInt32 whichfile, CWObjectData* object);
+CW_CALLBACK CWGetSuggestedObjectFileSpec(CWPluginContext context, SInt32 whichfile, CWFileSpec* fileSpec);
+CW_CALLBACK CWGetStoredObjectFileSpec(CWPluginContext context, SInt32 whichfile, CWFileSpec* fileSpec);
+
+CW_CALLBACK CWDisplayLines(CWPluginContext context, SInt32 nlines);
+
+CW_CALLBACK CWBeginSubCompile(CWPluginContext context, SInt32 whichfile, CWPluginContext* subContext);
+CW_CALLBACK CWEndSubCompile(CWPluginContext subContext);
+
+CW_CALLBACK CWGetPrecompiledHeaderSpec(CWPluginContext context, CWFileSpec *pchspec, const char *target);
+CW_CALLBACK CWGetResourceFile(CWPluginContext context, CWFileSpec* filespec);
+CW_CALLBACK CWPutResourceFile(CWPluginContext context, const char* prompt, const char* name, CWFileSpec* filespec);
+
+/* Metrowerks Pascal support */
+CW_CALLBACK CWLookUpUnit(CWPluginContext context, const char* name, Boolean isdependency, const void** unitdata, SInt32* unitdatalength);
+CW_CALLBACK CWSBMfiles(CWPluginContext context, short libref);
+CW_CALLBACK CWStoreUnit(CWPluginContext context, const char* unitname, CWMemHandle unitdata, CWDependencyTag dependencytag);
+CW_CALLBACK CWReleaseUnit(CWPluginContext context, void* unitdata);
+CW_CALLBACK CWUnitNameToFileName(CWPluginContext context, const char* unitname, char* filename);
+
+ /* obsolete, for MacOS backward compatibility only */
+#if CWPLUGIN_API == CWPLUGIN_API_MACOS
+CW_CALLBACK CWOSAlert(CWPluginContext context, const char* message, OSErr errorcode);
+CW_CALLBACK CWOSErrorMessage(CWPluginContext context, const char *msg, OSErr errorcode);
+#endif
+
+CW_CALLBACK CWGetModifiedFiles(CWPluginContext context, SInt32* modifiedFileCount, const SInt32** modifiedFiles);
+
+/* Get information from the "Runtime Settings" panel */
+CW_CALLBACK CWGetCommandLineArgs(CWPluginContext context, const char** commandLineArgs);
+CW_CALLBACK CWGetWorkingDirectory(CWPluginContext context, CWFileSpec* workingDirectorySpec);
+CW_CALLBACK CWGetEnvironmentVariableCount(CWPluginContext context, SInt32* count);
+CW_CALLBACK CWGetEnvironmentVariable(CWPluginContext context, SInt32 index, const char** name, const char** value);
+
+CW_CALLBACK CWGetFrameworkCount(CWPluginContext context, SInt32* frameworkCount);
+CW_CALLBACK CWGetFrameworkInfo(CWPluginContext context, SInt32 whichFramework, CWFrameworkInfo* frameworkInfo);
+CW_CALLBACK CWGetFrameworkSharedLibrary(CWPluginContext context, SInt32 whichFramework, CWFileSpec* frameworkSharedLibrary);
+
+#if CW_USE_PRAGMA_IMPORT
+#pragma import reset
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+#ifdef _MSC_VER
+#pragma pack(pop,2)
+#endif
+
+#ifdef __MWERKS__
+#pragma options align=reset
+#endif
+
+#endif /* __DROPINCOMPILERLINKER_H__ */