From 76cc68ff8015d0a28fe52fc37790f76830e2f489 Mon Sep 17 00:00:00 2001 From: kjayapra-amd Date: Wed, 12 Apr 2023 15:07:15 -0400 Subject: [PATCH] SWDEV-381625 - Parse compiler and linker options from environment variable. Change-Id: Id5a012b678e5973c4b64dff84444a909aefae006 [ROCm/clr commit: 6a0f80a03da074166c8e54275f69f3cb818c342e] --- .../clr/hipamd/src/hiprtc/hiprtcInternal.cpp | 19 +++++++++++++++++-- .../clr/hipamd/src/hiprtc/hiprtcInternal.hpp | 7 +++++++ projects/clr/rocclr/utils/flags.hpp | 6 +++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/projects/clr/hipamd/src/hiprtc/hiprtcInternal.cpp b/projects/clr/hipamd/src/hiprtc/hiprtcInternal.cpp index 0d23a1c697..26a24bc758 100644 --- a/projects/clr/hipamd/src/hiprtc/hiprtcInternal.cpp +++ b/projects/clr/hipamd/src/hiprtc/hiprtcInternal.cpp @@ -109,6 +109,19 @@ bool RTCProgram::findIsa() { return true; } +// RTC Compile Program Member Functions +void RTCProgram::AppendOptions(const std::string app_env_var, std::vector* options) { + + if (options == nullptr) { + LogError("Append options passed is nullptr."); + return; + } + + std::stringstream ss(app_env_var); + std::istream_iterator begin{ss}, end; + options->insert(options->end(), begin, end); +} + // RTC Compile Program Member Functions RTCCompileProgram::RTCCompileProgram(std::string name_) : RTCProgram(name_), fgpu_rdc_(false) { if ((amd::Comgr::create_data_set(&compile_input_) != AMD_COMGR_STATUS_SUCCESS) || @@ -150,6 +163,7 @@ RTCCompileProgram::RTCCompileProgram(std::string name_) : RTCProgram(name_), fgp compile_options_.push_back("-fms-extensions"); compile_options_.push_back("-fms-compatibility"); #endif + AppendCompileOptions(); exe_options_.push_back("-O3"); } @@ -669,9 +683,10 @@ bool RTCLinkProgram::LinkComplete(void** bin_out, size_t* size_out) { return false; } + AppendLinkerOptions(); + std::vector linked_llvm_bitcode; - std::vector linkopts; - if (!linkLLVMBitcode(link_input_, isa_, linkopts, build_log_, linked_llvm_bitcode)) { + if (!linkLLVMBitcode(link_input_, isa_, link_options_, build_log_, linked_llvm_bitcode)) { LogError("Error in hiprtc: unable to add device libs to linked bitcode"); return false; } diff --git a/projects/clr/hipamd/src/hiprtc/hiprtcInternal.hpp b/projects/clr/hipamd/src/hiprtc/hiprtcInternal.hpp index 48a866f64d..57e4e6adb0 100644 --- a/projects/clr/hipamd/src/hiprtc/hiprtcInternal.hpp +++ b/projects/clr/hipamd/src/hiprtc/hiprtcInternal.hpp @@ -122,6 +122,7 @@ class RTCProgram { // Member Functions bool findIsa(); + static void AppendOptions(std::string app_env_var, std::vector* options); // Data Members std::string name_; @@ -157,6 +158,9 @@ class RTCCompileProgram : public RTCProgram { bool transformOptions(std::vector& compile_options); bool findLLVMOptions(const std::vector& options, std::vector& llvm_options); + void AppendCompileOptions() { + AppendOptions(HIPRTC_COMPILE_OPTIONS_APPEND, &compile_options_); + } RTCCompileProgram() = delete; RTCCompileProgram(RTCCompileProgram&) = delete; @@ -285,6 +289,9 @@ class RTCLinkProgram : public RTCProgram { bool AddLinkerData(void* image_ptr, size_t image_size, std::string link_file_name, hiprtcJITInputType input_type); bool LinkComplete(void** bin_out, size_t* size_out); + void AppendLinkerOptions() { + AppendOptions(HIPRTC_LINK_OPTIONS_APPEND, &link_options_); + } }; // Thread Local Storage Variables Aggregator Class diff --git a/projects/clr/rocclr/utils/flags.hpp b/projects/clr/rocclr/utils/flags.hpp index 809278d1b4..777e7754dd 100644 --- a/projects/clr/rocclr/utils/flags.hpp +++ b/projects/clr/rocclr/utils/flags.hpp @@ -245,7 +245,11 @@ release(bool, HIP_FORCE_DEV_KERNARG, 0, \ release(uint, DEBUG_CLR_GRAPH_MAX_AQL_BUFFER_SIZE, 32, \ "Size of AQL buffering queue") \ release(bool, DEBUG_CLR_GRAPH_ENABLE_BUFFERING, false, \ - "Enable/Disable graph AQL buffering") + "Enable/Disable graph AQL buffering") \ +release(cstring, HIPRTC_COMPILE_OPTIONS_APPEND, "", \ + "Set compile options needed for hiprtc compilation") \ +release(cstring, HIPRTC_LINK_OPTIONS_APPEND, "", \ + "Set link options needed for hiprtc compilation") \ namespace amd {