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:
Maneesh Gupta
2016-08-14 16:22:25 +05:30
förälder 5eb889f73c
incheckning 85784149fa
4 ändrade filer med 95 tillägg och 82 borttagningar
+26 -13
Visa fil
@@ -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
Visa fil
@@ -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
Visa fil
@@ -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) {
+1
Visa fil
@@ -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