diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2019-11-26 22:29:08 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-26 22:29:08 +0000 |
| commit | 5ea9fc3fb0a0ea5201fe0f1006d40f03563191ca (patch) | |
| tree | f1105eba642a2a05c003bbc4938a7e219ebfe05e /src/main.cpp | |
| parent | 53f65224f64a0260324488304c0b18d318b8acc9 (diff) | |
| parent | f8dd4816ffd2dc517e8833c0ccc6e1a3e6775a48 (diff) | |
Merge pull request #478 from castano/auto-search-sdk
Allow running Odin compiler without using visual studio command prompt or setting up environgment variables.
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp index 1cee9fcfb..c25f7998c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,5 @@ // #define NO_ARRAY_BOUNDS_CHECK - #include "common.cpp" #include "timings.cpp" #include "tokenizer.cpp" @@ -23,6 +22,12 @@ gb_global Timings global_timings = {0}; #include "ir_print.cpp" #include "query_data.cpp" +#if defined(GB_SYSTEM_WINDOWS) +// NOTE(IC): In order to find Visual C++ paths without relying on environment variables. +#include "microsoft_craziness.h" +#endif + + // NOTE(bill): 'name' is used in debugging and profiling modes i32 system_exec_command_line_app(char *name, char *fmt, ...) { #if defined(GB_SYSTEM_WINDOWS) @@ -1172,10 +1177,27 @@ int main(int arg_count, char **arg_ptr) { if (ir_gen.module.generate_debug_info) { link_settings = gb_string_append_fmt(link_settings, " /DEBUG"); } + + // NOTE(ic): It would be nice to extend this so that we could specify the Visual Studio version that we want instead of defaulting to the latest. + Find_Result_Utf8 result = find_visual_studio_and_windows_sdk_utf8(); + defer(free_resources(&result)); + + if (result.windows_sdk_version == 0) { + gb_printf_err("Windows SDK not found.\n"); + return 1; + } + + // Add library search paths. + link_settings = gb_string_append_fmt(link_settings, " /LIBPATH:\"%s\"", result.windows_sdk_um_library_path); + link_settings = gb_string_append_fmt(link_settings, " /LIBPATH:\"%s\"", result.windows_sdk_ucrt_library_path); + link_settings = gb_string_append_fmt(link_settings, " /LIBPATH:\"%s\"", result.vs_library_path); + if (!build_context.use_lld) { // msvc + if (build_context.has_resource) { exit_code = system_exec_command_line_app("msvc-link", - "rc /nologo /fo \"%.*s.res\" \"%.*s.rc\"", + "\"%s\\rc.exe\" /nologo /fo \"%.*s.res\" \"%.*s.rc\"", + result.vs_exe_path, LIT(output_base), LIT(build_context.resource_filepath) ); @@ -1185,23 +1207,23 @@ int main(int arg_count, char **arg_ptr) { } exit_code = system_exec_command_line_app("msvc-link", - "link \"%.*s.obj\" \"%.*s.res\" -OUT:\"%.*s.%s\" %s " + "\"%s\\link.exe\" \"%.*s.obj\" \"%.*s.res\" -OUT:\"%.*s.%s\" %s " "/nologo /incremental:no /opt:ref /subsystem:CONSOLE " " %.*s " " %s " "", - LIT(output_base), LIT(output_base), LIT(output_base), output_ext, + result.vs_exe_path, LIT(output_base), LIT(output_base), LIT(output_base), output_ext, lib_str, LIT(build_context.link_flags), link_settings ); } else { exit_code = system_exec_command_line_app("msvc-link", - "link \"%.*s.obj\" -OUT:\"%.*s.%s\" %s " + "\"%s\\link.exe\" \"%.*s.obj\" -OUT:\"%.*s.%s\" %s " "/nologo /incremental:no /opt:ref /subsystem:CONSOLE " " %.*s " " %s " "", - LIT(output_base), LIT(output_base), output_ext, + result.vs_exe_path, LIT(output_base), LIT(output_base), output_ext, lib_str, LIT(build_context.link_flags), link_settings ); |