From 2d8b482864827044b10efb4c838cd920f5ffe10d Mon Sep 17 00:00:00 2001 From: Maneesh Gupta Date: Sun, 14 Aug 2016 16:22:25 +0530 Subject: [PATCH] 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 [ROCm/clr commit: 85784149fa3be07a85e1150f95c4ac6d9ffca435] --- projects/clr/hipamd/CMakeLists.txt | 39 +++++++---- projects/clr/hipamd/bin/hipcc | 77 +++++++++++----------- projects/clr/hipamd/bin/hipconfig | 60 +++++++++-------- projects/clr/hipamd/packaging/hip_base.txt | 1 + 4 files changed, 95 insertions(+), 82 deletions(-) diff --git a/projects/clr/hipamd/CMakeLists.txt b/projects/clr/hipamd/CMakeLists.txt index f08cef3a77..ddf7f198dc 100644 --- a/projects/clr/hipamd/CMakeLists.txt +++ b/projects/clr/hipamd/CMakeLists.txt @@ -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 diff --git a/projects/clr/hipamd/bin/hipcc b/projects/clr/hipamd/bin/hipcc index 10de654185..c2582f4c3c 100755 --- a/projects/clr/hipamd/bin/hipcc +++ b/projects/clr/hipamd/bin/hipcc @@ -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 () { + 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 () { - 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 (); diff --git a/projects/clr/hipamd/bin/hipconfig b/projects/clr/hipamd/bin/hipconfig index 300b5a1ad7..4fc37944e8 100755 --- a/projects/clr/hipamd/bin/hipconfig +++ b/projects/clr/hipamd/bin/hipconfig @@ -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 () { + 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 () { - 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) { diff --git a/projects/clr/hipamd/packaging/hip_base.txt b/projects/clr/hipamd/packaging/hip_base.txt index 1edba53901..67df3c10f6 100644 --- a/projects/clr/hipamd/packaging/hip_base.txt +++ b/projects/clr/hipamd/packaging/hip_base.txt @@ -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