Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateo Torres-Ruiz <mateoatr@users.noreply.github.com>2021-07-13 23:16:29 +0300
committerGitHub <noreply@github.com>2021-07-13 23:16:29 +0300
commitae64899ca74968c1c0dd2d81564c1b9fab12e2b4 (patch)
tree53ef4f5ee37a0789f26116f86ce392f4ea8ccd74 /src/native
parentf82b730ddf4d6170c3e63fb12a52efe72629822f (diff)
Add runtime property HOSTFXR_PATH (#55369)
* Add property HOSTFXR_PATH * Comment * PR feedback * Use get_own_module_path since we are on hostfxr * Dispose FileStream
Diffstat (limited to 'src/native')
-rw-r--r--src/native/corehost/fxr/corehost_init.cpp9
-rw-r--r--src/native/corehost/fxr/corehost_init.h3
-rw-r--r--src/native/corehost/fxr/fx_muxer.cpp23
-rw-r--r--src/native/corehost/fxr/fx_muxer.h1
4 files changed, 32 insertions, 4 deletions
diff --git a/src/native/corehost/fxr/corehost_init.cpp b/src/native/corehost/fxr/corehost_init.cpp
index eea9b768f5f..2d169348fa6 100644
--- a/src/native/corehost/fxr/corehost_init.cpp
+++ b/src/native/corehost/fxr/corehost_init.cpp
@@ -20,7 +20,8 @@ corehost_init_t::corehost_init_t(
const pal::string_t& additional_deps_serialized,
const std::vector<pal::string_t>& probe_paths,
const host_mode_t mode,
- const fx_definition_vector_t& fx_definitions)
+ const fx_definition_vector_t& fx_definitions,
+ const std::vector<std::pair<pal::string_t, pal::string_t>>& additional_properties)
: m_tfm(get_app(fx_definitions).get_runtime_config().get_tfm())
, m_deps_file(deps_file)
, m_additional_deps_serialized(additional_deps_serialized)
@@ -35,6 +36,12 @@ corehost_init_t::corehost_init_t(
{
make_cstr_arr(m_probe_paths, &m_probe_paths_cstr);
+ for (const auto& additional_property : additional_properties)
+ {
+ m_clr_keys.push_back(additional_property.first);
+ m_clr_values.push_back(additional_property.second);
+ }
+
size_t fx_count = fx_definitions.size();
m_fx_names.reserve(fx_count);
m_fx_dirs.reserve(fx_count);
diff --git a/src/native/corehost/fxr/corehost_init.h b/src/native/corehost/fxr/corehost_init.h
index 70ea7be46fb..6c3148b6274 100644
--- a/src/native/corehost/fxr/corehost_init.h
+++ b/src/native/corehost/fxr/corehost_init.h
@@ -45,7 +45,8 @@ public:
const pal::string_t& additional_deps_serialized,
const std::vector<pal::string_t>& probe_paths,
const host_mode_t mode,
- const fx_definition_vector_t& fx_definitions);
+ const fx_definition_vector_t& fx_definitions,
+ const std::vector<std::pair<pal::string_t, pal::string_t>>& additional_properties);
const host_interface_t& get_host_init_data();
diff --git a/src/native/corehost/fxr/fx_muxer.cpp b/src/native/corehost/fxr/fx_muxer.cpp
index 6a20206e2ca..8647130c18d 100644
--- a/src/native/corehost/fxr/fx_muxer.cpp
+++ b/src/native/corehost/fxr/fx_muxer.cpp
@@ -370,6 +370,7 @@ namespace
const pal::string_t &app_candidate,
const opt_map_t &opts,
host_mode_t mode,
+ const bool is_sdk_command,
/*out*/ pal::string_t &hostpolicy_dir,
/*out*/ std::unique_ptr<corehost_init_t> &init)
{
@@ -473,6 +474,16 @@ namespace
}
}
+ std::vector<std::pair<pal::string_t, pal::string_t>> additional_properties;
+ if (is_sdk_command)
+ {
+ pal::string_t fxr_path;
+ pal::get_own_module_path(&fxr_path);
+
+ // We pass the loaded hostfxr path to the SDK can load it without relying on dlopen/LoadLibrary to find it.
+ additional_properties.push_back(std::make_pair(_X("HOSTFXR_PATH"), fxr_path));
+ }
+
const known_options opts_probe_path = known_options::additional_probing_path;
std::vector<pal::string_t> spec_probe_paths = opts.count(opts_probe_path) ? opts.find(opts_probe_path)->second : std::vector<pal::string_t>();
std::vector<pal::string_t> probe_realpaths = get_probe_realpaths(fx_definitions, spec_probe_paths);
@@ -485,7 +496,7 @@ namespace
return StatusCode::CoreHostLibMissingFailure;
}
- init.reset(new corehost_init_t(host_command, host_info, deps_file, additional_deps_serialized, probe_realpaths, mode, fx_definitions));
+ init.reset(new corehost_init_t(host_command, host_info, deps_file, additional_deps_serialized, probe_realpaths, mode, fx_definitions, additional_properties));
return StatusCode::Success;
}
@@ -498,6 +509,7 @@ namespace
int new_argc,
const pal::char_t** new_argv,
host_mode_t mode,
+ const bool is_sdk_command,
pal::char_t out_buffer[],
int32_t buffer_size,
int32_t* required_buffer_size)
@@ -510,6 +522,7 @@ namespace
app_candidate,
opts,
mode,
+ is_sdk_command,
hostpolicy_dir,
init);
if (rc != StatusCode::Success)
@@ -572,6 +585,7 @@ int fx_muxer_t::execute(
argv,
new_argoff,
mode,
+ false /*is_sdk_command*/,
result_buffer,
buffer_size,
required_buffer_size);
@@ -621,7 +635,8 @@ namespace
}
const pal::string_t additional_deps_serialized;
- init.reset(new corehost_init_t(pal::string_t{}, host_info, deps_file, additional_deps_serialized, probe_realpaths, mode, fx_definitions));
+ const std::vector<std::pair<pal::string_t, pal::string_t>> additional_properties;
+ init.reset(new corehost_init_t(pal::string_t{}, host_info, deps_file, additional_deps_serialized, probe_realpaths, mode, fx_definitions, additional_properties));
return StatusCode::Success;
}
@@ -725,6 +740,7 @@ int fx_muxer_t::initialize_for_app(
host_info.app_path,
opts,
mode,
+ false /*is_sdk_command*/,
hostpolicy_dir,
init);
if (rc != StatusCode::Success)
@@ -978,6 +994,7 @@ int fx_muxer_t::handle_exec_host_command(
const pal::char_t* argv[],
int argoff,
host_mode_t mode,
+ const bool is_sdk_command,
pal::char_t result_buffer[],
int32_t buffer_size,
int32_t* required_buffer_size)
@@ -1006,6 +1023,7 @@ int fx_muxer_t::handle_exec_host_command(
new_argc,
new_argv,
mode,
+ is_sdk_command,
result_buffer,
buffer_size,
required_buffer_size);
@@ -1096,6 +1114,7 @@ int fx_muxer_t::handle_cli(
new_argv.data(),
new_argoff,
host_mode_t::muxer,
+ true /*is_sdk_command*/,
nullptr /*result_buffer*/,
0 /*buffer_size*/,
nullptr/*required_buffer_size*/);
diff --git a/src/native/corehost/fxr/fx_muxer.h b/src/native/corehost/fxr/fx_muxer.h
index 6794e2a1c82..b3a0e000470 100644
--- a/src/native/corehost/fxr/fx_muxer.h
+++ b/src/native/corehost/fxr/fx_muxer.h
@@ -47,6 +47,7 @@ private:
const pal::char_t* argv[],
int argoff,
host_mode_t mode,
+ const bool is_sdk_command,
pal::char_t result_buffer[],
int32_t buffer_size,
int32_t* required_buffer_size);