mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Add experimental -subtarget:ios
This commit is contained in:
+30
-1
@@ -123,6 +123,18 @@ struct TargetMetrics {
|
|||||||
TargetABIKind abi;
|
TargetABIKind abi;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Subtarget : u32 {
|
||||||
|
Subtarget_Default,
|
||||||
|
Subtarget_iOS,
|
||||||
|
|
||||||
|
Subtarget_COUNT,
|
||||||
|
};
|
||||||
|
|
||||||
|
gb_global String subtarget_strings[Subtarget_COUNT] = {
|
||||||
|
str_lit(""),
|
||||||
|
str_lit("ios"),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
enum QueryDataSetKind {
|
enum QueryDataSetKind {
|
||||||
QueryDataSet_Invalid,
|
QueryDataSet_Invalid,
|
||||||
@@ -585,6 +597,8 @@ gb_global NamedTargetMetrics named_targets[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
gb_global NamedTargetMetrics *selected_target_metrics;
|
gb_global NamedTargetMetrics *selected_target_metrics;
|
||||||
|
gb_global Subtarget selected_subtarget;
|
||||||
|
|
||||||
|
|
||||||
gb_internal TargetOsKind get_target_os_from_string(String str) {
|
gb_internal TargetOsKind get_target_os_from_string(String str) {
|
||||||
for (isize i = 0; i < TargetOs_COUNT; i++) {
|
for (isize i = 0; i < TargetOs_COUNT; i++) {
|
||||||
@@ -1147,7 +1161,7 @@ gb_internal char *token_pos_to_string(TokenPos const &pos) {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
gb_internal void init_build_context(TargetMetrics *cross_target) {
|
gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subtarget) {
|
||||||
BuildContext *bc = &build_context;
|
BuildContext *bc = &build_context;
|
||||||
|
|
||||||
gb_affinity_init(&bc->affinity);
|
gb_affinity_init(&bc->affinity);
|
||||||
@@ -1242,6 +1256,21 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
|
|||||||
|
|
||||||
|
|
||||||
bc->metrics = *metrics;
|
bc->metrics = *metrics;
|
||||||
|
switch (subtarget) {
|
||||||
|
case Subtarget_Default:
|
||||||
|
break;
|
||||||
|
case Subtarget_iOS:
|
||||||
|
GB_ASSERT(metrics->os == TargetOs_darwin);
|
||||||
|
if (metrics->arch == TargetArch_arm64) {
|
||||||
|
bc->metrics.target_triplet = str_lit("arm64-apple-ios");
|
||||||
|
} else if (metrics->arch == TargetArch_amd64) {
|
||||||
|
bc->metrics.target_triplet = str_lit("x86_64-apple-ios");
|
||||||
|
} else {
|
||||||
|
GB_PANIC("Unknown architecture for darwin");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
bc->ODIN_OS = target_os_names[metrics->os];
|
bc->ODIN_OS = target_os_names[metrics->os];
|
||||||
bc->ODIN_ARCH = target_arch_names[metrics->arch];
|
bc->ODIN_ARCH = target_arch_names[metrics->arch];
|
||||||
bc->endian_kind = target_endians[metrics->arch];
|
bc->endian_kind = target_endians[metrics->arch];
|
||||||
|
|||||||
+39
-1
@@ -238,6 +238,7 @@ enum BuildFlagKind {
|
|||||||
BuildFlag_Define,
|
BuildFlag_Define,
|
||||||
BuildFlag_BuildMode,
|
BuildFlag_BuildMode,
|
||||||
BuildFlag_Target,
|
BuildFlag_Target,
|
||||||
|
BuildFlag_Subtarget,
|
||||||
BuildFlag_Debug,
|
BuildFlag_Debug,
|
||||||
BuildFlag_DisableAssert,
|
BuildFlag_DisableAssert,
|
||||||
BuildFlag_NoBoundsCheck,
|
BuildFlag_NoBoundsCheck,
|
||||||
@@ -423,6 +424,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
|
|||||||
add_flag(&build_flags, BuildFlag_Define, str_lit("define"), BuildFlagParam_String, Command__does_check, true);
|
add_flag(&build_flags, BuildFlag_Define, str_lit("define"), BuildFlagParam_String, Command__does_check, true);
|
||||||
add_flag(&build_flags, BuildFlag_BuildMode, str_lit("build-mode"), BuildFlagParam_String, Command__does_build); // Commands_build is not used to allow for a better error message
|
add_flag(&build_flags, BuildFlag_BuildMode, str_lit("build-mode"), BuildFlagParam_String, Command__does_build); // Commands_build is not used to allow for a better error message
|
||||||
add_flag(&build_flags, BuildFlag_Target, str_lit("target"), BuildFlagParam_String, Command__does_check);
|
add_flag(&build_flags, BuildFlag_Target, str_lit("target"), BuildFlagParam_String, Command__does_check);
|
||||||
|
add_flag(&build_flags, BuildFlag_Subtarget, str_lit("subtarget"), BuildFlagParam_String, Command__does_check);
|
||||||
add_flag(&build_flags, BuildFlag_Debug, str_lit("debug"), BuildFlagParam_None, Command__does_check);
|
add_flag(&build_flags, BuildFlag_Debug, str_lit("debug"), BuildFlagParam_None, Command__does_check);
|
||||||
add_flag(&build_flags, BuildFlag_DisableAssert, str_lit("disable-assert"), BuildFlagParam_None, Command__does_check);
|
add_flag(&build_flags, BuildFlag_DisableAssert, str_lit("disable-assert"), BuildFlagParam_None, Command__does_check);
|
||||||
add_flag(&build_flags, BuildFlag_NoBoundsCheck, str_lit("no-bounds-check"), BuildFlagParam_None, Command__does_check);
|
add_flag(&build_flags, BuildFlag_NoBoundsCheck, str_lit("no-bounds-check"), BuildFlagParam_None, Command__does_check);
|
||||||
@@ -907,6 +909,42 @@ gb_internal bool parse_build_flags(Array<String> args) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case BuildFlag_Subtarget:
|
||||||
|
if (selected_target_metrics == nullptr) {
|
||||||
|
gb_printf_err("-target must be set before -subtarget is used\n");
|
||||||
|
bad_flags = true;
|
||||||
|
} else {
|
||||||
|
GB_ASSERT(value.kind == ExactValue_String);
|
||||||
|
String str = value.value_string;
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
if (selected_target_metrics->metrics->os != TargetOs_darwin) {
|
||||||
|
gb_printf_err("-subtarget can only be used with darwin based targets at the moment\n");
|
||||||
|
bad_flags = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (u32 i = 1; i < Subtarget_COUNT; i++) {
|
||||||
|
String name = subtarget_strings[i];
|
||||||
|
if (str_eq_ignore_case(str, name)) {
|
||||||
|
selected_subtarget = cast(Subtarget)i;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
gb_printf_err("Unknown subtarget '%.*s'\n", LIT(str));
|
||||||
|
gb_printf_err("All supported subtargets:\n");
|
||||||
|
for (u32 i = 1; i < Subtarget_COUNT; i++) {
|
||||||
|
String name = subtarget_strings[i];
|
||||||
|
gb_printf_err("\t%.*s\n", LIT(name));
|
||||||
|
}
|
||||||
|
bad_flags = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case BuildFlag_BuildMode: {
|
case BuildFlag_BuildMode: {
|
||||||
GB_ASSERT(value.kind == ExactValue_String);
|
GB_ASSERT(value.kind == ExactValue_String);
|
||||||
String str = value.value_string;
|
String str = value.value_string;
|
||||||
@@ -2452,7 +2490,7 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
get_fullpath_relative(heap_allocator(), odin_root_dir(), str_lit("shared")));
|
get_fullpath_relative(heap_allocator(), odin_root_dir(), str_lit("shared")));
|
||||||
}
|
}
|
||||||
|
|
||||||
init_build_context(selected_target_metrics ? selected_target_metrics->metrics : nullptr);
|
init_build_context(selected_target_metrics ? selected_target_metrics->metrics : nullptr, selected_subtarget);
|
||||||
// if (build_context.word_size == 4 && build_context.metrics.os != TargetOs_js) {
|
// if (build_context.word_size == 4 && build_context.metrics.os != TargetOs_js) {
|
||||||
// print_usage_line(0, "%.*s 32-bit is not yet supported for this platform", LIT(args[0]));
|
// print_usage_line(0, "%.*s 32-bit is not yet supported for this platform", LIT(args[0]));
|
||||||
// return 1;
|
// return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user