Several improvements to hipcc, hipconfig and CMakeLists.txt
- moved hip base version information back to hipconfig - fixed bug in hip patch version generation - renamed .hipconfig to .buildInfo - HCC_HOME is logged to .buildInfo only when HIP_DEVELOPER environment - variable is defined - hipcc and hipconfig require perl 5.10.1 or above - replaced unless defined with logic-defined or - added ROCM_TARGET for carrizo - moved config parsing to a subroutine - config parsing does not set VALID key anymore - hipcc honors HCC_HOME environment variable above buildInfo - hip_base package now bundles .version in bin directory Change-Id: Iaeea6d7529671220b02e07337946aaee0af90310
This commit is contained in:
+26
-13
@@ -1,12 +1,20 @@
|
||||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(hip)
|
||||
|
||||
string(TIMESTAMP _timestamp UTC)
|
||||
set(_versionInfo "# Auto-generated by cmake\n")
|
||||
set(_buildInfo "# Auto-generated by cmake on ${_timestamp} UTC\n")
|
||||
|
||||
#############################
|
||||
# Setup version information
|
||||
#############################
|
||||
# define HCC version information
|
||||
set(HIP_VERSION_MAJOR "0")
|
||||
set(HIP_VERSION_MINOR "92")
|
||||
# Determine HIP_BASE_VERSION
|
||||
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin/hipconfig --version
|
||||
OUTPUT_VARIABLE HIP_BASE_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REPLACE "." ";" VERSION_LIST ${HIP_BASE_VERSION})
|
||||
list(GET VERSION_LIST 0 HIP_VERSION_MAJOR)
|
||||
list(GET VERSION_LIST 1 HIP_VERSION_MINOR)
|
||||
|
||||
# get date information based on UTC
|
||||
# use the last two digits of year + week number + day in the week as HIP_VERSION_PATCH
|
||||
@@ -14,11 +22,14 @@ set(HIP_VERSION_MINOR "92")
|
||||
# add xargs to remove strange trailing newline character
|
||||
execute_process(COMMAND git show -s --format=@%ct
|
||||
COMMAND xargs
|
||||
COMMAND date -f - --utc +%y%W%w
|
||||
COMMAND date -f - --utc +%y%U%w
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE HIP_VERSION_PATCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
set(HIP_VERSION $HIP_VERSION_MAJOR$.@HIP_VERSION_MINOR@.$HIP_VERSION_PATCH)
|
||||
set(_versionInfo "${_versionInfo}HIP_VERSION_MAJOR=${HIP_VERSION_MAJOR}\nHIP_VERSION_MINOR=${HIP_VERSION_MINOR}\nHIP_VERSION_PATCH=${HIP_VERSION_PATCH}\n")
|
||||
|
||||
#############################
|
||||
# Configure variables
|
||||
#############################
|
||||
@@ -44,6 +55,9 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
||||
set(HCC_HOME $ENV{HCC_HOME} CACHE PATH "Path to which HCC has been installed")
|
||||
endif()
|
||||
endif()
|
||||
if(DEFINED ENV{HIP_DEVELOPER})
|
||||
set(_buildInfo "${_buildInfo}HCC_HOME=${HCC_HOME}\n")
|
||||
endif()
|
||||
if(IS_ABSOLUTE ${HCC_HOME} AND EXISTS ${HCC_HOME} AND IS_DIRECTORY ${HCC_HOME})
|
||||
execute_process(COMMAND ${HCC_HOME}/bin/hcc --version
|
||||
COMMAND cut -d\ -f9
|
||||
@@ -53,6 +67,7 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
||||
else()
|
||||
message(FATAL_ERROR "Don't know where to find HCC. Please specify abolute path using -DHCC_HOME")
|
||||
endif()
|
||||
set(_buildInfo "${_buildInfo}HCC_VERSION=${HCC_VERSION}\n")
|
||||
|
||||
# Determine HSA_PATH
|
||||
if(NOT DEFINED HSA_PATH)
|
||||
@@ -123,10 +138,6 @@ if(BUILD_CLANG_HIPIFY)
|
||||
add_subdirectory(clang-hipify)
|
||||
endif()
|
||||
|
||||
# Generate hip version information
|
||||
string(TIMESTAMP _timestamp)
|
||||
file(WRITE "${PROJECT_BINARY_DIR}/.version" "# Auto-generated by cmake on ${_timestamp} local time\nHIP_VERSION_MAJOR=${HIP_VERSION_MAJOR}\nHIP_VERSION_MINOR=${HIP_VERSION_MINOR}\nHIP_VERSION_PATCH=${HIP_VERSION_PATCH}\n")
|
||||
|
||||
# Build hip_hcc if platform is hcc
|
||||
if(HIP_PLATFORM STREQUAL "hcc")
|
||||
include_directories(${PROJECT_SOURCE_DIR}/include)
|
||||
@@ -163,11 +174,13 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
||||
add_library(hip_hcc OBJECT ${SOURCE_FILES})
|
||||
endif()
|
||||
|
||||
# Generate .hipconfig
|
||||
string(TIMESTAMP _timestamp)
|
||||
file(WRITE "${PROJECT_BINARY_DIR}/.hipconfig" "# Auto-generated by cmake on ${_timestamp} local time\nHCC_HOME=${HCC_HOME}\nHCC_VERSION=${HCC_VERSION}\n")
|
||||
# Generate .buildInfo
|
||||
file(WRITE "${PROJECT_BINARY_DIR}/.buildInfo" ${_buildInfo})
|
||||
endif()
|
||||
|
||||
# Generate .version
|
||||
file(WRITE "${PROJECT_BINARY_DIR}/.version" ${_versionInfo})
|
||||
|
||||
# Build doxygen documentation
|
||||
add_custom_target(doc COMMAND HIP_PATH=${CMAKE_CURRENT_SOURCE_DIR} doxygen ${CMAKE_CURRENT_SOURCE_DIR}/docs/doxygen-input/doxy.cfg
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/docs)
|
||||
@@ -184,8 +197,8 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
||||
install(DIRECTORY ${PROJECT_BINARY_DIR}/CMakeFiles/hip_hcc.dir/src/ DESTINATION lib)
|
||||
endif()
|
||||
|
||||
# Install .hipconfig
|
||||
install(FILES ${PROJECT_BINARY_DIR}/.hipconfig DESTINATION lib)
|
||||
# Install .buildInfo
|
||||
install(FILES ${PROJECT_BINARY_DIR}/.buildInfo DESTINATION lib)
|
||||
endif()
|
||||
|
||||
# Install .version
|
||||
|
||||
+37
-40
@@ -1,5 +1,8 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
|
||||
# Need perl > 5.10 to use logic-defined or
|
||||
use 5.006; use v5.10.1;
|
||||
use File::Basename;
|
||||
|
||||
# HIP compiler driver
|
||||
@@ -24,39 +27,40 @@ print "No Arguments passed, exiting ...\n";
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
$verbose = $ENV{'HIPCC_VERBOSE'};
|
||||
$verbose = 0 unless defined $verbose;
|
||||
#---
|
||||
# Function to parse config file
|
||||
sub parse_config_file {
|
||||
my ($file, $config) = @_;
|
||||
if (open (CONFIG, "$file")) {
|
||||
while (<CONFIG>) {
|
||||
my $config_line=$_;
|
||||
chop ($config_line);
|
||||
$config_line =~ s/^\s*//;
|
||||
$config_line =~ s/\s*$//;
|
||||
if (($config_line !~ /^#/) && ($config_line ne "")) {
|
||||
my ($name, $value) = split (/=/, $config_line);
|
||||
$$config{$name} = $value;
|
||||
}
|
||||
}
|
||||
close(CONFIG);
|
||||
}
|
||||
}
|
||||
|
||||
$verbose = $ENV{'HIPCC_VERBOSE'} // 0;
|
||||
# Verbose: 0x1=commands, 0x2=paths, 0x4=hippc args
|
||||
|
||||
$HIP_PATH=$ENV{'HIP_PATH'};
|
||||
$HIP_PATH=dirname (dirname $0) unless defined $HIP_PATH; # use parent directory of hipcc
|
||||
$HIP_PATH=$ENV{'HIP_PATH'} // dirname (dirname $0); # use parent directory of hipcc
|
||||
|
||||
#---
|
||||
# Read .hipconfig
|
||||
# Read .buildInfo
|
||||
my %hipConfig = ();
|
||||
$hipConfig{'VALID'}=0;
|
||||
if (open (CONFIG, "$HIP_PATH/lib/.hipconfig")) {
|
||||
while (<CONFIG>) {
|
||||
my $config_line=$_;
|
||||
chop ($config_line);
|
||||
$config_line =~ s/^\s*//;
|
||||
$config_line =~ s/\s*$//;
|
||||
if (($config_line !~ /^#/) && ($config_line ne "")) {
|
||||
my ($name, $value) = split (/=/, $config_line);
|
||||
$hipConfig{$name} = $value;
|
||||
$hipConfig{'VALID'}=1;
|
||||
}
|
||||
}
|
||||
close(CONFIG);
|
||||
}
|
||||
parse_config_file("$HIP_PATH/lib/.buildInfo", \%hipConfig);
|
||||
|
||||
#---
|
||||
#HIP_PLATFORM controls whether to use NVCC or HCC for compilation:
|
||||
$HIP_PLATFORM= `$HIP_PATH/bin/hipconfig --platform`;
|
||||
$HIP_PLATFORM= `$HIP_PATH/bin/hipconfig --platform` // "hcc";
|
||||
$HIP_VERSION= `$HIP_PATH/bin/hipconfig --version`;
|
||||
|
||||
$HIP_PLATFORM="hcc" unless defined $HIP_PLATFORM;
|
||||
|
||||
if ($verbose & 0x2) {
|
||||
print ("HIP_PATH=$HIP_PATH\n");
|
||||
print ("HIP_PLATFORM=$HIP_PLATFORM\n");
|
||||
@@ -66,26 +70,18 @@ if ($verbose & 0x2) {
|
||||
$setStdLib = 0; # TODO - set to 0
|
||||
|
||||
if ($HIP_PLATFORM eq "hcc") {
|
||||
$HSA_PATH=$ENV{'HSA_PATH'};
|
||||
$HSA_PATH="/opt/rocm/hsa" unless defined $HSA_PATH;
|
||||
$HSA_PATH=$ENV{'HSA_PATH'} // "/opt/rocm/hsa";
|
||||
|
||||
if($hipConfig{'VALID'} == 0){
|
||||
$HCC_HOME=$ENV{'HCC_HOME'};
|
||||
$HCC_HOME="/opt/rocm/hcc" unless defined $HCC_HOME;
|
||||
}else{
|
||||
$HCC_HOME=$hipConfig{'HCC_HOME'};
|
||||
}
|
||||
$HCC_HOME=$ENV{'HCC_HOME'} // $hipConfig{'HCC_HOME'} // "/opt/rocm/hcc";
|
||||
|
||||
$HCC_VERSION=`${HCC_HOME}/bin/hcc --version | cut -d" " -f9 | tr -d "\n"`;
|
||||
|
||||
$ROCM_PATH=$ENV{'ROCM_PATH'};
|
||||
$ROCM_PATH="/opt/rocm" unless defined $ROCM_PATH;
|
||||
$ROCM_PATH=$ENV{'ROCM_PATH'} // "/opt/rocm";
|
||||
|
||||
$HIP_ATP_MARKER=$ENV{'HIP_ATP_MARKER'};
|
||||
$marker_path = "$ROCM_PATH/profiler/CXLActivityLogger";
|
||||
|
||||
$ROCM_TARGET=$ENV{'ROCM_TARGET'};
|
||||
$ROCM_TARGET="fiji" unless defined $ROCM_TARGET;
|
||||
$ROCM_TARGET=$ENV{'ROCM_TARGET'} // "fiji";
|
||||
|
||||
# HCC* may be used to compile src/hip_hcc.o (and also feed the HIPCXXFLAGS below)
|
||||
$HCC = "$HCC_HOME/bin/hcc";
|
||||
@@ -116,6 +112,9 @@ if ($HIP_PLATFORM eq "hcc") {
|
||||
if ($ROCM_TARGET eq "fiji") {
|
||||
$HIPLDFLAGS .= " -amdgpu-target=AMD:AMDGPU:8:0:3";
|
||||
}
|
||||
if ($ROCM_TARGET eq "carrizo") {
|
||||
$HIPLDFLAGS .= " -amdgpu-target=AMD:AMDGPU:8:0:1";
|
||||
}
|
||||
if ($ROCM_TARGET eq "hawaii") {
|
||||
$HIPLDFLAGS .= " -amdgpu-target=AMD:AMDGPU:7:0:1";
|
||||
}
|
||||
@@ -147,8 +146,7 @@ if ($HIP_PLATFORM eq "hcc") {
|
||||
if ($verbose & 0x2) {
|
||||
print ("CUDA_PATH=$CUDA_PATH\n");
|
||||
}
|
||||
$CUDA_PATH=$ENV{'CUDA_PATH'};
|
||||
$CUDA_PATH='/usr/local/cuda' unless defined $CUDA_PATH;
|
||||
$CUDA_PATH=$ENV{'CUDA_PATH'} // '/usr/local/cuda';
|
||||
|
||||
$HIPCC="$CUDA_PATH/bin/nvcc";
|
||||
$HIPCXXFLAGS .= " -I$CUDA_PATH/include";
|
||||
@@ -254,8 +252,7 @@ if ($setStdLib eq 0 and $HIP_PLATFORM eq 'hcc')
|
||||
}
|
||||
|
||||
if ($needHipHcc) {
|
||||
$HIP_USE_SHARED_LIBRARY = $ENV{'HIP_USE_SHARED_LIBRARY'};
|
||||
$HIP_USE_SHARED_LIBRARY = 0 unless defined $HIP_USE_SHARED_LIBRARY;
|
||||
$HIP_USE_SHARED_LIBRARY = $ENV{'HIP_USE_SHARED_LIBRARY'} // 0;
|
||||
|
||||
#$HIPLDFLAGS .= " -L/opt/rocm/hip/lib -lhip_hcc" ;
|
||||
if ($HIP_USE_SHARED_LIBRARY) {
|
||||
@@ -292,7 +289,7 @@ if ($printHipVersion) {
|
||||
print $HIP_VERSION, "\n";
|
||||
}
|
||||
if ($runCmd) {
|
||||
if ($hipConfig{'VALID'} and $HIP_PLATFORM eq "hcc" and $HCC_VERSION ne $hipConfig{'HCC_VERSION'}) {
|
||||
if ($HIP_PLATFORM eq "hcc" and exists($hipConfig{'HCC_VERSION'}) and $HCC_VERSION ne $hipConfig{'HCC_VERSION'}) {
|
||||
print ("HIP was built using $hipConfig{'HCC_VERSION'}, but you are using $HCC_VERSION. Please rebuild HIP.\n") && die ();
|
||||
}
|
||||
system ("$CMD") and die ();
|
||||
|
||||
+31
-29
@@ -1,5 +1,10 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
$HIP_BASE_VERSION_MAJOR = "0";
|
||||
$HIP_BASE_VERSION_MINOR = "92";
|
||||
|
||||
# Need perl > 5.10 to use logic-defined or
|
||||
use 5.006; use v5.10.1;
|
||||
use Getopt::Long;
|
||||
use Cwd;
|
||||
|
||||
@@ -35,14 +40,28 @@ if ($p_help) {
|
||||
exit();
|
||||
}
|
||||
|
||||
$CUDA_PATH=$ENV{'CUDA_PATH'};
|
||||
$CUDA_PATH='/usr/local/cuda' unless defined $CUDA_PATH;
|
||||
#---
|
||||
# Function to parse config file
|
||||
sub parse_config_file {
|
||||
my ($file, $config) = @_;
|
||||
if (open (CONFIG, "$file")) {
|
||||
while (<CONFIG>) {
|
||||
my $config_line=$_;
|
||||
chop ($config_line);
|
||||
$config_line =~ s/^\s*//;
|
||||
$config_line =~ s/\s*$//;
|
||||
if (($config_line !~ /^#/) && ($config_line ne "")) {
|
||||
my ($name, $value) = split (/=/, $config_line);
|
||||
$$config{$name} = $value;
|
||||
}
|
||||
}
|
||||
close(CONFIG);
|
||||
}
|
||||
}
|
||||
|
||||
$HCC_HOME=$ENV{'HCC_HOME'};
|
||||
$HCC_HOME='/opt/rocm/hcc' unless defined $HCC_HOME;
|
||||
|
||||
$HSA_PATH=$ENV{'HSA_PATH'};
|
||||
$HSA_PATH='/opt/rocm/hsa' unless defined $HSA_PATH;
|
||||
$CUDA_PATH=$ENV{'CUDA_PATH'} // '/usr/local/cuda';
|
||||
$HCC_HOME=$ENV{'HCC_HOME'} // '/opt/rocm/hcc';
|
||||
$HSA_PATH=$ENV{'HSA_PATH'} // '/opt/rocm/hsa';
|
||||
|
||||
#---
|
||||
#HIP_PLATFORM controls whether to use NVCC or HCC for compilation:
|
||||
@@ -57,9 +76,7 @@ if (not defined $HIP_PLATFORM) {
|
||||
}
|
||||
}
|
||||
|
||||
$HIP_PATH=$ENV{'HIP_PATH'};
|
||||
$HIP_PATH=Cwd::realpath (dirname (dirname $0)) unless defined $HIP_PATH; # use parent directory of this tool
|
||||
|
||||
$HIP_PATH=$ENV{'HIP_PATH'} // Cwd::realpath (dirname (dirname $0)); # use parent directory of this tool
|
||||
|
||||
if ($HIP_PLATFORM eq "hcc") {
|
||||
$CPP_CONFIG= " -D__HIP_PLATFORM_HCC__= -I$HIP_PATH/include -I$HCC_HOME/include";
|
||||
@@ -71,25 +88,10 @@ if ($HIP_PLATFORM eq "nvcc") {
|
||||
#---
|
||||
# Read .version
|
||||
my %hipVersion = ();
|
||||
$hipVersion{'VALID'}=0;
|
||||
if (open (CONFIG, "$HIP_PATH/bin/.version")) {
|
||||
while (<CONFIG>) {
|
||||
my $config_line=$_;
|
||||
chop ($config_line);
|
||||
$config_line =~ s/^\s*//;
|
||||
$config_line =~ s/\s*$//;
|
||||
if (($config_line !~ /^#/) && ($config_line ne "")) {
|
||||
my ($name, $value) = split (/=/, $config_line);
|
||||
$hipVersion{$name} = $value;
|
||||
$hipVersion{'VALID'}=1;
|
||||
}
|
||||
}
|
||||
close(CONFIG);
|
||||
}
|
||||
|
||||
$HIP_VERSION_MAJOR = $hipVersion{'HIP_VERSION_MAJOR'};
|
||||
$HIP_VERSION_MINOR = $hipVersion{'HIP_VERSION_MINOR'};
|
||||
$HIP_VERSION_PATCH = $hipVersion{'HIP_VERSION_PATCH'};
|
||||
parse_config_file("$HIP_PATH/bin/.version", \%hipVersion);
|
||||
$HIP_VERSION_MAJOR = $hipVersion{'HIP_VERSION_MAJOR'} // $HIP_BASE_VERSION_MAJOR;
|
||||
$HIP_VERSION_MINOR = $hipVersion{'HIP_VERSION_MINOR'} // $HIP_BASE_VERSION_MINOR;
|
||||
$HIP_VERSION_PATCH = $hipVersion{'HIP_VERSION_PATCH'} // "0";
|
||||
$HIP_VERSION="$HIP_VERSION_MAJOR.$HIP_VERSION_MINOR.$HIP_VERSION_PATCH";
|
||||
|
||||
if ($p_path) {
|
||||
|
||||
@@ -3,6 +3,7 @@ project(hip_base)
|
||||
|
||||
install(DIRECTORY @hip_SOURCE_DIR@/bin DESTINATION . USE_SOURCE_PERMISSIONS)
|
||||
install(DIRECTORY @hip_SOURCE_DIR@/include DESTINATION . PATTERN "hip" EXCLUDE)
|
||||
install(FILES @PROJECT_BINARY_DIR@/.version DESTINATION bin)
|
||||
|
||||
#############################
|
||||
# Packaging steps
|
||||
|
||||
Referens i nytt ärende
Block a user