documented fpc

This commit is contained in:
2025-07-31 18:07:25 +03:00
parent 395ced9e28
commit 817ed344b4
11 changed files with 154 additions and 25 deletions

View File

@@ -1,3 +1,7 @@
//================= Copyright kotofyt, All rights reserved ==================//
// Purpose: Linker interface.
//===========================================================================//
#ifndef LD_H
#define LD_H
@@ -15,29 +19,64 @@ enum ELinkType
ELINK_STATIC_LIBRARY,
};
//----------------------------------------------------------------------------
// C project settings used in compilation
// Example usage:
// CProject_t compileProject = {};
// LinkProject_t ldProject = {};
// CUtlString szOutputFile;
//
// compileProject.m_szName = "your_project_name";
// compileProject.files = g_CompiledFiles;
// compileProject.includeDirectories = g_IncludeDirectories;
//
// ldProject = ccompiler->Compile(&compileProject);
// ldProject.linkType = ELINK_EXECUTABLE
// szOutputFile = linker->Link(&ldProject);
//
//----------------------------------------------------------------------------
struct LinkProject_t: public CPUProject_t
{
public:
void AddObject( Object_t& object );
// output file
ELinkType linkType;
CUtlVector<Object_t> objects = {};
CUtlVector<CUtlString> libraries ={};
CUtlVector<CUtlString> libraryDirectories = {};
CUtlVector<CUtlString> libraryObjects = {};
CUtlVector<CUtlString> frameworkDirectories = {};
CUtlVector<CUtlString> frameworks = {};
AndroidManifest_t m_androidmanifest;
// objects, they could be libraries and compiled files
CUtlVector<Object_t> objects = {};
// system libraries
CUtlVector<CUtlString> libraries ={};
// directories for libraries
CUtlVector<CUtlString> libraryDirectories = {};
// not used
CUtlVector<CUtlString> libraryObjects = {};
// Apple framework directories
CUtlVector<CUtlString> frameworkDirectories = {};
// Disables C standart library
bool bNoStdLib;
// Apple frameworks
CUtlVector<CUtlString> frameworks = {};
// Android manifest
AndroidManifest_t m_androidmanifest;
};
// Basic interface name
#define LINKER_INTERFACE_NAME "Linker001"
#define CLANG_LINKER_INTERFACE_NAME "ClangLinker001"
#define CLANG_LINKER_INTERFACE_NAME "Clang" LINKER_INTERFACE_NAME
abstract_class ILinker
{
public:
// Links project
virtual CUtlString Link( LinkProject_t *pProject ) = 0;
};