aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2023-09-28 16:01:26 +0100
committerGitHub <noreply@github.com>2023-09-28 16:01:26 +0100
commit77227c2ff552a81741130ae17d58847c3cfe3ba3 (patch)
treee690e5feae8aad170ce4d18bc11c279ec23cce45 /src/main.cpp
parent2370884722c9638cf0ba3916a8a54247096bb4f6 (diff)
parent2afccd7fbdb3a7c440597356fa4c9d635a06a8d2 (diff)
Merge pull request #2805 from odin-lang/llvm-17
Support LLVM 17.0.1
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp42
1 files changed, 40 insertions, 2 deletions
diff --git a/src/main.cpp b/src/main.cpp
index f1b62320f..fca1341e6 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -300,6 +300,8 @@ enum BuildFlagKind {
BuildFlag_Tilde,
+ BuildFlag_Sanitize,
+
#if defined(GB_SYSTEM_WINDOWS)
BuildFlag_IgnoreVsSearch,
BuildFlag_ResourceFile,
@@ -410,7 +412,6 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_SingleFile, str_lit("file"), BuildFlagParam_None, Command__does_build | Command__does_check);
add_flag(&build_flags, BuildFlag_OutFile, str_lit("out"), BuildFlagParam_String, Command__does_build | Command_test);
add_flag(&build_flags, BuildFlag_OptimizationMode, str_lit("o"), BuildFlagParam_String, Command__does_build);
- add_flag(&build_flags, BuildFlag_OptimizationMode, str_lit("O"), BuildFlagParam_String, Command__does_build);
add_flag(&build_flags, BuildFlag_ShowTimings, str_lit("show-timings"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ShowMoreTimings, str_lit("show-more-timings"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ExportTimings, str_lit("export-timings"), BuildFlagParam_String, Command__does_check);
@@ -486,6 +487,8 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_Tilde, str_lit("tilde"), BuildFlagParam_None, Command__does_build);
#endif
+ add_flag(&build_flags, BuildFlag_Sanitize, str_lit("sanitize"), BuildFlagParam_String, Command__does_build, true);
+
#if defined(GB_SYSTEM_WINDOWS)
add_flag(&build_flags, BuildFlag_IgnoreVsSearch, str_lit("ignore-vs-search"), BuildFlagParam_None, Command__does_build);
add_flag(&build_flags, BuildFlag_ResourceFile, str_lit("resource"), BuildFlagParam_String, Command__does_build);
@@ -660,12 +663,18 @@ gb_internal bool parse_build_flags(Array<String> args) {
} else if (value.value_string == "speed") {
build_context.custom_optimization_level = true;
build_context.optimization_level = 2;
+ } else if (value.value_string == "aggressive" && LB_USE_NEW_PASS_SYSTEM) {
+ build_context.custom_optimization_level = true;
+ build_context.optimization_level = 3;
} else {
gb_printf_err("Invalid optimization mode for -o:<string>, got %.*s\n", LIT(value.value_string));
gb_printf_err("Valid optimization modes:\n");
gb_printf_err("\tminimal\n");
gb_printf_err("\tsize\n");
gb_printf_err("\tspeed\n");
+ if (LB_USE_NEW_PASS_SYSTEM) {
+ gb_printf_err("\taggressive\n");
+ }
gb_printf_err("\tnone (useful for -debug builds)\n");
bad_flags = true;
}
@@ -1194,6 +1203,21 @@ gb_internal bool parse_build_flags(Array<String> args) {
build_context.tilde_backend = true;
break;
+ case BuildFlag_Sanitize:
+ GB_ASSERT(value.kind == ExactValue_String);
+
+ if (str_eq_ignore_case(value.value_string, str_lit("address"))) {
+ build_context.sanitizer_flags |= SanitizerFlag_Address;
+ } else if (str_eq_ignore_case(value.value_string, str_lit("memory"))) {
+ build_context.sanitizer_flags |= SanitizerFlag_Memory;
+ } else if (str_eq_ignore_case(value.value_string, str_lit("thread"))) {
+ build_context.sanitizer_flags |= SanitizerFlag_Thread;
+ } else {
+ gb_printf_err("-sanitize:<string> options are 'address', 'memory', and 'thread'\n");
+ bad_flags = true;
+ }
+ break;
+
#if defined(GB_SYSTEM_WINDOWS)
case BuildFlag_IgnoreVsSearch: {
GB_ASSERT(value.kind == ExactValue_Invalid);
@@ -1649,8 +1673,13 @@ gb_internal void print_show_help(String const arg0, String const &command) {
print_usage_line(1, "-o:<string>");
print_usage_line(2, "Set the optimization mode for compilation");
- print_usage_line(2, "Accepted values: minimal, size, speed, none");
+ if (LB_USE_NEW_PASS_SYSTEM) {
+ print_usage_line(2, "Accepted values: none, minimal, size, speed, aggressive");
+ } else {
+ print_usage_line(2, "Accepted values: none, minimal, size, speed");
+ }
print_usage_line(2, "Example: -o:speed");
+ print_usage_line(2, "The default is -o:minimal");
print_usage_line(0, "");
}
@@ -1930,6 +1959,15 @@ gb_internal void print_show_help(String const arg0, String const &command) {
}
if (run_or_build) {
+ print_usage_line(1, "-sanitize:<string>");
+ print_usage_line(1, "Enables sanitization analysis");
+ print_usage_line(1, "Options are 'address', 'memory', and 'thread'");
+ print_usage_line(1, "NOTE: This flag can be used multiple times");
+ print_usage_line(0, "");
+
+ }
+
+ if (run_or_build) {
#if defined(GB_SYSTEM_WINDOWS)
print_usage_line(1, "-ignore-vs-search");
print_usage_line(2, "[Windows only]");