mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Add flags -ignore-warnings and -warnings-as-errors
This commit is contained in:
@@ -194,6 +194,9 @@ struct BuildContext {
|
|||||||
bool disallow_do;
|
bool disallow_do;
|
||||||
bool insert_semicolon;
|
bool insert_semicolon;
|
||||||
|
|
||||||
|
bool ignore_warnings;
|
||||||
|
bool warnings_as_errors;
|
||||||
|
|
||||||
bool use_llvm_api;
|
bool use_llvm_api;
|
||||||
|
|
||||||
bool use_subsystem_windows;
|
bool use_subsystem_windows;
|
||||||
@@ -215,6 +218,13 @@ struct BuildContext {
|
|||||||
|
|
||||||
gb_global BuildContext build_context = {0};
|
gb_global BuildContext build_context = {0};
|
||||||
|
|
||||||
|
bool global_warnings_as_errors(void) {
|
||||||
|
return build_context.warnings_as_errors;
|
||||||
|
}
|
||||||
|
bool global_ignore_warnings(void) {
|
||||||
|
return build_context.ignore_warnings;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gb_global TargetMetrics target_windows_386 = {
|
gb_global TargetMetrics target_windows_386 = {
|
||||||
TargetOs_windows,
|
TargetOs_windows,
|
||||||
|
|||||||
+29
-3
@@ -597,6 +597,9 @@ enum BuildFlagKind {
|
|||||||
BuildFlag_Short,
|
BuildFlag_Short,
|
||||||
BuildFlag_AllPackages,
|
BuildFlag_AllPackages,
|
||||||
|
|
||||||
|
BuildFlag_IgnoreWarnings,
|
||||||
|
BuildFlag_WarningsAsErrors,
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
BuildFlag_IgnoreVsSearch,
|
BuildFlag_IgnoreVsSearch,
|
||||||
BuildFlag_ResourceFile,
|
BuildFlag_ResourceFile,
|
||||||
@@ -706,7 +709,8 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
add_flag(&build_flags, BuildFlag_Short, str_lit("short"), BuildFlagParam_None, Command_doc);
|
add_flag(&build_flags, BuildFlag_Short, str_lit("short"), BuildFlagParam_None, Command_doc);
|
||||||
add_flag(&build_flags, BuildFlag_AllPackages, str_lit("all-packages"), BuildFlagParam_None, Command_doc);
|
add_flag(&build_flags, BuildFlag_AllPackages, str_lit("all-packages"), BuildFlagParam_None, Command_doc);
|
||||||
|
|
||||||
|
add_flag(&build_flags, BuildFlag_IgnoreWarnings, str_lit("ignore-warnings"), BuildFlagParam_None, Command_doc);
|
||||||
|
add_flag(&build_flags, BuildFlag_WarningsAsErrors, str_lit("warnings-as-errors"), BuildFlagParam_None, Command_doc);
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#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_IgnoreVsSearch, str_lit("ignore-vs-search"), BuildFlagParam_None, Command__does_build);
|
||||||
@@ -1205,8 +1209,22 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
case BuildFlag_AllPackages:
|
case BuildFlag_AllPackages:
|
||||||
build_context.cmd_doc_flags |= CmdDocFlag_AllPackages;
|
build_context.cmd_doc_flags |= CmdDocFlag_AllPackages;
|
||||||
break;
|
break;
|
||||||
|
case BuildFlag_IgnoreWarnings:
|
||||||
|
if (build_context.warnings_as_errors) {
|
||||||
|
gb_printf_err("-ignore-warnings cannot be used with -warnings-as-errors\n");
|
||||||
|
bad_flags = true;
|
||||||
|
} else {
|
||||||
|
build_context.ignore_warnings = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BuildFlag_WarningsAsErrors:
|
||||||
|
if (build_context.ignore_warnings) {
|
||||||
|
gb_printf_err("-warnings-as-errors cannot be used with -ignore-warnings\n");
|
||||||
|
bad_flags = true;
|
||||||
|
} else {
|
||||||
|
build_context.warnings_as_errors = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
case BuildFlag_IgnoreVsSearch:
|
case BuildFlag_IgnoreVsSearch:
|
||||||
@@ -1697,6 +1715,14 @@ void print_show_help(String const arg0, String const &command) {
|
|||||||
print_usage_line(1, "-default-to-nil-allocator");
|
print_usage_line(1, "-default-to-nil-allocator");
|
||||||
print_usage_line(2, "Sets the default allocator to be the nil_allocator, an allocator which does nothing");
|
print_usage_line(2, "Sets the default allocator to be the nil_allocator, an allocator which does nothing");
|
||||||
print_usage_line(0, "");
|
print_usage_line(0, "");
|
||||||
|
|
||||||
|
print_usage_line(1, "-ignore-warnings");
|
||||||
|
print_usage_line(2, "Ignores warning messages");
|
||||||
|
print_usage_line(0, "");
|
||||||
|
|
||||||
|
print_usage_line(1, "-warnings-as-errors");
|
||||||
|
print_usage_line(2, "Treats warning messages as error messages");
|
||||||
|
print_usage_line(0, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (run_or_build) {
|
if (run_or_build) {
|
||||||
|
|||||||
+40
-25
@@ -316,6 +316,10 @@ ERROR_OUT_PROC(default_error_out_va) {
|
|||||||
|
|
||||||
ErrorOutProc *error_out_va = default_error_out_va;
|
ErrorOutProc *error_out_va = default_error_out_va;
|
||||||
|
|
||||||
|
// NOTE: defined in build_settings.cpp
|
||||||
|
bool global_warnings_as_errors(void);
|
||||||
|
bool global_ignore_warnings(void);
|
||||||
|
|
||||||
void error_out(char const *fmt, ...) {
|
void error_out(char const *fmt, ...) {
|
||||||
va_list va;
|
va_list va;
|
||||||
va_start(va, fmt);
|
va_start(va, fmt);
|
||||||
@@ -323,22 +327,6 @@ void error_out(char const *fmt, ...) {
|
|||||||
va_end(va);
|
va_end(va);
|
||||||
}
|
}
|
||||||
|
|
||||||
void warning_va(Token token, char const *fmt, va_list va) {
|
|
||||||
gb_mutex_lock(&global_error_collector.mutex);
|
|
||||||
global_error_collector.warning_count++;
|
|
||||||
// NOTE(bill): Duplicate error, skip it
|
|
||||||
if (token.pos.line == 0) {
|
|
||||||
error_out("Warning: %s\n", gb_bprintf_va(fmt, va));
|
|
||||||
} else if (global_error_collector.prev != token.pos) {
|
|
||||||
global_error_collector.prev = token.pos;
|
|
||||||
error_out("%.*s(%td:%td) Warning: %s\n",
|
|
||||||
LIT(token.pos.file), token.pos.line, token.pos.column,
|
|
||||||
gb_bprintf_va(fmt, va));
|
|
||||||
}
|
|
||||||
|
|
||||||
gb_mutex_unlock(&global_error_collector.mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void error_va(Token token, char const *fmt, va_list va) {
|
void error_va(Token token, char const *fmt, va_list va) {
|
||||||
gb_mutex_lock(&global_error_collector.mutex);
|
gb_mutex_lock(&global_error_collector.mutex);
|
||||||
@@ -358,6 +346,28 @@ void error_va(Token token, char const *fmt, va_list va) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void warning_va(Token token, char const *fmt, va_list va) {
|
||||||
|
if (global_warnings_as_errors()) {
|
||||||
|
error_va(token, fmt, va);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gb_mutex_lock(&global_error_collector.mutex);
|
||||||
|
global_error_collector.warning_count++;
|
||||||
|
if (!global_ignore_warnings()) {
|
||||||
|
// NOTE(bill): Duplicate error, skip it
|
||||||
|
if (token.pos.line == 0) {
|
||||||
|
error_out("Warning: %s\n", gb_bprintf_va(fmt, va));
|
||||||
|
} else if (global_error_collector.prev != token.pos) {
|
||||||
|
global_error_collector.prev = token.pos;
|
||||||
|
error_out("%.*s(%td:%td) Warning: %s\n",
|
||||||
|
LIT(token.pos.file), token.pos.line, token.pos.column,
|
||||||
|
gb_bprintf_va(fmt, va));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gb_mutex_unlock(&global_error_collector.mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void error_line_va(char const *fmt, va_list va) {
|
void error_line_va(char const *fmt, va_list va) {
|
||||||
gb_mutex_lock(&global_error_collector.mutex);
|
gb_mutex_lock(&global_error_collector.mutex);
|
||||||
error_out_va(fmt, va);
|
error_out_va(fmt, va);
|
||||||
@@ -403,18 +413,23 @@ void syntax_error_va(Token token, char const *fmt, va_list va) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void syntax_warning_va(Token token, char const *fmt, va_list va) {
|
void syntax_warning_va(Token token, char const *fmt, va_list va) {
|
||||||
|
if (global_warnings_as_errors()) {
|
||||||
|
syntax_error_va(token, fmt, va);
|
||||||
|
return;
|
||||||
|
}
|
||||||
gb_mutex_lock(&global_error_collector.mutex);
|
gb_mutex_lock(&global_error_collector.mutex);
|
||||||
global_error_collector.warning_count++;
|
global_error_collector.warning_count++;
|
||||||
// NOTE(bill): Duplicate error, skip it
|
if (!global_ignore_warnings()) {
|
||||||
if (global_error_collector.prev != token.pos) {
|
// NOTE(bill): Duplicate error, skip it
|
||||||
global_error_collector.prev = token.pos;
|
if (global_error_collector.prev != token.pos) {
|
||||||
error_out("%.*s(%td:%td) Syntax Warning: %s\n",
|
global_error_collector.prev = token.pos;
|
||||||
LIT(token.pos.file), token.pos.line, token.pos.column,
|
error_out("%.*s(%td:%td) Syntax Warning: %s\n",
|
||||||
gb_bprintf_va(fmt, va));
|
LIT(token.pos.file), token.pos.line, token.pos.column,
|
||||||
} else if (token.pos.line == 0) {
|
gb_bprintf_va(fmt, va));
|
||||||
error_out("Warning: %s\n", gb_bprintf_va(fmt, va));
|
} else if (token.pos.line == 0) {
|
||||||
|
error_out("Warning: %s\n", gb_bprintf_va(fmt, va));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gb_mutex_unlock(&global_error_collector.mutex);
|
gb_mutex_unlock(&global_error_collector.mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user