Commit 53582534 authored by Artur Wojcik's avatar Artur Wojcik
Browse files

fix kernels resources on Windows

parent ae3d92ff
...@@ -27,7 +27,10 @@ find_program(EMBED_OBJCOPY objcopy) ...@@ -27,7 +27,10 @@ find_program(EMBED_OBJCOPY objcopy)
option(EMBED_USE_LD "Use ld to embed data files" OFF) option(EMBED_USE_LD "Use ld to embed data files" OFF)
function(wrap_string) function(wrap_string)
cmake_parse_arguments(PARSE "" "VARIABLE;AT_COLUMN" "" ${ARGN}) set(options)
set(oneValueArgs VARIABLE AT_COLUMN)
set(multiValueArgs)
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
string(LENGTH ${${PARSE_VARIABLE}} string_length) string(LENGTH ${${PARSE_VARIABLE}} string_length)
math(EXPR offset "0") math(EXPR offset "0")
...@@ -51,7 +54,11 @@ function(wrap_string) ...@@ -51,7 +54,11 @@ function(wrap_string)
endfunction() endfunction()
function(generate_embed_source EMBED_NAME SRC_FILE HEADER_FILE BASE_DIRECTORY) function(generate_embed_source EMBED_NAME SRC_FILE HEADER_FILE BASE_DIRECTORY)
cmake_parse_arguments(PARSE "" "" "SYMBOLS;FILES" ${ARGN}) set(options)
set(oneValueArgs "")
set(multiValueArgs SYMBOLS FILES)
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
foreach(SYMBOL FILE IN ZIP_LISTS PARSE_SYMBOLS PARSE_FILES) foreach(SYMBOL FILE IN ZIP_LISTS PARSE_SYMBOLS PARSE_FILES)
set(START_SYMBOL "_binary_${SYMBOL}_start") set(START_SYMBOL "_binary_${SYMBOL}_start")
set(LENGTH_SYMBOL "_binary_${SYMBOL}_length") set(LENGTH_SYMBOL "_binary_${SYMBOL}_length")
...@@ -126,7 +133,10 @@ extern const size_t _binary_${OUTPUT_SYMBOL}_length = sizeof(_binary_${OUTPUT_SY ...@@ -126,7 +133,10 @@ extern const size_t _binary_${OUTPUT_SYMBOL}_length = sizeof(_binary_${OUTPUT_SY
endfunction() endfunction()
function(add_embed_library EMBED_NAME) function(add_embed_library EMBED_NAME)
cmake_parse_arguments(PARSE "" "BASE_DIRECTORY" "" ${ARGN}) set(options)
set(oneValueArgs BASE_DIRECTORY)
set(multiValueArgs)
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(EMBED_DIR ${CMAKE_CURRENT_BINARY_DIR}/embed/${EMBED_NAME}) set(EMBED_DIR ${CMAKE_CURRENT_BINARY_DIR}/embed/${EMBED_NAME})
file(MAKE_DIRECTORY ${EMBED_DIR}) file(MAKE_DIRECTORY ${EMBED_DIR})
set(SRC_FILE "${EMBED_DIR}/${EMBED_NAME}.cpp") set(SRC_FILE "${EMBED_DIR}/${EMBED_NAME}.cpp")
......
...@@ -45,6 +45,7 @@ struct MIGRAPHX_EXPORT dynamic_loader ...@@ -45,6 +45,7 @@ struct MIGRAPHX_EXPORT dynamic_loader
return path(reinterpret_cast<void*>(address)); return path(reinterpret_cast<void*>(address));
} }
static fs::path path(void* address); static fs::path path(void* address);
#endif
static optional<dynamic_loader> try_load(const fs::path& p); static optional<dynamic_loader> try_load(const fs::path& p);
......
...@@ -27,61 +27,51 @@ ...@@ -27,61 +27,51 @@
#include "migraphx_kernels.hpp" #include "migraphx_kernels.hpp"
#include "resource.h" #include "resource.h"
namespace migraphx { namespace {
inline namespace MIGRAPHX_INLINE_NS { std::string_view __read(int id)
namespace gpu {
namespace resource {
std::string_view read(int id)
{ {
HMODULE handle{::GetModuleHandle(nullptr)}; HMODULE handle{::GetModuleHandle(nullptr)};
HRSRC rc{::FindResource(handle, MAKEINTRESOURCE(id), MAKEINTRESOURCE(MIGRAPHX_TEXTFILE))}; HRSRC rc{::FindResource(handle, MAKEINTRESOURCE(id), MAKEINTRESOURCE(MIGRAPHX_TEXTFILE))};
HGLOBAL data{::LoadResource(handle, rc)}; HGLOBAL data{::LoadResource(handle, rc)};
return {static_cast<char const*>(::LockResource(data)), ::SizeofResource(handle, rc)}; return {static_cast<char const*>(::LockResource(data)), ::SizeofResource(handle, rc)};
} }
} // namespace resource }
std::vector<src_file> migraphx_kernels() std::unordered_map<std::string_view, std::string_view> migraphx_kernels()
{ {
static src_file _kernels_[] = { static std::unordered_map<std::string_view, std::string_view> kernels = {
{"migraphx/kernels/algorithm.hpp", resource::read(MIGRAPHX_IDR_ALGORITHM_HPP)}, {"migraphx/kernels/algorithm.hpp", __read(MIGRAPHX_IDR_ALGORITHM_HPP)},
{"migraphx/kernels/args.hpp", resource::read(MIGRAPHX_IDR_ARGS_HPP)}, {"migraphx/kernels/args.hpp", __read(MIGRAPHX_IDR_ARGS_HPP)},
{"migraphx/kernels/array.hpp", resource::read(MIGRAPHX_IDR_ARRAY_HPP)}, {"migraphx/kernels/array.hpp", __read(MIGRAPHX_IDR_ARRAY_HPP)},
{"migraphx/kernels/concat.hpp", resource::read(MIGRAPHX_IDR_CONCAT_HPP)}, {"migraphx/kernels/concat.hpp", __read(MIGRAPHX_IDR_CONCAT_HPP)},
{"migraphx/kernels/debug.hpp", resource::read(MIGRAPHX_IDR_DEBUG_HPP)}, {"migraphx/kernels/debug.hpp", __read(MIGRAPHX_IDR_DEBUG_HPP)},
{"migraphx/kernels/dfor.hpp", resource::read(MIGRAPHX_IDR_DFOR_HPP)}, {"migraphx/kernels/dfor.hpp", __read(MIGRAPHX_IDR_DFOR_HPP)},
{"migraphx/kernels/dpp.hpp", resource::read(MIGRAPHX_IDR_DPP_HPP)}, {"migraphx/kernels/dpp.hpp", __read(MIGRAPHX_IDR_DPP_HPP)},
{"migraphx/kernels/functional.hpp", resource::read(MIGRAPHX_IDR_FUNCTIONAL_HPP)}, {"migraphx/kernels/functional.hpp", __read(MIGRAPHX_IDR_FUNCTIONAL_HPP)},
{"migraphx/kernels/gather.hpp", resource::read(MIGRAPHX_IDR_GATHER_HPP)}, {"migraphx/kernels/gather.hpp", __read(MIGRAPHX_IDR_GATHER_HPP)},
{"migraphx/kernels/gathernd.hpp", resource::read(MIGRAPHX_IDR_GATHERND_HPP)}, {"migraphx/kernels/gathernd.hpp", __read(MIGRAPHX_IDR_GATHERND_HPP)},
{"migraphx/kernels/generic_constant.hpp", {"migraphx/kernels/generic_constant.hpp", __read(MIGRAPHX_IDR_GENERIC_CONSTANT_HPP)},
resource::read(MIGRAPHX_IDR_GENERIC_CONSTANT_HPP)}, {"migraphx/kernels/hip.hpp", __read(MIGRAPHX_IDR_HIP_HPP)},
{"migraphx/kernels/hip.hpp", resource::read(MIGRAPHX_IDR_HIP_HPP)}, {"migraphx/kernels/index.hpp", __read(MIGRAPHX_IDR_INDEX_HPP)},
{"migraphx/kernels/index.hpp", resource::read(MIGRAPHX_IDR_INDEX_HPP)}, {"migraphx/kernels/integral_constant.hpp", __read(MIGRAPHX_IDR_INTEGRAL_CONSTANT_HPP)},
{"migraphx/kernels/integral_constant.hpp", {"migraphx/kernels/iota_iterator.hpp", __read(MIGRAPHX_IDR_IOTA_ITERATOR_HPP)},
resource::read(MIGRAPHX_IDR_INTEGRAL_CONSTANT_HPP)}, {"migraphx/kernels/layernorm.hpp", __read(MIGRAPHX_IDR_LAYERNORM_HPP)},
{"migraphx/kernels/iota_iterator.hpp", resource::read(MIGRAPHX_IDR_IOTA_ITERATOR_HPP)}, {"migraphx/kernels/math.hpp", __read(MIGRAPHX_IDR_MATH_HPP)},
{"migraphx/kernels/layernorm.hpp", resource::read(MIGRAPHX_IDR_LAYERNORM_HPP)}, {"migraphx/kernels/ops.hpp", __read(MIGRAPHX_IDR_OPS_HPP)},
{"migraphx/kernels/math.hpp", resource::read(MIGRAPHX_IDR_MATH_HPP)}, {"migraphx/kernels/pad.hpp", __read(MIGRAPHX_IDR_PAD_HPP)},
{"migraphx/kernels/ops.hpp", resource::read(MIGRAPHX_IDR_OPS_HPP)}, {"migraphx/kernels/pointwise.hpp", __read(MIGRAPHX_IDR_POINTWISE_HPP)},
{"migraphx/kernels/pad.hpp", resource::read(MIGRAPHX_IDR_PAD_HPP)}, {"migraphx/kernels/preload.hpp", __read(MIGRAPHX_IDR_PRELOAD_HPP)},
{"migraphx/kernels/pointwise.hpp", resource::read(MIGRAPHX_IDR_POINTWISE_HPP)}, {"migraphx/kernels/print.hpp", __read(MIGRAPHX_IDR_PRINT_HPP)},
{"migraphx/kernels/preload.hpp", resource::read(MIGRAPHX_IDR_PRELOAD_HPP)}, {"migraphx/kernels/ranges.hpp", __read(MIGRAPHX_IDR_RANGES_HPP)},
{"migraphx/kernels/print.hpp", resource::read(MIGRAPHX_IDR_PRINT_HPP)}, {"migraphx/kernels/reduce.hpp", __read(MIGRAPHX_IDR_REDUCE_HPP)},
{"migraphx/kernels/ranges.hpp", resource::read(MIGRAPHX_IDR_RANGES_HPP)}, {"migraphx/kernels/roialign.hpp", __read(MIGRAPHX_IDR_ROIALIGN_HPP)},
{"migraphx/kernels/reduce.hpp", resource::read(MIGRAPHX_IDR_REDUCE_HPP)}, {"migraphx/kernels/scatternd.hpp", __read(MIGRAPHX_IDR_SCATTERND_HPP)},
{"migraphx/kernels/roialign.hpp", resource::read(MIGRAPHX_IDR_ROIALIGN_HPP)}, {"migraphx/kernels/shape.hpp", __read(MIGRAPHX_IDR_SHAPE_HPP)},
{"migraphx/kernels/scatternd.hpp", resource::read(MIGRAPHX_IDR_SCATTERND_HPP)}, {"migraphx/kernels/softmax.hpp", __read(MIGRAPHX_IDR_SOFTMAX_HPP)},
{"migraphx/kernels/shape.hpp", resource::read(MIGRAPHX_IDR_SHAPE_HPP)}, {"migraphx/kernels/tensor_view.hpp", __read(MIGRAPHX_IDR_TENSOR_VIEW_HPP)},
{"migraphx/kernels/softmax.hpp", resource::read(MIGRAPHX_IDR_SOFTMAX_HPP)}, {"migraphx/kernels/type_traits.hpp", __read(MIGRAPHX_IDR_TYPE_TRAITS_HPP)},
{"migraphx/kernels/tensor_view.hpp", resource::read(MIGRAPHX_IDR_TENSOR_VIEW_HPP)}, {"migraphx/kernels/types.hpp", __read(MIGRAPHX_IDR_TYPES_HPP)},
{"migraphx/kernels/type_traits.hpp", resource::read(MIGRAPHX_IDR_TYPE_TRAITS_HPP)}, {"migraphx/kernels/vec.hpp", __read(MIGRAPHX_IDR_VEC_HPP)},
{"migraphx/kernels/types.hpp", resource::read(MIGRAPHX_IDR_TYPES_HPP)}, {"migraphx/kernels/vectorize.hpp", __read(MIGRAPHX_IDR_VECTORIZE_HPP)}};
{"migraphx/kernels/vec.hpp", resource::read(MIGRAPHX_IDR_VEC_HPP)}, return kernels;
{"migraphx/kernels/vectorize.hpp", resource::read(MIGRAPHX_IDR_VECTORIZE_HPP)}};
return {std::begin(_kernels_), std::end(_kernels_)};
} }
} // namespace gpu
} // namespace MIGRAPHX_INLINE_NS
} // namespace migraphx
...@@ -25,14 +25,9 @@ ...@@ -25,14 +25,9 @@
#ifndef MIGRAPHX_GUARD_MIGRAPHX_KERNELS_HPP #ifndef MIGRAPHX_GUARD_MIGRAPHX_KERNELS_HPP
#define MIGRAPHX_GUARD_MIGRAPHX_KERNELS_HPP #define MIGRAPHX_GUARD_MIGRAPHX_KERNELS_HPP
#include "migraphx/compile_src.hpp" #include <string_view>
#include <unordered_map>
namespace migraphx { std::unordered_map<std::string_view, std::string_view> migraphx_kernels();
inline namespace MIGRAPHX_INLINE_NS {
namespace gpu {
std::vector<src_file> migraphx_kernels();
} // namespace gpu
} // namespace MIGRAPHX_INLINE_NS
} // namespace migraphx
#endif // MIGRAPHX_GUARD_MIGRAPHX_KERNELS_HPP #endif // MIGRAPHX_GUARD_MIGRAPHX_KERNELS_HPP
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment