@@ -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)
1718endif ()
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
2235project ( rocblas-superbuild NONE )
2336
2437# Everything is initially off, so that cache is not initialized until user elects to build
2538option ( BUILD_LIBRARY "Build rocBLAS library" OFF )
2639option ( 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
3056option ( 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} )
3962set ( 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.
4669if ( 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 )
4972endif ()
5073
@@ -54,103 +77,144 @@ include( ExternalProject )
5477# This captures all of the dependencies cmake builds itself
5578set ( 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} )
71103endif ( )
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} )
84113endif ( )
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
87120if ( 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
124179if ( 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 )
156220endif ( )
0 commit comments