now need to get m2
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
#include "tier2/fileformats/plist.h"
|
#include "tier2/fileformats/plist.h"
|
||||||
#include "http/http.h"
|
#include "http/http.h"
|
||||||
#include "openssl/srp.h"
|
#include "openssl/srp.h"
|
||||||
|
#include "openssl/evp.h"
|
||||||
#include "openssl/sha.h"
|
#include "openssl/sha.h"
|
||||||
#include "tier0/rand.h"
|
#include "tier0/rand.h"
|
||||||
|
|
||||||
@@ -26,6 +27,12 @@ IHTTPClientManager *g_pHttpClientMgr = NULL;
|
|||||||
|
|
||||||
#define N2048 "AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73"
|
#define N2048 "AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73"
|
||||||
#define G2048 "2"
|
#define G2048 "2"
|
||||||
|
enum EPasswordType
|
||||||
|
{
|
||||||
|
PASSWORD_TYPE_S2K,
|
||||||
|
PASSWORD_TYPE_S2K_FO,
|
||||||
|
};
|
||||||
|
|
||||||
class CAppleAuth: public IAppleAuth
|
class CAppleAuth: public IAppleAuth
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -35,6 +42,7 @@ public:
|
|||||||
virtual EAppleAuthDaemonStatus GetStatus() override;
|
virtual EAppleAuthDaemonStatus GetStatus() override;
|
||||||
virtual EAppleAuthStatus SubmitLoginData( const char *szEmail, const char *szPassword ) override;
|
virtual EAppleAuthStatus SubmitLoginData( const char *szEmail, const char *szPassword ) override;
|
||||||
virtual EAppleAuthStatus Submit2FA( const char *szCode ) override;
|
virtual EAppleAuthStatus Submit2FA( const char *szCode ) override;
|
||||||
|
virtual CUtlString EncryptPassword( const char *szPassword, CUtlString szSalt, uint32_t uIters, EPasswordType eType );
|
||||||
|
|
||||||
CUtlString FetchADIPB();
|
CUtlString FetchADIPB();
|
||||||
void FetchHeaders( CUtlString szAdiPb );
|
void FetchHeaders( CUtlString szAdiPb );
|
||||||
@@ -292,7 +300,7 @@ EAppleAuthStatus CAppleAuth::SubmitLoginData( const char *szEmail, const char *s
|
|||||||
"\t<dict>\n"
|
"\t<dict>\n"
|
||||||
|
|
||||||
"\t<key>A2k</key>\n"
|
"\t<key>A2k</key>\n"
|
||||||
"\t<string>%s</string>\n"
|
"\t<data>%s</data>\n"
|
||||||
|
|
||||||
"\t<key>ps</key>\n"
|
"\t<key>ps</key>\n"
|
||||||
"\t<array><string>s2k</string><string>s2k_fo</string></array>\n"
|
"\t<array><string>s2k</string><string>s2k_fo</string></array>\n"
|
||||||
@@ -310,7 +318,7 @@ EAppleAuthStatus CAppleAuth::SubmitLoginData( const char *szEmail, const char *s
|
|||||||
"\t<string>2026-1-9T12:00:00Z</string>\n"
|
"\t<string>2026-1-9T12:00:00Z</string>\n"
|
||||||
"\t<key>X-Apple-I-MD</key>\n"
|
"\t<key>X-Apple-I-MD</key>\n"
|
||||||
"\t<string>%s</string>\n"
|
"\t<string>%s</string>\n"
|
||||||
"\t<key>X-Apple-I-MD_LU</key>\n"
|
"\t<key>X-Apple-I-MD-LU</key>\n"
|
||||||
"\t<string>" APPLE_LOCAL_USER "</string>\n"
|
"\t<string>" APPLE_LOCAL_USER "</string>\n"
|
||||||
"\t<key>X-Apple-I-MD-M</key>\n"
|
"\t<key>X-Apple-I-MD-M</key>\n"
|
||||||
"\t<string>%s</string>\n"
|
"\t<string>%s</string>\n"
|
||||||
@@ -323,19 +331,11 @@ EAppleAuthStatus CAppleAuth::SubmitLoginData( const char *szEmail, const char *s
|
|||||||
|
|
||||||
|
|
||||||
"\t<key>bootstrap</key>\n"
|
"\t<key>bootstrap</key>\n"
|
||||||
"\t<false/>\n"
|
"\t<trur/>\n"
|
||||||
|
|
||||||
"\t<key>capp</key>\n"
|
|
||||||
"\t<string>Xcode</string>\n"
|
|
||||||
|
|
||||||
"\t<key>dc</key>\n"
|
|
||||||
"\t<string>#9d9da0</string>\n"
|
|
||||||
|
|
||||||
"\t<key>icscrec</key>\n"
|
"\t<key>icscrec</key>\n"
|
||||||
"\t<true/>\n"
|
"\t<true/>\n"
|
||||||
|
|
||||||
"\t<key>loc</key>\n"
|
|
||||||
"\t<string>en_US</string>\n"
|
|
||||||
|
|
||||||
"\t<key>pbe</key>\n"
|
"\t<key>pbe</key>\n"
|
||||||
"\t<false/>\n"
|
"\t<false/>\n"
|
||||||
@@ -346,6 +346,9 @@ EAppleAuthStatus CAppleAuth::SubmitLoginData( const char *szEmail, const char *s
|
|||||||
"\t<key>svct</key>\n"
|
"\t<key>svct</key>\n"
|
||||||
"\t<string>iCloud</string>\n"
|
"\t<string>iCloud</string>\n"
|
||||||
|
|
||||||
|
"\t<key>loc</key>\n"
|
||||||
|
"\t<string>en_US</string>\n"
|
||||||
|
|
||||||
"\t</dict>\n"
|
"\t</dict>\n"
|
||||||
|
|
||||||
"\t</dict>\n"
|
"\t</dict>\n"
|
||||||
@@ -368,7 +371,9 @@ EAppleAuthStatus CAppleAuth::SubmitLoginData( const char *szEmail, const char *s
|
|||||||
if (stResponse.m_uCode == 200)
|
if (stResponse.m_uCode == 200)
|
||||||
{
|
{
|
||||||
V_printf("%s\n",stResponse.m_message.GetMemory());
|
V_printf("%s\n",stResponse.m_message.GetMemory());
|
||||||
|
IJSONObject *pObject = PropertyListManager()->ReadString(stResponse.m_message);
|
||||||
|
IJSONObject *pResponse = pObject->GetValue("Response")->GetObject();
|
||||||
|
EncryptPassword(szPassword, pResponse->GetValue("s")->GetStringValue(), pResponse->GetValue("i")->GetNumberValue(), PASSWORD_TYPE_S2K);
|
||||||
}
|
}
|
||||||
g_pHttpClientMgr->Disconnect(m_pGrandSlamClient);
|
g_pHttpClientMgr->Disconnect(m_pGrandSlamClient);
|
||||||
|
|
||||||
@@ -381,6 +386,48 @@ EAppleAuthStatus CAppleAuth::Submit2FA( const char *szCode )
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int base64_decode(const char *b64, unsigned char *out) {
|
||||||
|
int len = strlen(b64);
|
||||||
|
int out_len = EVP_DecodeBlock(out,
|
||||||
|
(const unsigned char *)b64,
|
||||||
|
len);
|
||||||
|
if (out_len < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
while (len > 0 && b64[len - 1] == '=') {
|
||||||
|
out_len--;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return out_len;
|
||||||
|
}
|
||||||
|
CUtlString CAppleAuth::EncryptPassword( const char *szPassword, CUtlString szSalt, uint32_t uIters, EPasswordType eType )
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned char hashedPassword[SHA256_DIGEST_LENGTH];
|
||||||
|
CUtlString szHashedPasswordHex = "";
|
||||||
|
unsigned char encryptedPassword[32];
|
||||||
|
CUtlString szEncryptedPasswordHex = "";
|
||||||
|
unsigned char salt[32];
|
||||||
|
int iSaltLen = base64_decode(szSalt, salt);
|
||||||
|
|
||||||
|
if ( eType == PASSWORD_TYPE_S2K )
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < SHA256_DIGEST_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
szHashedPasswordHex.AppendTail(CUtlString("%02x", hashedPassword[i]));
|
||||||
|
}
|
||||||
|
PKCS5_PBKDF2_HMAC(szHashedPasswordHex, szHashedPasswordHex.GetLenght(), salt, iSaltLen, uIters, EVP_sha256(), 32, encryptedPassword);
|
||||||
|
};
|
||||||
|
for ( int i = 0; i < SHA256_DIGEST_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
szEncryptedPasswordHex.AppendTail(CUtlString("%02x", encryptedPassword[i]));
|
||||||
|
}
|
||||||
|
V_printf("%s\n",szEncryptedPasswordHex.GetString());
|
||||||
|
return szEncryptedPasswordHex;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static CAppleAuth s_appleAuth;
|
static CAppleAuth s_appleAuth;
|
||||||
EXPOSE_INTERFACE_GLOBALVAR(CAppleAuth, IAppleAuth, APPLE_AUTH_INTERFACE_VERSION, s_appleAuth);
|
EXPOSE_INTERFACE_GLOBALVAR(CAppleAuth, IAppleAuth, APPLE_AUTH_INTERFACE_VERSION, s_appleAuth);
|
||||||
|
|||||||
20
fpc/Makefile
20
fpc/Makefile
@@ -6,7 +6,7 @@ FILESYSTEM_FILES := ../stdfilesystems/filesystem_libc.cpp
|
|||||||
TIER1_OBJS := $(TIER1_FILES:.cpp=.o)
|
TIER1_OBJS := $(TIER1_FILES:.cpp=.o)
|
||||||
TIER2_OBJS := $(TIER2_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
|
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_ARCH),)
|
||||||
ifneq ($(FPC_OS),)
|
ifneq ($(FPC_OS),)
|
||||||
@@ -30,34 +30,34 @@ endif
|
|||||||
recompile: ../build/tools/fpc
|
recompile: ../build/tools/fpc
|
||||||
build/fpc build
|
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'
|
$(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/fpc_temp build/fpc
|
||||||
mv build/libfpc_temp.so build/libfpc.so
|
mv build/libfpc_temp.so build/libfpc.so
|
||||||
build/fpc build -fpcdebug
|
build/fpc build -fpcdebug
|
||||||
mv build/fpc_temp build/fpc
|
mv build/fpc_temp build/fpc
|
||||||
mv build/libfpc_temp.so build/libfpc.so
|
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)
|
$(CC) $(CCFLAGS) -fPIC -shared -o build/libtier0.so $(TIER0_FILES)
|
||||||
|
|
||||||
%.o: %.cpp
|
%.o: %.cpp
|
||||||
$(CC) $(CCFLAGS) -fPIC -c $< -o $@
|
$(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)
|
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)
|
ar rcs build/libtier2.a $(TIER2_OBJS)
|
||||||
|
|
||||||
libfilesystem_std.so: $(FILESYSTEM_FILES) libtier1.a builddir
|
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
|
$(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
|
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
|
$(CC) $(CCFLAGS) $(FPC_FILES) library/libfpc.cpp -fPIC -shared -o build/libfpc.so build/libtier1.a
|
||||||
|
|
||||||
builddir:
|
builddir:
|
||||||
|
|||||||
@@ -61,9 +61,6 @@ DECLARE_BUILD_STAGE(libfpcbuild)
|
|||||||
ldProject = ccompiler->Compile(&compileProject);
|
ldProject = ccompiler->Compile(&compileProject);
|
||||||
ldProject.linkType = ELINK_STATIC_LIBRARY;
|
ldProject.linkType = ELINK_STATIC_LIBRARY;
|
||||||
|
|
||||||
if (linker->IsLibraryExists("clang"))
|
|
||||||
ldProject.libraries.AppendTail("clang");
|
|
||||||
|
|
||||||
CUtlString outputProject = linker->Link(&ldProject);
|
CUtlString outputProject = linker->Link(&ldProject);
|
||||||
|
|
||||||
|
|
||||||
@@ -76,7 +73,7 @@ DECLARE_BUILD_STAGE(libfpc)
|
|||||||
if (linker->IsLibraryExists("clang"))
|
if (linker->IsLibraryExists("clang"))
|
||||||
g_libFpcFiles.AppendTail("library/clang/c_libclang.cpp");
|
g_libFpcFiles.AppendTail("library/clang/c_libclang.cpp");
|
||||||
else
|
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 = {};
|
CProject_t compileProject = {};
|
||||||
LinkProject_t ldProject = {};
|
LinkProject_t ldProject = {};
|
||||||
|
|
||||||
@@ -84,6 +81,11 @@ DECLARE_BUILD_STAGE(libfpc)
|
|||||||
compileProject.files = g_libFpcFiles;
|
compileProject.files = g_libFpcFiles;
|
||||||
compileProject.includeDirectories = g_IncludeDirectories;
|
compileProject.includeDirectories = g_IncludeDirectories;
|
||||||
compileProject.bFPIC = true;
|
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 = ccompiler->Compile(&compileProject);
|
||||||
ldProject.linkType = ELINK_DYNAMIC_LIBRARY;
|
ldProject.linkType = ELINK_DYNAMIC_LIBRARY;
|
||||||
ldProject.libraryObjects = {
|
ldProject.libraryObjects = {
|
||||||
@@ -112,21 +114,22 @@ DECLARE_BUILD_STAGE(fpc)
|
|||||||
compileProject.files = g_fpcFiles;
|
compileProject.files = g_fpcFiles;
|
||||||
compileProject.bFPIC = true;
|
compileProject.bFPIC = true;
|
||||||
compileProject.includeDirectories = g_IncludeDirectories;
|
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 = ccompiler->Compile(&compileProject);
|
||||||
ldProject.libraryObjects = {
|
ldProject.libraryObjects = {
|
||||||
GET_PROJECT_LIBRARY(tier0, "tier0"),
|
GET_PROJECT_LIBRARY(tier0, "tier0"),
|
||||||
GET_PROJECT_LIBRARY(tier1, "tier1"),
|
GET_PROJECT_LIBRARY(tier1, "tier1"),
|
||||||
GET_PROJECT_LIBRARY(tier2, "tier2"),
|
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);
|
CUtlString outputProject = linker->Link(&ldProject);
|
||||||
|
|
||||||
|
|
||||||
ADD_OUTPUT_OBJECT("fpc", outputProject)
|
ADD_OUTPUT_OBJECT("fpc", outputProject);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -112,17 +112,10 @@ void CClangLinker::SetOutputFile( CUtlVector<CUtlString> &cmd, const char *szNam
|
|||||||
|
|
||||||
void CClangLinker::SetDefaultLibraryPaths( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
|
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,--disable-new-dtags");
|
||||||
cmd.AppendTail("-Wl,-rpath,$ORIGIN");
|
cmd.AppendTail("-Wl,-rpath,$ORIGIN");
|
||||||
break;
|
|
||||||
case TARGET_KERNEL_DARWIN:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,47 +16,15 @@ CUtlString Target_t::GetTriplet()
|
|||||||
{
|
{
|
||||||
CUtlString triplet = "";
|
CUtlString triplet = "";
|
||||||
|
|
||||||
if ( cpu == TARGET_CPU_AMD64 )
|
triplet.AppendTail(StringFromCPU(cpu));
|
||||||
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("-");
|
triplet.AppendTail("-");
|
||||||
if ( kernel == TARGET_KERNEL_UNKNOWN )
|
triplet.AppendTail(StringFromKernel(kernel));
|
||||||
triplet.AppendTail("unknown-unknown");
|
|
||||||
if ( kernel == TARGET_KERNEL_UNKNOWN_LINUX )
|
if ( abi != TARGET_ABI_UNDEFINED && abi != TARGET_ABI_DEFAULT )
|
||||||
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("-");
|
triplet.AppendTail("-");
|
||||||
if ( abi == TARGET_ABI_GNU )
|
triplet.AppendTail(StringFromABI(abi));
|
||||||
triplet.AppendTail("gnu");
|
}
|
||||||
if ( abi == TARGET_ABI_MUSL )
|
|
||||||
triplet.AppendTail("musl");
|
|
||||||
|
|
||||||
|
|
||||||
return triplet;
|
return triplet;
|
||||||
@@ -65,7 +33,7 @@ CUtlString Target_t::GetTriplet()
|
|||||||
const char *Target_t::GetExecutableFileFormat()
|
const char *Target_t::GetExecutableFileFormat()
|
||||||
{
|
{
|
||||||
if (kernel & TARGET_KERNEL_POSIX)
|
if (kernel & TARGET_KERNEL_POSIX)
|
||||||
return "";
|
return "%s";
|
||||||
|
|
||||||
if (kernel & TARGET_KERNEL_WINDOWS_DEVICES)
|
if (kernel & TARGET_KERNEL_WINDOWS_DEVICES)
|
||||||
{
|
{
|
||||||
@@ -180,6 +148,59 @@ Target_t Target_t::DefaultTarget()
|
|||||||
.optimization = TARGET_DEBUG,
|
.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 )
|
ETargetCPU Target_t::CPUFromString( const char *szName )
|
||||||
{
|
{
|
||||||
CUtlString szUtlName = szName;
|
CUtlString szUtlName = szName;
|
||||||
|
|||||||
11
fpc/main.cpp
11
fpc/main.cpp
@@ -155,8 +155,17 @@ findbuild:
|
|||||||
|
|
||||||
CommandLine()->CreateCommandLine(c, v);
|
CommandLine()->CreateCommandLine(c, v);
|
||||||
Plat_InitRandom();
|
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"))
|
if (CommandLine()->CheckParam("build"))
|
||||||
return build();
|
build();
|
||||||
const char *szDeployDevice = CommandLine()->ParamValue("deploy");
|
const char *szDeployDevice = CommandLine()->ParamValue("deploy");
|
||||||
Plat_ShutdownRandom();
|
Plat_ShutdownRandom();
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ struct Target_t
|
|||||||
const char *GetDynamicLibraryFileFormat();
|
const char *GetDynamicLibraryFileFormat();
|
||||||
static Target_t HostTarget();
|
static Target_t HostTarget();
|
||||||
static Target_t DefaultTarget();
|
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 ETargetCPU CPUFromString( const char *szName );
|
||||||
static ETargetKernel KernelFromString( const char *szName );
|
static ETargetKernel KernelFromString( const char *szName );
|
||||||
static ETargetABI ABIFromString( const char *szName );
|
static ETargetABI ABIFromString( const char *szName );
|
||||||
|
|||||||
@@ -17,6 +17,12 @@ enum EJSONParameterType
|
|||||||
JSON_PARAMETER_OBJECT,
|
JSON_PARAMETER_OBJECT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum EJSONParameterNotes
|
||||||
|
{
|
||||||
|
JSON_PARAMETER_NOTE_NONE = 0,
|
||||||
|
JSON_PARAMETER_NOTE_BINARY,
|
||||||
|
};
|
||||||
|
|
||||||
abstract_class IJSONArray
|
abstract_class IJSONArray
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -33,6 +39,7 @@ abstract_class IJSONValue
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual EJSONParameterType GetType( void ) = 0;
|
virtual EJSONParameterType GetType( void ) = 0;
|
||||||
|
virtual
|
||||||
virtual const char *GetStringValue() = 0;
|
virtual const char *GetStringValue() = 0;
|
||||||
virtual float GetNumberValue() = 0;
|
virtual float GetNumberValue() = 0;
|
||||||
virtual bool GetBooleanValue() = 0;
|
virtual bool GetBooleanValue() = 0;
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public:
|
|||||||
delete pHandle;
|
delete pHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual CUtlBuffer<unsigned char> Read( IFileHandle *pFile ) override { return NULL; };
|
virtual CUtlBuffer<unsigned char> Read( IFileHandle *pFile ) override { return {}; };
|
||||||
virtual const char *ReadString( IFileHandle *pFile ) override {
|
virtual const char *ReadString( IFileHandle *pFile ) override {
|
||||||
char *szData = NULL;
|
char *szData = NULL;
|
||||||
size_t uSize = Size(pFile);
|
size_t uSize = Size(pFile);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ IJSONObject *CPropertyListManager::ReadDict( IXMLObject *pDict )
|
|||||||
{
|
{
|
||||||
szKeyToCreate = c->GetChildren()[0]->GetValue();
|
szKeyToCreate = c->GetChildren()[0]->GetValue();
|
||||||
}
|
}
|
||||||
if ( !V_strcmp(c->GetValue(), "string"))
|
if ( !V_strcmp(c->GetValue(), "string") || !V_strcmp(c->GetValue(), "data") )
|
||||||
{
|
{
|
||||||
if ( szKeyToCreate == NULL )
|
if ( szKeyToCreate == NULL )
|
||||||
continue;
|
continue;
|
||||||
@@ -49,6 +49,18 @@ IJSONObject *CPropertyListManager::ReadDict( IXMLObject *pDict )
|
|||||||
pObject->SetValue(szKeyToCreate, pVal);
|
pObject->SetValue(szKeyToCreate, pVal);
|
||||||
szKeyToCreate = NULL;
|
szKeyToCreate = NULL;
|
||||||
}
|
}
|
||||||
|
if ( !V_strcmp(c->GetValue(), "integer") )
|
||||||
|
{
|
||||||
|
if ( szKeyToCreate == NULL )
|
||||||
|
continue;
|
||||||
|
IJSONValue *pVal = JSONManager()->CreateValue();
|
||||||
|
if (c->GetChildren().GetSize()>0)
|
||||||
|
pVal->SetNumberValue(atol(c->GetChildren()[0]->GetValue()));
|
||||||
|
else
|
||||||
|
pVal->SetNumberValue(0);
|
||||||
|
pObject->SetValue(szKeyToCreate, pVal);
|
||||||
|
szKeyToCreate = NULL;
|
||||||
|
}
|
||||||
if ( !V_strcmp(c->GetValue(), "dict"))
|
if ( !V_strcmp(c->GetValue(), "dict"))
|
||||||
{
|
{
|
||||||
if ( szKeyToCreate == NULL )
|
if ( szKeyToCreate == NULL )
|
||||||
|
|||||||
Reference in New Issue
Block a user