2021-03-22 20:03:37 -04:00
|
|
|
cmake_minimum_required(VERSION 3.6)
|
|
|
|
include(ExternalProject)
|
|
|
|
|
|
|
|
if(NOT TRITON_LLVM_BUILD_DIR)
|
|
|
|
set(TRITON_LLVM_BUILD_DIR ${CMAKE_BINARY_DIR})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
2021-07-27 12:38:38 -07:00
|
|
|
project(triton)
|
|
|
|
include(CTest)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
|
|
|
|
# Options
|
2021-01-29 17:27:16 -05:00
|
|
|
option(BUILD_TUTORIALS "Build C++ Triton tutorials" ON)
|
2021-07-27 12:38:38 -07:00
|
|
|
option(BUILD_PYTHON_MODULE "Build Python Triton bindings" OFF)
|
|
|
|
|
|
|
|
# Default build type
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
|
|
message(STATUS "Default build type: Release")
|
|
|
|
set(CMAKE_BUILD_TYPE "Release")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Compiler flags
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
2021-04-20 22:29:40 -04:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_FORMAT_MACROS -fvisibility=default -std=gnu++17")
|
2021-07-27 12:38:38 -07:00
|
|
|
|
2021-03-22 20:03:37 -04:00
|
|
|
|
|
|
|
|
|
|
|
##########
|
|
|
|
# LLVM
|
|
|
|
##########
|
|
|
|
get_cmake_property(_variableNames VARIABLES)
|
|
|
|
set(__variableNames ${_variableNames})
|
|
|
|
|
|
|
|
configure_file(cmake/DownloadLLVM.in ${TRITON_LLVM_BUILD_DIR}/llvm-download/CMakeLists.txt)
|
|
|
|
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
|
|
|
|
WORKING_DIRECTORY "${TRITON_LLVM_BUILD_DIR}/llvm-download"
|
|
|
|
)
|
|
|
|
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
|
|
|
|
WORKING_DIRECTORY "${TRITON_LLVM_BUILD_DIR}/llvm-download"
|
|
|
|
)
|
|
|
|
set(LLVM_TARGETS_TO_BUILD "NVPTX" CACHE INTERNAL "")
|
|
|
|
set(LLVM_BUILD_RUNTIME "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_BUILD_RUNTIMES "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_BUILD_TOOLS "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_BUILD_UTILS "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_BENCHMARKS "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_DOCS "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_EXAMPLES "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_GO_TESTS "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_RUNTIME "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_TESTS "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_TOOLS "OFF" CACHE INTERNAL "")
|
|
|
|
set(LLVM_INCLUDE_UTILS "OFF" CACHE INTERNAL "")
|
|
|
|
add_subdirectory(${TRITON_LLVM_BUILD_DIR}/llvm-src
|
|
|
|
${TRITON_LLVM_BUILD_DIR}/llvm-build)
|
|
|
|
get_property(LLVM_LIBRARIES GLOBAL PROPERTY LLVM_COMPONENT_LIBS)
|
|
|
|
# remove LLVM-specific variables so we don't pollute GUI
|
|
|
|
get_cmake_property(_variableNames VARIABLES)
|
|
|
|
list(REMOVE_ITEM _variableNames ${__variableNames})
|
|
|
|
list(REMOVE_ITEM _variableNames ${LLVM_LIBRARIES})
|
|
|
|
foreach (_variableName ${_variableNames})
|
|
|
|
unset(${_variableName} CACHE)
|
|
|
|
endforeach()
|
|
|
|
include_directories("${TRITON_LLVM_BUILD_DIR}/llvm-build/include/"
|
|
|
|
"${TRITON_LLVM_BUILD_DIR}/llvm-src/include/")
|
2021-07-27 12:38:38 -07:00
|
|
|
|
|
|
|
# Python module
|
|
|
|
if(BUILD_PYTHON_MODULE)
|
|
|
|
message(STATUS "Adding Python module")
|
2021-03-09 16:32:44 -05:00
|
|
|
# Build CUTLASS python wrapper if requested
|
2021-03-22 20:03:37 -04:00
|
|
|
set(PYTHON_SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/python/src)
|
2021-03-09 16:32:44 -05:00
|
|
|
set(CUTLASS_INCLUDE_DIR "$ENV{CUTLASS_INCLUDE_DIR}")
|
|
|
|
set(CUTLASS_LIBRARY_DIR "$ENV{CUTLASS_LIBRARY_DIR}")
|
|
|
|
if(NOT("${CUTLASS_INCLUDE_DIR}" STREQUAL "") AND NOT("${CUTLASS_LIBRARY_DIR}" STREQUAL ""))
|
2021-03-22 20:03:37 -04:00
|
|
|
set(CUTLASS_SRC ${PYTHON_SRC_PATH}/cutlass.cc)
|
2021-03-09 16:32:44 -05:00
|
|
|
add_definitions(-DWITH_CUTLASS_BINDINGS)
|
2021-03-14 18:49:59 -04:00
|
|
|
set(CUTLASS_LIBRARIES "cutlass.a")
|
2021-03-09 16:32:44 -05:00
|
|
|
endif()
|
|
|
|
message(STATUS ${CUTLASS_INCLUDE_PATH})
|
2021-03-22 20:03:37 -04:00
|
|
|
include_directories("." ${PYTHON_SRC_PATH} ${PYTHON_INCLUDE_DIRS} ${CUTLASS_INCLUDE_DIR})
|
2021-03-09 16:32:44 -05:00
|
|
|
link_directories(${PYTHON_LINK_DIRS} ${CUTLASS_LIBRARY_DIR})
|
2021-03-22 20:03:37 -04:00
|
|
|
set(PYTHON_SRC ${PYTHON_SRC_PATH}/main.cc ${PYTHON_SRC_PATH}/triton.cc ${PYTHON_SRC_PATH}/superblock.cc ${CUTLASS_SRC})
|
2021-07-27 12:38:38 -07:00
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# Triton
|
|
|
|
file(GLOB_RECURSE LIBTRITON_SRC lib/*.cc)
|
|
|
|
add_library(triton SHARED ${LIBTRITON_SRC} ${PYTHON_SRC})
|
2021-03-22 20:03:37 -04:00
|
|
|
target_link_libraries(triton ${LLVM_LIBRARIES})
|
2021-07-27 12:38:38 -07:00
|
|
|
|
2020-08-11 20:10:39 -04:00
|
|
|
if(BUILD_PYTHON_MODULE)
|
2021-03-09 16:32:44 -05:00
|
|
|
target_link_libraries(triton ${TORCH_LIBRARIES} ${CUTLASS_LIBRARIES})
|
2020-08-11 20:10:39 -04:00
|
|
|
endif()
|