diff --git a/projects/clr/hipamd/src/CMakeLists.txt b/projects/clr/hipamd/src/CMakeLists.txt index 46ca17212f..fef58d3eca 100644 --- a/projects/clr/hipamd/src/CMakeLists.txt +++ b/projects/clr/hipamd/src/CMakeLists.txt @@ -178,17 +178,20 @@ if(DISABLE_DIRECT_DISPATCH) target_compile_definitions(amdhip64 PRIVATE DISABLE_DIRECT_DISPATCH) endif() +# hipamd will reference llvm symbols, so we need install rocm-llvm-dev package +find_package(LLVM REQUIRED CONFIG + HINTS + ${ROCM_PATH}/llvm) +message(STATUS "Found LLVM_INCLUDE_DIRS=" ${LLVM_INCLUDE_DIRS} ) +target_include_directories(amdhip64 PRIVATE ${LLVM_INCLUDE_DIRS}) + # Short-Term solution for pre-compiled headers for online compilation # Enable pre compiled header if(__HIP_ENABLE_PCH) - find_package(LLVM REQUIRED CONFIG - HINTS - ${ROCM_PATH}/llvm) # find_package(LLVM) returns the lib/cmake/llvm location. We require the root. if(NOT DEFINED HIP_LLVM_ROOT) set(HIP_LLVM_ROOT "${LLVM_DIR}/../../..") endif() - execute_process(COMMAND sh -c "${CMAKE_CURRENT_SOURCE_DIR}/hip_embed_pch.sh ${HIP_COMMON_INCLUDE_DIR} ${PROJECT_BINARY_DIR}/include ${PROJECT_SOURCE_DIR}/include ${HIP_LLVM_ROOT}" COMMAND_ECHO STDERR RESULT_VARIABLE EMBED_PCH_RC WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) if (EMBED_PCH_RC AND NOT EMBED_PCH_RC EQUAL 0) message(FATAL_ERROR "Failed to embed PCH") diff --git a/projects/clr/hipamd/src/amd_hsa_elf.hpp b/projects/clr/hipamd/src/amd_hsa_elf.hpp deleted file mode 100644 index e83c7a4bac..0000000000 --- a/projects/clr/hipamd/src/amd_hsa_elf.hpp +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright (c) 2015 - 2021 Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#pragma once - -// This header file is partially copied from -// https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/BinaryFormat/ELF.h - -// AMDGPU OS for HSA compatible compute kernels. -enum { ELFOSABI_AMDGPU_HSA = 64, ELFOSABI_AMDGPU_PAL = 65, ELFOSABI_AMDGPU_MESA3D = 66 }; - -enum { - ELFABIVERSION_AMDGPU_HSA_V2 = 0, - ELFABIVERSION_AMDGPU_HSA_V3 = 1, - ELFABIVERSION_AMDGPU_HSA_V4 = 2, - ELFABIVERSION_AMDGPU_HSA_V5 = 3, - ELFABIVERSION_AMDGPU_HSA_V6 = 4, -}; - -// AMDGPU specific e_flags -enum : unsigned { - EF_AMDGPU_MACH = 0x0ff, - // AMDGPU processors - EF_AMDGPU_MACH_NONE = 0x000, - EF_AMDGPU_MACH_R600_R600 = 0x001, - EF_AMDGPU_MACH_R600_R630 = 0x002, - EF_AMDGPU_MACH_R600_RS880 = 0x003, - EF_AMDGPU_MACH_R600_RV670 = 0x004, - EF_AMDGPU_MACH_R600_RV710 = 0x005, - EF_AMDGPU_MACH_R600_RV730 = 0x006, - EF_AMDGPU_MACH_R600_RV770 = 0x007, - EF_AMDGPU_MACH_R600_CEDAR = 0x008, - EF_AMDGPU_MACH_R600_CYPRESS = 0x009, - EF_AMDGPU_MACH_R600_JUNIPER = 0x00a, - EF_AMDGPU_MACH_R600_REDWOOD = 0x00b, - EF_AMDGPU_MACH_R600_SUMO = 0x00c, - EF_AMDGPU_MACH_R600_BARTS = 0x00d, - EF_AMDGPU_MACH_R600_CAICOS = 0x00e, - EF_AMDGPU_MACH_R600_CAYMAN = 0x00f, - EF_AMDGPU_MACH_R600_TURKS = 0x010, - EF_AMDGPU_MACH_R600_RESERVED_FIRST = 0x011, - EF_AMDGPU_MACH_R600_RESERVED_LAST = 0x01f, - EF_AMDGPU_MACH_R600_FIRST = EF_AMDGPU_MACH_R600_R600, - EF_AMDGPU_MACH_R600_LAST = EF_AMDGPU_MACH_R600_TURKS, - - // AMDGCN-based processors. - EF_AMDGPU_MACH_AMDGCN_GFX600 = 0x020, - EF_AMDGPU_MACH_AMDGCN_GFX601 = 0x021, - EF_AMDGPU_MACH_AMDGCN_GFX700 = 0x022, - EF_AMDGPU_MACH_AMDGCN_GFX701 = 0x023, - EF_AMDGPU_MACH_AMDGCN_GFX702 = 0x024, - EF_AMDGPU_MACH_AMDGCN_GFX703 = 0x025, - EF_AMDGPU_MACH_AMDGCN_GFX704 = 0x026, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X27 = 0x027, - EF_AMDGPU_MACH_AMDGCN_GFX801 = 0x028, - EF_AMDGPU_MACH_AMDGCN_GFX802 = 0x029, - EF_AMDGPU_MACH_AMDGCN_GFX803 = 0x02a, - EF_AMDGPU_MACH_AMDGCN_GFX810 = 0x02b, - EF_AMDGPU_MACH_AMDGCN_GFX900 = 0x02c, - EF_AMDGPU_MACH_AMDGCN_GFX902 = 0x02d, - EF_AMDGPU_MACH_AMDGCN_GFX904 = 0x02e, - EF_AMDGPU_MACH_AMDGCN_GFX906 = 0x02f, - EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030, - EF_AMDGPU_MACH_AMDGCN_GFX909 = 0x031, - EF_AMDGPU_MACH_AMDGCN_GFX90C = 0x032, - EF_AMDGPU_MACH_AMDGCN_GFX1010 = 0x033, - EF_AMDGPU_MACH_AMDGCN_GFX1011 = 0x034, - EF_AMDGPU_MACH_AMDGCN_GFX1012 = 0x035, - EF_AMDGPU_MACH_AMDGCN_GFX1030 = 0x036, - EF_AMDGPU_MACH_AMDGCN_GFX1031 = 0x037, - EF_AMDGPU_MACH_AMDGCN_GFX1032 = 0x038, - EF_AMDGPU_MACH_AMDGCN_GFX1033 = 0x039, - EF_AMDGPU_MACH_AMDGCN_GFX602 = 0x03a, - EF_AMDGPU_MACH_AMDGCN_GFX705 = 0x03b, - EF_AMDGPU_MACH_AMDGCN_GFX805 = 0x03c, - EF_AMDGPU_MACH_AMDGCN_GFX1035 = 0x03d, - EF_AMDGPU_MACH_AMDGCN_GFX1034 = 0x03e, - EF_AMDGPU_MACH_AMDGCN_GFX90A = 0x03f, - EF_AMDGPU_MACH_AMDGCN_GFX940 = 0x040, - EF_AMDGPU_MACH_AMDGCN_GFX1100 = 0x041, - EF_AMDGPU_MACH_AMDGCN_GFX1013 = 0x042, - EF_AMDGPU_MACH_AMDGCN_GFX1150 = 0x043, - EF_AMDGPU_MACH_AMDGCN_GFX1103 = 0x044, - EF_AMDGPU_MACH_AMDGCN_GFX1036 = 0x045, - EF_AMDGPU_MACH_AMDGCN_GFX1101 = 0x046, - EF_AMDGPU_MACH_AMDGCN_GFX1102 = 0x047, - EF_AMDGPU_MACH_AMDGCN_GFX1200 = 0x048, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X49 = 0x049, - EF_AMDGPU_MACH_AMDGCN_GFX1151 = 0x04a, - EF_AMDGPU_MACH_AMDGCN_GFX941 = 0x04b, - EF_AMDGPU_MACH_AMDGCN_GFX942 = 0x04c, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X4D = 0x04d, - EF_AMDGPU_MACH_AMDGCN_GFX1201 = 0x04e, - EF_AMDGPU_MACH_AMDGCN_GFX950 = 0x04f, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X50 = 0x050, - EF_AMDGPU_MACH_AMDGCN_GFX9_GENERIC = 0x051, - EF_AMDGPU_MACH_AMDGCN_GFX10_1_GENERIC = 0x052, - EF_AMDGPU_MACH_AMDGCN_GFX10_3_GENERIC = 0x053, - EF_AMDGPU_MACH_AMDGCN_GFX11_GENERIC = 0x054, - EF_AMDGPU_MACH_AMDGCN_GFX1152 = 0x055, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X56 = 0x056, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X57 = 0x057, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X58 = 0x058, - EF_AMDGPU_MACH_AMDGCN_GFX12_GENERIC = 0x059, - EF_AMDGPU_MACH_AMDGCN_GFX9_4_GENERIC = 0x05f, - - EF_AMDGPU_MACH_AMDGCN_FIRST = EF_AMDGPU_MACH_AMDGCN_GFX600, - EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX9_4_GENERIC, - - // Indicates if the "xnack" target feature is enabled for all code contained - // in the object. - // - // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V3. - EF_AMDGPU_FEATURE_XNACK_V3 = 0x100, - // Indicates if the "sramecc" target feature is enabled for all code - // contained in the object. - // - // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V3. - EF_AMDGPU_FEATURE_SRAMECC_V3 = 0x200, - - // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V4, - // ELFABIVERSION_AMDGPU_HSA_V5 and ELFABIVERSION_AMDGPU_HSA_V6. - EF_AMDGPU_FEATURE_XNACK_V4 = 0x300, - EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 = 0x000, - EF_AMDGPU_FEATURE_XNACK_ANY_V4 = 0x100, - EF_AMDGPU_FEATURE_XNACK_OFF_V4 = 0x200, - EF_AMDGPU_FEATURE_XNACK_ON_V4 = 0x300, - - // SRAMECC selection mask for EF_AMDGPU_FEATURE_SRAMECC_* values. - // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V4, - // ELFABIVERSION_AMDGPU_HSA_V5 and ELFABIVERSION_AMDGPU_HSA_V6. - EF_AMDGPU_FEATURE_SRAMECC_V4 = 0xc00, - EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4 = 0x000, - EF_AMDGPU_FEATURE_SRAMECC_ANY_V4 = 0x400, - EF_AMDGPU_FEATURE_SRAMECC_OFF_V4 = 0x800, - EF_AMDGPU_FEATURE_SRAMECC_ON_V4 = 0xc00, - - // Generic target versioning. This is contained in the list byte of EFLAGS. - EF_AMDGPU_GENERIC_VERSION = 0xff000000, - EF_AMDGPU_GENERIC_VERSION_OFFSET = 24, - EF_AMDGPU_GENERIC_VERSION_MIN = 1, - EF_AMDGPU_GENERIC_VERSION_MAX = 0xff, -}; diff --git a/projects/clr/hipamd/src/hip_code_object.cpp b/projects/clr/hipamd/src/hip_code_object.cpp index 8a033349a3..be68b44441 100644 --- a/projects/clr/hipamd/src/hip_code_object.cpp +++ b/projects/clr/hipamd/src/hip_code_object.cpp @@ -19,19 +19,16 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include "llvm/BinaryFormat/ELF.h" +#if defined(_WIN32) +#if defined(__has_attribute) +// MS compiler doesn't support __has_attribute +#undef __has_attribute +#endif +#endif #include "hip_code_object.hpp" -#include "amd_hsa_elf.hpp" - -#include - -#include -#include "hip/hip_runtime_api.h" -#include "hip/hip_runtime.h" -#include "hip_internal.hpp" -#include "platform/program.hpp" -#include -#include "comgrctx.hpp" #include "hip_comgr_helper.hpp" +using namespace llvm::ELF; namespace hip { hipError_t ihipFree(void* ptr); diff --git a/projects/clr/hipamd/src/hip_comgr_helper.cpp b/projects/clr/hipamd/src/hip_comgr_helper.cpp index e98e4de5a6..df6dc25360 100644 --- a/projects/clr/hipamd/src/hip_comgr_helper.cpp +++ b/projects/clr/hipamd/src/hip_comgr_helper.cpp @@ -19,13 +19,16 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -#include "hip_comgr_helper.hpp" +#include "llvm/BinaryFormat/ELF.h" #if defined(_WIN32) #include +#if defined(__has_attribute) +// MS compiler doesn't support __has_attribute +#undef __has_attribute #endif - -#include "../src/amd_hsa_elf.hpp" +#endif +#include "hip_comgr_helper.hpp" +using namespace llvm::ELF; namespace hip { @@ -60,8 +63,6 @@ struct __ClangOffloadBundleHeader { __ClangOffloadBundleInfo desc[1]; }; -uint64_t ElfSize(const void* emi) { return amd::Elf::getElfSize(emi); } - static bool getProcName(uint32_t EFlags, std::string& proc_name, bool& xnackSupported, bool& sramEccSupported) { switch (EFlags & EF_AMDGPU_MACH) { diff --git a/projects/clr/hipamd/src/hip_module.cpp b/projects/clr/hipamd/src/hip_module.cpp index e778d474d6..e1091d1dc8 100644 --- a/projects/clr/hipamd/src/hip_module.cpp +++ b/projects/clr/hipamd/src/hip_module.cpp @@ -19,7 +19,6 @@ THE SOFTWARE. */ #include -#include #include #include "hip_internal.hpp" @@ -41,8 +40,6 @@ const std::string& FunctionName(const hipFunction_t f) { return hip::DeviceFunc::asFunction(f)->kernel()->name(); } -static uint64_t ElfSize(const void* emi) { return amd::Elf::getElfSize(emi); } - hipError_t hipModuleUnload(hipModule_t hmod) { HIP_INIT_API(hipModuleUnload, hmod); if (hmod == nullptr) { diff --git a/projects/clr/hipamd/src/hiprtc/CMakeLists.txt b/projects/clr/hipamd/src/hiprtc/CMakeLists.txt index 675d587f6c..68ec98d750 100644 --- a/projects/clr/hipamd/src/hiprtc/CMakeLists.txt +++ b/projects/clr/hipamd/src/hiprtc/CMakeLists.txt @@ -114,6 +114,7 @@ else() target_include_directories(hiprtc PRIVATE $) endif() +target_include_directories(hiprtc PRIVATE ${LLVM_INCLUDE_DIRS}) target_compile_definitions(hiprtc PUBLIC __HIP_PLATFORM_AMD__) add_to_config(_versionInfo HIP_PACKAGING_VERSION_PATCH) diff --git a/projects/clr/rocclr/elf/elf.hpp b/projects/clr/rocclr/elf/elf.hpp index 1359e2efcb..9585ceed5a 100644 --- a/projects/clr/rocclr/elf/elf.hpp +++ b/projects/clr/rocclr/elf/elf.hpp @@ -26,8 +26,6 @@ #include "top.hpp" #include "elfio/elfio.hpp" #include -using amd::ELFIO::Elf64_Ehdr; -using amd::ELFIO::Elf64_Shdr; // Not sure where to put these in the libelf #define AMD_BIF2 2 // AMD BIF Version 2.0