#include "c.h" #include "ld.h" #include "helper.h" #include "tier0/platform.h" #include "tier1/interface.h" ADD_DEPENDENCY_BUILD_FILE(tier0, "../tier0/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(tier1, "../tier1/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(tier2, "../tier2/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(apple, "apple/build.cpp"); CUtlVector g_fpcFiles = { "main.cpp", "library/helper.cpp", "library/target.cpp", "library/builder.cpp", }; CUtlVector g_libFpcFiles = { "library/libfpc.cpp", "library/helper.cpp", "library/target.cpp", "library/builder.cpp", "library/runner.cpp", "library/winerunner.cpp", "library/deploy.cpp", "library/c.cpp", "library/ld.cpp", "library/swift.cpp", "library/android/apktool.cpp", "library/apple/appletool.cpp", "library/clang/c.cpp", "library/clang/ld.cpp", "library/windows/c.cpp", "library/windows/ld.cpp", "library/apple/swift.cpp", }; CUtlVector g_IncludeDirectories = { "public", "../public", }; DECLARE_BUILD_STAGE(libfpcbuild) { CProject_t compileProject = {}; LinkProject_t ldProject = {}; compileProject.m_szName = "fpcbuild"; compileProject.files = g_libFpcFiles; compileProject.includeDirectories = g_IncludeDirectories; compileProject.bFPIC = true; ldProject = ccompiler->Compile(&compileProject); ldProject.linkType = ELINK_STATIC_LIBRARY; if (linker->IsLibraryExists("clang")) ldProject.libraries.AppendTail("clang"); CUtlString outputProject = linker->Link(&ldProject); ADD_OUTPUT_OBJECT("fpcbuild", outputProject) return 0; } 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."); CProject_t compileProject = {}; LinkProject_t ldProject = {}; compileProject.m_szName = "fpc"; compileProject.files = g_libFpcFiles; compileProject.includeDirectories = g_IncludeDirectories; compileProject.bFPIC = true; ldProject = ccompiler->Compile(&compileProject); ldProject.linkType = ELINK_DYNAMIC_LIBRARY; ldProject.libraryObjects = { "libtier0.so", GET_PROJECT_LIBRARY(tier1, "tier1"), GET_PROJECT_LIBRARY(tier2, "tier2"), }; if (linker->IsLibraryExists("clang")) ldProject.libraries.AppendTail("clang"); CUtlString outputProject = linker->Link(&ldProject); ADD_OUTPUT_OBJECT("fpc", outputProject) return 0; }; DECLARE_BUILD_STAGE(fpc) { CProject_t compileProject = {}; LinkProject_t ldProject = {}; compileProject.m_szName = "fpc"; compileProject.files = g_fpcFiles; compileProject.bFPIC = true; compileProject.includeDirectories = g_IncludeDirectories; ldProject = ccompiler->Compile(&compileProject); ldProject.libraryObjects = { "libtier0.so", 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) return 0; }; DECLARE_BUILD_STAGE(install) { CUtlString szExe = GET_PROJECT_LIBRARY(fpc, "fpc"); CUtlString szLibFpc = GET_PROJECT_LIBRARY(libfpc, "fpc"); CUtlString szTier0 = GET_PROJECT_LIBRARY(tier0, "tier0"); CUtlString szTier1 = GET_PROJECT_LIBRARY(tier1, "tier1"); CUtlString szTier2 = GET_PROJECT_LIBRARY(tier2, "tier2"); filesystem2->CopyFile("build/fpc_temp", szExe); filesystem2->CopyFile("build/libfpc_temp.so", szLibFpc); /* filesystem2->CopyFile("build/libtier1.a", szTier1); filesystem2->CopyFile("build/libtier2.a", szTier2); filesystem2->CopyFile("build/libtier0_temp.so", szTier0); */ return 0; };