Add freestanding_amd64_gnu

This commit is contained in:
gingerBill
2022-02-20 14:19:52 +00:00
parent ba61d911da
commit 1bec9e5331
3 changed files with 48 additions and 5 deletions

View File

@@ -8,7 +8,7 @@
// #define DEFAULT_TO_THREADED_CHECKER
// #endif
enum TargetOsKind {
enum TargetOsKind : u16 {
TargetOs_Invalid,
TargetOs_windows,
@@ -25,7 +25,7 @@ enum TargetOsKind {
TargetOs_COUNT,
};
enum TargetArchKind {
enum TargetArchKind : u16 {
TargetArch_Invalid,
TargetArch_amd64,
@@ -37,7 +37,7 @@ enum TargetArchKind {
TargetArch_COUNT,
};
enum TargetEndianKind {
enum TargetEndianKind : u8 {
TargetEndian_Invalid,
TargetEndian_Little,
@@ -46,6 +46,16 @@ enum TargetEndianKind {
TargetEndian_COUNT,
};
enum TargetABIKind : u16 {
TargetABI_Default,
TargetABI_MSVC,
TargetABI_GNU,
TargetABI_COUNT,
};
String target_os_names[TargetOs_COUNT] = {
str_lit(""),
str_lit("windows"),
@@ -75,6 +85,12 @@ String target_endian_names[TargetEndian_COUNT] = {
str_lit("big"),
};
String target_abi_names[TargetABI_COUNT] = {
str_lit(""),
str_lit("win64"),
str_lit("sysv"),
};
TargetEndianKind target_endians[TargetArch_COUNT] = {
TargetEndian_Invalid,
TargetEndian_Little,
@@ -98,6 +114,7 @@ struct TargetMetrics {
isize max_align;
String target_triplet;
String target_data_layout;
TargetABIKind abi;
};
@@ -399,6 +416,16 @@ gb_global TargetMetrics target_wasi_wasm32 = {
// str_lit(""),
// };
gb_global TargetMetrics target_freestanding_amd64_gnu = {
TargetOs_freestanding,
TargetArch_amd64,
8,
16,
str_lit("x86_64-pc-none-gnu"),
str_lit("e-m:w-i64:64-f80:128-n8:16:32:64-S128"),
TargetABI_GNU,
};
struct NamedTargetMetrics {
@@ -420,7 +447,8 @@ gb_global NamedTargetMetrics named_targets[] = {
{ str_lit("freestanding_wasm32"), &target_freestanding_wasm32 },
{ str_lit("wasi_wasm32"), &target_wasi_wasm32 },
{ str_lit("js_wasm32"), &target_js_wasm32 },
// { str_lit("freestanding_wasm64"), &target_freestanding_wasm64 },
{ str_lit("freestanding_amd64_gnu"), &target_freestanding_amd64_gnu },
};
NamedTargetMetrics *selected_target_metrics;

View File

@@ -1194,8 +1194,10 @@ LB_ABI_INFO(lb_get_abi_info) {
switch (build_context.metrics.arch) {
case TargetArch_amd64:
if (build_context.metrics.os == TargetOs_windows) {
if (build_context.metrics.os == TargetOs_windows || build_context.metrics.abi == TargetABI_MSVC) {
return lbAbiAmd64Win64::abi_info(c, arg_types, arg_count, return_type, return_is_defined, calling_convention);
} else if (build_context.metrics.abi == TargetABI_GNU) {
return lbAbiAmd64SysV::abi_info(c, arg_types, arg_count, return_type, return_is_defined, calling_convention);
} else {
return lbAbiAmd64SysV::abi_info(c, arg_types, arg_count, return_type, return_is_defined, calling_convention);
}

View File

@@ -996,6 +996,19 @@ String lb_filepath_obj_for_module(lbModule *m) {
case TargetOs_essence:
ext = STR_LIT(".o");
break;
case TargetOs_freestanding:
switch (build_context.metrics.abi) {
default:
case TargetABI_Default:
case TargetABI_GNU:
ext = STR_LIT(".o");
break;
case TargetABI_MSVC:
ext = STR_LIT(".obj");
break;
}
break;
}
}
}