now need to get m2

This commit is contained in:
2026-01-11 15:38:14 +02:00
parent 8f022da4ef
commit 6604c67ec5
10 changed files with 177 additions and 82 deletions

View File

@@ -6,7 +6,7 @@ FILESYSTEM_FILES := ../stdfilesystems/filesystem_libc.cpp
TIER1_OBJS := $(TIER1_FILES:.cpp=.o)
TIER2_OBJS := $(TIER2_FILES:.cpp=.o)
FPC_FILES := library/helper.cpp library/target.cpp library/builder.cpp library/runner.cpp library/c.cpp library/ld.cpp library/clang/c.cpp library/clang/ld.cpp
CC = clang
CC = clang++
ifneq ($(FPC_ARCH),)
ifneq ($(FPC_OS),)
@@ -30,34 +30,34 @@ endif
recompile: ../build/tools/fpc
build/fpc build
install: ../build/tools/fpc libfpcbuild.a libfpc.so libtier0.so libtier1.a libtier2.a libfilesystem_std.so install_temp builddir
install: ../build/tools/fpc build/libfpcbuild.a build/libfpc.so build/libtier0.so build/libtier1.a build/libtier2.a build/libfilesystem_std.so install_temp builddir
$(CC) -fPIC main.cpp library/helper.cpp library/target.cpp library/builder.cpp -lc -lstdc++ $(CCFLAGS) -o build/fpc -ltier0 -Lbuild build/libtier1.a build/libtier2.a -Wl,--disable-new-dtags -Wl,-rpath,'$$ORIGIN'
build/fpc build
build/fpc build -fpcdebug
mv build/fpc_temp build/fpc
mv build/libfpc_temp.so build/libfpc.so
build/fpc build -fpcdebug
mv build/fpc_temp build/fpc
mv build/libfpc_temp.so build/libfpc.so
libtier0.so: $(TIER0_FILES) builddir
build/libtier0.so: $(TIER0_FILES) builddir
$(CC) $(CCFLAGS) -fPIC -shared -o build/libtier0.so $(TIER0_FILES)
%.o: %.cpp
$(CC) $(CCFLAGS) -fPIC -c $< -o $@
libtier1.a: $(TIER1_OBJS) builddir libtier0.so
build/libtier1.a: $(TIER1_OBJS) builddir build/libtier0.so
ar rcs build/libtier1.a $(TIER1_OBJS)
libtier2.a: $(TIER2_OBJS) builddir libtier1.a
build/libtier2.a: $(TIER2_OBJS) builddir build/libtier1.a
ar rcs build/libtier2.a $(TIER2_OBJS)
libfilesystem_std.so: $(FILESYSTEM_FILES) libtier1.a builddir
$(CC) $(CCFLAGS) -fPIC -shared -o build/libfilesystem_std.so $(FILESYSTEM_FILES) build/libtier1.a
build/libfilesystem_std.so: $(FILESYSTEM_FILES) build/libtier1.a build/libtier0.so builddir
$(CC) $(CCFLAGS) -fPIC -shared -o build/libfilesystem_std.so $(FILESYSTEM_FILES) build/libtier1.a -ltier0 -Lbuild
libfpcbuild.a: buildfile/interfaces.o builddir
build/libfpcbuild.a: buildfile/interfaces.o builddir
ar rcs build/libfpcbuild.a buildfile/interfaces.o
libfpc.so: $(FPC_FILES) builddir libfpcbuild.a libtier1.a
build/libfpc.so: $(FPC_FILES) builddir build/libfpcbuild.a build/libtier1.a
$(CC) $(CCFLAGS) $(FPC_FILES) library/libfpc.cpp -fPIC -shared -o build/libfpc.so build/libtier1.a
builddir:

View File

@@ -61,9 +61,6 @@ DECLARE_BUILD_STAGE(libfpcbuild)
ldProject = ccompiler->Compile(&compileProject);
ldProject.linkType = ELINK_STATIC_LIBRARY;
if (linker->IsLibraryExists("clang"))
ldProject.libraries.AppendTail("clang");
CUtlString outputProject = linker->Link(&ldProject);
@@ -76,7 +73,7 @@ DECLARE_BUILD_STAGE(libfpc)
if (linker->IsLibraryExists("clang"))
g_libFpcFiles.AppendTail("library/clang/c_libclang.cpp");
else
V_printf("Warning: to support included files libclang must be installed.");
V_printf("Warning: to support included files libclang must be installed.\n");
CProject_t compileProject = {};
LinkProject_t ldProject = {};
@@ -84,6 +81,11 @@ DECLARE_BUILD_STAGE(libfpc)
compileProject.files = g_libFpcFiles;
compileProject.includeDirectories = g_IncludeDirectories;
compileProject.bFPIC = true;
compileProject.macros = {
{"FPC_ARCH", CUtlString("\"%s\"",Target_t::StringFromCPU(compileProject.m_target.cpu))},
{"FPC_OS", CUtlString("\"%s\"",Target_t::StringFromKernel(compileProject.m_target.kernel))},
{"FPC_ABI", CUtlString("\"%s\"",Target_t::StringFromABI(compileProject.m_target.abi))},
};
ldProject = ccompiler->Compile(&compileProject);
ldProject.linkType = ELINK_DYNAMIC_LIBRARY;
ldProject.libraryObjects = {
@@ -112,21 +114,22 @@ DECLARE_BUILD_STAGE(fpc)
compileProject.files = g_fpcFiles;
compileProject.bFPIC = true;
compileProject.includeDirectories = g_IncludeDirectories;
compileProject.macros = {
{"FPC_ARCH", CUtlString("\"%s\"",Target_t::StringFromCPU(compileProject.m_target.cpu))},
{"FPC_OS", CUtlString("\"%s\"",Target_t::StringFromKernel(compileProject.m_target.kernel))},
{"FPC_ABI", CUtlString("\"%s\"",Target_t::StringFromABI(compileProject.m_target.abi))},
};
ldProject = ccompiler->Compile(&compileProject);
ldProject.libraryObjects = {
GET_PROJECT_LIBRARY(tier0, "tier0"),
GET_PROJECT_LIBRARY(tier1, "tier1"),
GET_PROJECT_LIBRARY(tier2, "tier2"),
};
V_printf("WHAT %s\n",GET_PROJECT_LIBRARY(tier0, "tier0").GetString());
if (linker->IsLibraryExists("clang"))
ldProject.libraries.AppendTail("clang");
CUtlString outputProject = linker->Link(&ldProject);
ADD_OUTPUT_OBJECT("fpc", outputProject)
ADD_OUTPUT_OBJECT("fpc", outputProject);
return 0;
};

View File

@@ -112,17 +112,10 @@ void CClangLinker::SetOutputFile( CUtlVector<CUtlString> &cmd, const char *szNam
void CClangLinker::SetDefaultLibraryPaths( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
{
switch (pProject->m_target.kernel)
if (pProject->m_target.kernel & TARGET_KERNEL_LINUX)
{
case TARGET_KERNEL_LINUX:
case TARGET_KERNEL_ANDROID:
cmd.AppendTail("-Wl,--disable-new-dtags");
cmd.AppendTail("-Wl,-rpath,$ORIGIN");
break;
case TARGET_KERNEL_DARWIN:
break;
default:
break;
}
}

View File

@@ -16,47 +16,15 @@ CUtlString Target_t::GetTriplet()
{
CUtlString triplet = "";
if ( cpu == TARGET_CPU_AMD64 )
triplet.AppendTail("x86_64");
if ( cpu == TARGET_CPU_80386 )
triplet.AppendTail("i386");
if ( cpu == TARGET_CPU_80486 )
triplet.AppendTail("i486");
if ( cpu == TARGET_CPU_80586 )
triplet.AppendTail("i586");
if ( cpu == TARGET_CPU_80686 )
triplet.AppendTail("i686");
if ( cpu == TARGET_CPU_AARCH64 )
triplet.AppendTail("aarch64");
if ( cpu == TARGET_CPU_WASM32 )
triplet.AppendTail("wasm32");
triplet.AppendTail(StringFromCPU(cpu));
triplet.AppendTail("-");
if ( kernel == TARGET_KERNEL_UNKNOWN )
triplet.AppendTail("unknown-unknown");
if ( kernel == TARGET_KERNEL_UNKNOWN_LINUX )
triplet.AppendTail("unknown-linux");
if ( kernel == TARGET_KERNEL_PC_LINUX )
triplet.AppendTail("pc-linux");
if ( kernel == TARGET_KERNEL_ALPINE_LINUX )
triplet.AppendTail("alpine-linux");
if ( kernel == TARGET_KERNEL_WINDOWS )
triplet.AppendTail("pc-windows");
if ( kernel == TARGET_KERNEL_DARWIN )
triplet.AppendTail("apple-darwin");
if ( kernel == TARGET_KERNEL_IOS )
triplet.AppendTail("apple-ios");
if ( kernel == TARGET_KERNEL_ANDROID )
triplet.AppendTail("linux-android");
if ( kernel == TARGET_KERNEL_WASI )
triplet.AppendTail("unknown-wasi");
if ( kernel == TARGET_KERNEL_EMSCRIPTEN )
triplet.AppendTail("unknown-emscripten");
if ( abi != TARGET_ABI_DEFAULT )
triplet.AppendTail(StringFromKernel(kernel));
if ( abi != TARGET_ABI_UNDEFINED && abi != TARGET_ABI_DEFAULT )
{
triplet.AppendTail("-");
if ( abi == TARGET_ABI_GNU )
triplet.AppendTail("gnu");
if ( abi == TARGET_ABI_MUSL )
triplet.AppendTail("musl");
triplet.AppendTail(StringFromABI(abi));
}
return triplet;
@@ -65,7 +33,7 @@ CUtlString Target_t::GetTriplet()
const char *Target_t::GetExecutableFileFormat()
{
if (kernel & TARGET_KERNEL_POSIX)
return "";
return "%s";
if (kernel & TARGET_KERNEL_WINDOWS_DEVICES)
{
@@ -180,6 +148,59 @@ Target_t Target_t::DefaultTarget()
.optimization = TARGET_DEBUG,
};
}
const char *Target_t::StringFromCPU( ETargetCPU cpu )
{
if ( cpu == TARGET_CPU_AMD64 )
return "x86_64";
if ( cpu == TARGET_CPU_80386 )
return "i386";
if ( cpu == TARGET_CPU_80486 )
return "i486";
if ( cpu == TARGET_CPU_80586 )
return "i586";
if ( cpu == TARGET_CPU_80686 )
return "i686";
if ( cpu == TARGET_CPU_AARCH64 )
return "aarch64";
if ( cpu == TARGET_CPU_WASM32 )
return "wasm32";
return NULL;
}
const char *Target_t::StringFromKernel( ETargetKernel kernel )
{
if ( kernel == TARGET_KERNEL_UNKNOWN )
return "unknown-unknown";
if ( kernel == TARGET_KERNEL_UNKNOWN_LINUX )
return "unknown-linux";
if ( kernel == TARGET_KERNEL_PC_LINUX )
return "pc-linux";
if ( kernel == TARGET_KERNEL_ALPINE_LINUX )
return "alpine-linux";
if ( kernel == TARGET_KERNEL_WINDOWS )
return "pc-windows";
if ( kernel == TARGET_KERNEL_DARWIN )
return "apple-darwin";
if ( kernel == TARGET_KERNEL_IOS )
return "apple-ios";
if ( kernel == TARGET_KERNEL_ANDROID )
return "linux-android";
if ( kernel == TARGET_KERNEL_WASI )
return "unknown-wasi";
if ( kernel == TARGET_KERNEL_EMSCRIPTEN )
return "unknown-emscripten";
return NULL;
}
const char *Target_t::StringFromABI( ETargetABI abi )
{
if ( abi == TARGET_ABI_GNU )
return "gnu";
if ( abi == TARGET_ABI_MUSL )
return "musl";
return NULL;
}
ETargetCPU Target_t::CPUFromString( const char *szName )
{
CUtlString szUtlName = szName;

View File

@@ -155,8 +155,17 @@ findbuild:
CommandLine()->CreateCommandLine(c, v);
Plat_InitRandom();
if (CommandLine()->CheckParam("-v") || CommandLine()->CheckParam("--version"))
{
V_printf("fpc version v1\n");
V_printf("built " __DATE__ " " __TIME__ "\n");
V_printf("built for %s\n", Target_t::HostTarget().GetTriplet().GetString());
return 0;
}
if (CommandLine()->CheckParam("build"))
return build();
build();
const char *szDeployDevice = CommandLine()->ParamValue("deploy");
Plat_ShutdownRandom();
return 0;

View File

@@ -73,6 +73,9 @@ struct Target_t
const char *GetDynamicLibraryFileFormat();
static Target_t HostTarget();
static Target_t DefaultTarget();
static const char *StringFromCPU( ETargetCPU eCPU );
static const char *StringFromKernel( ETargetKernel eKernel );
static const char *StringFromABI( ETargetABI eABI );
static ETargetCPU CPUFromString( const char *szName );
static ETargetKernel KernelFromString( const char *szName );
static ETargetABI ABIFromString( const char *szName );