diff -urpN old/CMakeLists.txt new/CMakeLists.txt --- old/CMakeLists.txt 2020-03-01 12:34:24.059400355 -0800 +++ new/CMakeLists.txt 2020-03-01 12:40:20.846742998 -0800 @@ -14,18 +14,12 @@ if (ROCM_CCACHE_BUILD) endif() # if (CCACHE_PROGRAM) endif() # if (ROCM_CCACHE_BUILD) -project(amd_comgr) - -set(PROJECT_VERSION_MAJOR "1") -set(PROJECT_VERSION_MINOR "6") -set(PROJECT_VERSION_PATCH "0") -set(PROJECT_VERSION - "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") +project(amd_comgr VERSION "1.6.0" LANGUAGES C CXX) find_package(ROCM PATHS "/opt/rocm") if (ROCM_FOUND) include(ROCMSetupVersion) - rocm_setup_version(VERSION "${PROJECT_VERSION}") + rocm_setup_version(VERSION "${amd_comgr_VERSION}") endif() find_package(Clang REQUIRED CONFIG PATHS ${LLVM_DIR} "/opt/rocm/llvm" NO_DEFAULT_PATH) @@ -47,6 +41,7 @@ message("-----------Clang_DIR: ${Clang_D message("--CLANG_INCLUDE_DIRS: ${CLANG_INCLUDE_DIRS}") message("----LLD_INCLUDE_DIRS: ${LLD_INCLUDE_DIRS}") message("---AMDDeviceLibs_DIR: ${AMDDeviceLibs_DIR}") +message("------------ROCM_DIR: ${ROCM_DIR}") message("") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") @@ -112,16 +111,21 @@ endif() set_target_properties(amd_comgr PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED Yes - CXX_EXTENSIONS No - SOVERSION "${PROJECT_VERSION_MAJOR}" - VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") + CXX_EXTENSIONS No) +if (ROCM_FOUND) + rocm_set_soversion(amd_comgr "${amd_comgr_VERSION_MAJOR}.${amd_comgr_VERSION_MINOR}") +else() + set_target_properties(amd_comgr PROPERTIES + SOVERSION "${amd_comgr_VERSION_MAJOR}" + VERSION "${amd_comgr_VERSION_MAJOR}.${amd_comgr_VERSION_MINOR}.${amd_comgr_VERSION_PATCH}") +endif() target_compile_options(amd_comgr PRIVATE "${AMD_COMGR_PRIVATE_COMPILE_OPTIONS}") target_compile_definitions(amd_comgr PRIVATE "${AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS}") target_include_directories(amd_comgr PUBLIC - $ + $ $) set(AMD_COMGR_CONFIG_NAME amd_comgr-config.cmake) @@ -141,7 +145,7 @@ configure_file("cmake/${AMD_COMGR_CONFIG "${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_CONFIG_NAME}" @ONLY) write_basic_package_version_file("${AMD_COMGR_VERSION_PATH}" - VERSION "${PROJECT_VERSION}" + VERSION "${amd_comgr_VERSION}" COMPATIBILITY SameMajorVersion) install(TARGETS amd_comgr @@ -193,22 +197,26 @@ set(LLD_LIBS lldELF lldCommon) -llvm_map_components_to_libnames(LLVM_LIBS - ${LLVM_TARGETS_TO_BUILD} - Option - DebugInfoDWARF - Symbolize - Support - Object - BitWriter - MC - MCParser - MCDisassembler - Core - IRReader - CodeGen - Linker - BinaryFormat) +if (LLVM_LINK_LLVM_DYLIB) + set(LLVM_LIBS LLVM) +else() + llvm_map_components_to_libnames(LLVM_LIBS + ${LLVM_TARGETS_TO_BUILD} + Option + DebugInfoDWARF + Symbolize + Support + Object + BitWriter + MC + MCParser + MCDisassembler + Core + IRReader + CodeGen + Linker + BinaryFormat) +endif() target_link_libraries(amd_comgr PUBLIC @@ -232,10 +240,10 @@ add_subdirectory(test) set(CPACK_PACKAGE_NAME comgr) set(CPACK_PACKAGE_VENDOR "AMD") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Library to provide support functions") -set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") -set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") +set(CPACK_PACKAGE_VERSION "${amd_comgr_VERSION}") +set(CPACK_PACKAGE_VERSION_MAJOR "${amd_comgr_VERSION_MAJOR}") +set(CPACK_PACKAGE_VERSION_MINOR "${amd_comgr_VERSION_MINOR}") +set(CPACK_PACKAGE_VERSION_PATCH "${amd_comgr_VERSION_PATCH}") set(CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc.") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt") diff -urpN old/README.md new/README.md --- old/README.md 2019-11-21 13:46:36.000000000 -0800 +++ new/README.md 2020-03-01 12:37:26.419643188 -0800 @@ -7,54 +7,56 @@ objects. The API is documented in the [h Build the Code Object Manager ----------------------------- -Comgr depends on LLVM, and optionally depends on +Comgr depends on [LLVM](https://github.com/RadeonOpenCompute/llvm-project) and [AMDDeviceLibs](https://github.com/RadeonOpenCompute/ROCm-Device-Libs). The `CMAKE_PREFIX_PATH` must include either the build directory or install prefix -of both of these components. Comgr also depends on yaml-cpp, but version -[0.6.2](https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.6.2) is -included in-tree. - -Comgr depends on Clang and LLD, which should be built as a part of the LLVM -distribution used. The LLVM, Clang, and LLD used must be from the amd-common -branches of their respective repositories on the [RadeonOpenCompute -Github](https://github.com/RadeonOpenCompute) organisation. +of both of these components. Both should be built using sources with the same +ROCm release tag, or from the amd-stg-open branch. LLVM should be built with at +least `LLVM_ENABLE_PROJECTS='llvm;clang;lld'` and +`LLVM_TARGETS_TO_BUILD='AMDGPU;X86'`. An example command-line to build Comgr on Linux is: - $ cd ~/llvm/ + $ cd ~/llvm-project/ $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=dist \ - -DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" .. + -DLLVM_ENABLE_PROJECTS="llvm;clang;lld" \ + -DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" ../llvm + $ make + $ cd ~/device-libs/ + $ mkdir build + $ cd build + $ cmake -DLLVM_DIR=~/llvm-project/build .. $ make - $ make install - $ # build AMDDeviceLibs $ cd ~/support/lib/comgr $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_PREFIX_PATH="~/llvm/build/dist;path/to/device-libs" .. + -DCMAKE_PREFIX_PATH="~/llvm/build;~/device-libs/build" .. $ make $ make test The equivalent on Windows will use another build tool, such as msbuild or Visual Studio: - $ cd "%HOMEPATH%\llvm" + $ cd "%HOMEPATH%\llvm-project" $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=dist \ - -DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" .. + -DLLVM_ENABLE_PROJECTS='llvm;clang;lld' \ + -DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" "..\llvm" + $ msbuild ALL_BUILD.vcxproj + $ cd "%HOMEPATH%\device-libs" + $ mkdir build + $ cd build + $ cmake -DLLVM_DIR="%HOMEPATH%\llvm-project\build" .. $ msbuild ALL_BUILD.vcxproj - $ msbuild INSTALL.vcxproj - $ rem build AMDDeviceLibs $ cd "%HOMEPATH%\support\lib\comgr" $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_PREFIX_PATH="%HOMEPATH%\llvm\build\dist;path\to\device-libs" .. + -DCMAKE_PREFIX_PATH="%HOMEPATH%\llvm\build;%HOMEPATH%\device-libs\build" .. $ msbuild ALL_BUILD.vcxproj $ msbuild RUN_TESTS.vcxproj diff -urpN old/src/comgr-disassembly.cpp new/src/comgr-disassembly.cpp --- old/src/comgr-disassembly.cpp 2019-11-21 13:46:36.000000000 -0800 +++ new/src/comgr-disassembly.cpp 2020-03-01 12:37:26.421643223 -0800 @@ -138,13 +138,13 @@ amd_comgr_status_t DisassemblyInfo::disa MCInst Inst; std::string Annotations; raw_string_ostream AnnotationsStream(Annotations); - if (DisAsm->getInstruction(Inst, Size, Buffer, Address, nulls(), + if (DisAsm->getInstruction(Inst, Size, Buffer, Address, AnnotationsStream) != MCDisassembler::Success) return AMD_COMGR_STATUS_ERROR; std::string InstStr; raw_string_ostream InstStream(InstStr); - IP->printInst(&Inst, InstStream, AnnotationsStream.str(), *STI); + IP->printInst(&Inst, Address, AnnotationsStream.str(), *STI, InstStream); PrintInstruction(InstStream.str().c_str(), UserData); diff -urpN old/src/comgr-objdump.cpp new/src/comgr-objdump.cpp --- old/src/comgr-objdump.cpp 2019-11-21 13:46:36.000000000 -0800 +++ new/src/comgr-objdump.cpp 2020-03-01 12:37:26.422643241 -0800 @@ -560,7 +560,7 @@ public: dumpBytes(Bytes, OS); } if (MI) - IP.printInst(MI, OS, "", STI); + IP.printInst(MI, Address.Address, "", STI, OS); else OS << " "; } @@ -593,7 +593,7 @@ public: std::string Buffer; { raw_string_ostream TempStream(Buffer); - IP.printInst(MI, TempStream, "", STI); + IP.printInst(MI, Address.Address, "", STI, TempStream); } StringRef Contents(Buffer); // Split off bundle attributes @@ -645,7 +645,7 @@ public: SmallString<40> InstStr; raw_svector_ostream IS(InstStr); - IP.printInst(MI, IS, "", STI); + IP.printInst(MI, Address.Address, "", STI, IS); OS << left_justify(IS.str(), 60) << format("// %012" PRIX64 ": ", Address.Address); @@ -677,7 +677,7 @@ public: dumpBytes(Bytes, OS); } if (MI) - IP.printInst(MI, OS, "", STI); + IP.printInst(MI, Address.Address, "", STI, OS); else OS << " "; } @@ -1474,12 +1474,6 @@ void llvm::DisassemHelper::DisassembleOb // COMGR TBD: Get rid of ".text:"?? OutS << '\n' << std::get<1>(Symbols[si]) << ":\n"; -#ifndef NDEBUG - raw_ostream &DebugOut = DebugFlag ? dbgs() : nulls(); -#else - raw_ostream &DebugOut = nulls(); -#endif - for (Index = Start; Index < End; Index += Size) { MCInst Inst; @@ -1601,8 +1595,7 @@ void llvm::DisassemHelper::DisassembleOb // Disassemble a real instruction or a data when disassemble all is // provided bool Disassembled = DisAsm->getInstruction( - Inst, Size, Bytes.slice(Index), SectionAddr + Index, DebugOut, - CommentStream); + Inst, Size, Bytes.slice(Index), SectionAddr + Index, CommentStream); if (Size == 0) Size = 1;