Skip to content

Commit e4cb0a5

Browse files
committed
Merge branch 'develop'
Merge up to pull request #88 on March 14 2017
2 parents 0b38599 + cfff9c0 commit e4cb0a5

File tree

122 files changed

+10386
-80095
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+10386
-80095
lines changed

CMakeLists.txt

Lines changed: 138 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,51 @@ endif( )
1212

1313
# This has to be initialized before the project() command appears
1414
# Set the default of CMAKE_BUILD_TYPE to be release, unless user specifies with -D. MSVC_IDE does not use CMAKE_BUILD_TYPE
15-
if( NOT CMAKE_CONFIGURATION_TYPES )
16-
set( CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE )
15+
if( NOT DEFINED CMAKE_CONFIGURATION_TYPES AND NOT DEFINED CMAKE_BUILD_TYPE )
16+
set( CMAKE_BUILD_TYPE "Debug" CACHE STRINGS "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel.")
17+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel)
1718
endif()
1819

19-
list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake )
20+
# Append our library helper cmake path and the cmake path for hip (for convenience)
21+
# Users may override HIP path by specifying their own in CMAKE_MODULE_PATH
22+
list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake /opt/rocm/hip/cmake )
23+
24+
# Temp fix, there is a problem building our test program using googletest with gcc
25+
# Change compiler default to clang
26+
if( NOT DEFINED CMAKE_CXX_COMPILER AND NOT DEFINED ENV{CXX} )
27+
set( CMAKE_CXX_COMPILER clang++ )
28+
endif( )
29+
30+
if( NOT DEFINED CMAKE_C_COMPILER AND NOT DEFINED ENV{CC} )
31+
set( CMAKE_C_COMPILER clang )
32+
endif( )
2033

2134
# The superbuild does not build anything itself, all compiling is done in external projects
2235
project( rocblas-superbuild NONE )
2336

2437
# Everything is initially off, so that cache is not initialized until user elects to build
2538
option( BUILD_LIBRARY "Build rocBLAS library" OFF )
2639
option( BUILD_CLIENTS "Build rocBLAS clients" OFF )
27-
option( BUILD_WITH_TENSILE "Building rocBLAS with Tensile or not" ON )
40+
41+
option( BUILD_WITH_TENSILE "Building rocBLAS with Tensile or not" ON)
42+
43+
# which benchmark solution schedule
44+
set( Tensile_ROOT "" CACHE STRING "Local path of Tensile.")
45+
if ( BUILD_WITH_TENSILE )
46+
set( Tensile_LOGIC "FijiROCm14" CACHE STRING "Tensile to use which logic?")
47+
set_property( CACHE Tensile_LOGIC PROPERTY STRINGS
48+
FijiROCm14
49+
)
50+
option( Tensile_MERGE_FILES "Tensile to merge kernels and solutions files?" OFF)
51+
option( Tensile_SHORT_FILENAMES "Tensile to use short file names? Use if compiler complains they're too long." OFF)
52+
option( Tensile_PRINT_DEBUG "Tensile to print runtime debug info?" OFF)
53+
endif()
2854

2955
# BUILD_SHARED_LIBS is a cmake built-in; we make it an explicit option such that it shows in cmake-gui
3056
option( BUILD_SHARED_LIBS "Build rocBLAS as a shared library" OFF )
3157

32-
set( HOST_TOOLCHAIN_NAME "clang" CACHE STRING "Compiler toolchain: (clang gcc)" )
33-
set_property( CACHE HOST_TOOLCHAIN_NAME PROPERTY STRINGS clang gcc )
34-
35-
set( DEVICE_TOOLCHAIN_NAME "hipcc" CACHE STRING "Compiler toolchain for library: (hcc hipcc)" )
36-
set_property( CACHE DEVICE_TOOLCHAIN_NAME PROPERTY STRINGS hcc hipcc )
58+
set( HIP_ROOT /opt/rocm/hip CACHE PATH "Specify hip installation dir")
59+
set( BOOST_ROOT /opt/boost CACHE PATH "Specify boost installation dir")
3760

3861
# set( rocblas_INSTALL_DIR ${CMAKE_INSTALL_PREFIX} )
3962
set( rocblas_INSTALL_DIR "${PROJECT_BINARY_DIR}/package" )
@@ -44,7 +67,7 @@ set( rocblas_INSTALL_COMMAND INSTALL_COMMAND ${CMAKE_COMMAND} -E echo_append )
4467
# Clients are programs provided in this repository, that make use of the library as a library client. This can include
4568
# but is not limited to benchmarks, tests and samples.
4669
if( BUILD_CLIENTS )
47-
# Clients need to find and link rocfft; we install it locally instead of globally
70+
# Clients need to find and link rocblas; we install it locally instead of globally
4871
unset( rocblas_INSTALL_COMMAND )
4972
endif()
5073

@@ -54,103 +77,144 @@ include( ExternalProject )
5477
# This captures all of the dependencies cmake builds itself
5578
set( rocblas_dependencies )
5679

57-
set( DEVICE_TOOLCHAIN_FILE "" )
58-
if( DEVICE_TOOLCHAIN_NAME STREQUAL "hipcc" )
59-
if( NOT DEFINED HIP_ROOT )
60-
include( cmake/external-hip.cmake )
61-
list( APPEND rocblas_dependencies HIP )
62-
endif( )
80+
set( BASE_CMAKE_ARGS )
81+
82+
# Noramlize the different ways of specifying a c++ compiler through -DCMAKE_CXX_COMPILER
83+
if( DEFINED CMAKE_CXX_COMPILER )
84+
message( STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER} " )
85+
list( APPEND BASE_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} )
86+
elseif( DEFINED ENV{CXX} )
87+
message( STATUS "ENV{CXX}: $ENV{CXX} " )
88+
list( APPEND BASE_CMAKE_ARGS -DCMAKE_CXX_COMPILER=$ENV{CXX} )
89+
endif( )
6390

64-
# configure toolchain file to find the hip compiler with the hip we just downloaded
65-
configure_file( "${PROJECT_SOURCE_DIR}/cmake/${DEVICE_TOOLCHAIN_NAME}-toolchain.cmake.in"
66-
"${PROJECT_BINARY_DIR}/cmake/${DEVICE_TOOLCHAIN_NAME}-toolchain.cmake" )
91+
# Noramlize the different ways of specifying a c compiler through -DCMAKE_C_COMPILER
92+
if( DEFINED CMAKE_C_COMPILER )
93+
message( STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}" )
94+
list( APPEND BASE_CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} )
95+
elseif( DEFINED ENV{CC} )
96+
message( STATUS "ENV{CC}: $ENV{CC} " )
97+
list( APPEND BASE_CMAKE_ARGS -DCMAKE_C_COMPILER=$ENV{CC} )
98+
endif( )
6799

68-
set( DEVICE_TOOLCHAIN_FILE "${PROJECT_BINARY_DIR}/cmake/${DEVICE_TOOLCHAIN_NAME}-toolchain.cmake" )
69-
else( )
70-
set( DEVICE_TOOLCHAIN_FILE "${PROJECT_SOURCE_DIR}/cmake/${DEVICE_TOOLCHAIN_NAME}-toolchain.cmake" )
100+
if( DEFINED CMAKE_CXX_FLAGS )
101+
message( STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS} " )
102+
list( APPEND BASE_CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} )
71103
endif( )
72104

73-
# Default arguments that get passed down into all external projects
74-
set( BASE_CMAKE_ARGS
75-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
76-
-DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}
77-
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
78-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
79-
)
105+
if( DEFINED CMAKE_C_FLAGS )
106+
message( STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}" )
107+
list( APPEND BASE_CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} )
108+
endif( )
80109

81110
# CMAKE_BUILD_TYPE only applies to single configuration build systems
82-
if( NOT CMAKE_CONFIGURATION_TYPES )
83-
list( APPEND BASE_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} )
111+
if( DEFINED CMAKE_BUILD_TYPE )
112+
list( APPEND BASE_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} )
84113
endif( )
85114

115+
if( NOT DEFINED DEVICE_CXX_COMPILER )
116+
find_package( HIP REQUIRED )
117+
set( DEVICE_CXX_COMPILER ${HIP_ROOT_DIR}/bin/hipcc )
118+
endif()
86119

87120
if( BUILD_LIBRARY )
88121
if( BUILD_WITH_TENSILE )
89-
# defines
90-
# Tensile_INCLUDE_DIRS
91-
# TensileLib_LIBRARIES
92-
# TensileLogger_LIBRARIES
93-
94-
include( cmake/external-Tensile.cmake )
95-
list( APPEND rocblas_dependencies Tensile )
96-
message( STATUS "Tensile_ROOT=${Tensile_ROOT}" )
97-
98-
set(TENSILE_CMAKE_ARGS
99-
-DCMAKE_PREFIX_PATH=${Tensile_ROOT}
100-
-DBUILD_WITH_TENSILE=${BUILD_WITH_TENSILE}
101-
)
122+
# defines
123+
# Tensile_INCLUDE_DIRS
124+
# TensileLib_LIBRARIES
125+
# TensileLogger_LIBRARIES
126+
if (Tensile_ROOT)
127+
message(STATUS "Tensile_ROOT=${Tensile_ROOT} specified")
128+
else()
129+
find_package(Tensile QUIET)
130+
if (Tensile_FOUND)
131+
message(STATUS "Tensile package found.")
132+
else()
133+
include(cmake/external-Tensile.cmake )
134+
list( APPEND rocblas_dependencies Tensile )
135+
list( APPEND CMAKE_PREFIX_PATH ${Tensile_ROOT} )
136+
message( STATUS "Tensile not installed; will download to Tensile_ROOT=${Tensile_ROOT}" )
137+
endif()
138+
endif()
102139
endif()
103140

104-
set( LIBRARY_CMAKE_ARGS
105-
${BASE_CMAKE_ARGS}
106-
-DHOST_TOOLCHAIN_FILE=${HOST_TOOLCHAIN_FILE}
107-
-DDEVICE_TOOLCHAIN_FILE=${DEVICE_TOOLCHAIN_FILE}
141+
# WARNING: do not surround CMAKE_PREFIX_PATH with quotes, it breaks
142+
# Replace all occurances of ; with ^^, which we elect to use a path seperator
143+
string(REGEX REPLACE ";" "^^" LIBRARY_PREFIX_PATH "${CMAKE_PREFIX_PATH}" )
144+
string(REGEX REPLACE ";" "^^" LIBRARY_MODULE_PATH "${CMAKE_MODULE_PATH}" )
145+
146+
set( LIBRARY_CMAKE_ARGS
147+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
148+
-DCMAKE_PREFIX_PATH=${LIBRARY_PREFIX_PATH}
149+
-DCMAKE_MODULE_PATH=${LIBRARY_MODULE_PATH}
108150
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
109-
${TENSILE_CMAKE_ARGS}
151+
-DCMAKE_CXX_COMPILER=${DEVICE_CXX_COMPILER}
152+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
153+
-DBUILD_WITH_TENSILE=${BUILD_WITH_TENSILE}
154+
-DTensile_LOGIC=${Tensile_LOGIC}
155+
-DTensile_MERGE_FILES=${Tensile_MERGE_FILES}
156+
-DTensile_SHORT_FILENAMES=${Tensile_SHORT_FILENAMES}
157+
-DTensile_PRINT_DEBUG=${Tensile_PRINT_DEBUG}
158+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
110159
)
160+
if (Tensile_FOUND)
161+
set( LIBRARY_CMAKE_ARGS ${LIBRARY_CMAKE_ARGS} -DTensile_FOUND=${Tensile_FOUND})
162+
else()
163+
set( LIBRARY_CMAKE_ARGS ${LIBRARY_CMAKE_ARGS} -DTensile_ROOT=${Tensile_ROOT})
164+
endif()
111165

112166
# Build the library as an external project
113167
ExternalProject_Add( rocblas
114168
DEPENDS ${rocblas_dependencies}
115169
SOURCE_DIR ${PROJECT_SOURCE_DIR}/library
116170
BINARY_DIR library-build
117171
INSTALL_DIR library-package
172+
LIST_SEPARATOR ^^
118173
CMAKE_ARGS ${LIBRARY_CMAKE_ARGS}
119174
${rocblas_INSTALL_COMMAND}
120175
)
121-
endif()
176+
endif( )
122177

123178
# Build clients of the library
124179
if( BUILD_CLIENTS )
125-
include( clients/cmake/build-options.cmake )
126-
127-
# Default arguments that get passed down into all external projects
128-
set( CLIENTS_CMAKE_ARGS
129-
${BASE_CMAKE_ARGS}
130-
-DBUILD_CLIENTS_SAMPLES=${BUILD_CLIENTS_SAMPLES}
131-
-DBUILD_CLIENTS_BENCHMARKS=${BUILD_CLIENTS_BENCHMARKS}
132-
-DBUILD_CLIENTS_TESTS=${BUILD_CLIENTS_TESTS}
133-
-DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/${HOST_TOOLCHAIN_NAME}-toolchain.cmake
134-
-DDEVICE_TOOLCHAIN_FILE=${DEVICE_TOOLCHAIN_FILE}
135-
)
136-
137-
if( DEFINED BOOST_ROOT )
138-
list( APPEND CLIENTS_CMAKE_ARGS -DBOOST_ROOT=${BOOST_ROOT} )
139-
endif( )
140-
141-
if( BUILD_LIBRARY )
142-
ExternalProject_Get_Property( rocblas install_dir )
143-
list( APPEND CLIENTS_CMAKE_ARGS -DCMAKE_PREFIX_PATH=${install_dir} )
144-
endif( )
145-
146-
# Clients are set up as an external project to take advantage of specifying toolchain files.
147-
# We want cmake to go through it's usual discovery process
180+
include( clients/cmake/build-options.cmake )
181+
182+
if( BUILD_LIBRARY )
183+
ExternalProject_Get_Property( rocblas install_dir )
184+
list( APPEND CMAKE_PREFIX_PATH ${install_dir} )
185+
endif( )
186+
187+
# WARNING: do not surround CMAKE_PREFIX_PATH with quotes, it breaks
188+
# Replace all occurances of ; with ^^, which we elect to use a path seperator
189+
string(REGEX REPLACE ";" "^^" CLIENT_PREFIX_PATH "${CMAKE_PREFIX_PATH}" )
190+
string(REGEX REPLACE ";" "^^" CLIENT_MODULE_PATH "${CMAKE_MODULE_PATH}" )
191+
192+
# Default arguments that get passed down into all external projects
193+
set( CLIENTS_CMAKE_ARGS
194+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
195+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
196+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
197+
-DDEVICE_CXX_COMPILER=${DEVICE_CXX_COMPILER}
198+
-DCMAKE_PREFIX_PATH=${CLIENT_PREFIX_PATH}
199+
-DCMAKE_MODULE_PATH=${CLIENT_MODULE_PATH}
200+
-DBUILD_CLIENTS_SAMPLES=${BUILD_CLIENTS_SAMPLES}
201+
-DBUILD_CLIENTS_BENCHMARKS=${BUILD_CLIENTS_BENCHMARKS}
202+
-DBUILD_CLIENTS_TESTS=${BUILD_CLIENTS_TESTS}
203+
-DBUILD_WITH_TENSILE=${BUILD_WITH_TENSILE}
204+
-DDEVICE_CXX_COMPILER=${DEVICE_CXX_COMPILER}
205+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
206+
207+
)
208+
209+
# Clients are set up as an external project to take advantage of specifying toolchain files.
210+
# We want cmake to go through it's usual discovery process
148211
ExternalProject_Add( rocblas-clients
149212
DEPENDS rocblas
150213
SOURCE_DIR ${PROJECT_SOURCE_DIR}/clients
151214
BINARY_DIR clients-build
152215
INSTALL_DIR clients-package
216+
LIST_SEPARATOR ^^
153217
CMAKE_ARGS ${CLIENTS_CMAKE_ARGS}
154-
INSTALL_COMMAND ""
218+
INSTALL_COMMAND ""
155219
)
156220
endif( )

0 commit comments

Comments
 (0)