Update the ROCt CMakeList.txt files to build both runtime and devel packages.

Change-Id: I01b6e4e5db91dd5f56ffea54c548e10f1f4aae5d
This commit is contained in:
James Edwards
2017-07-18 13:33:30 -05:00
committed by JamesAdrian Edwards
parent c48ff6b482
commit a1353acd85
5 changed files with 139 additions and 180 deletions
+45 -33
View File
@@ -25,23 +25,24 @@
cmake_minimum_required ( VERSION 3.5.0 )
set ( HSAKMT_NAME "hsakmt" )
set ( HSAKMT_COMPONENT "lib${HSAKMT_NAME}" )
set ( HSAKMT_TARGET "${HSAKMT_NAME}" )
set ( HSAKMT "hsakmt" )
set ( HSAKMT_PACKAGE "hsakmt-roct" )
set ( HSAKMT_COMPONENT "lib${HSAKMT}" )
set ( HSAKMT_TARGET "${HSAKMT}" )
project ( ${HSAKMT_TARGET} )
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" )
## Include common cmake modules
include ( utils )
## Get the package version. The defaults to 1.0.0.
## Setup the package version.
get_version ( "1.0.0" )
set ( BUILD_VERSION_MAJOR ${VERSION_MAJOR} )
set ( BUILD_VERSION_MINOR ${VERSION_MINOR} )
set ( BUILD_VERSION_PATCH ${VERSION_PATCH} )
set ( LIB_VERSION_STRING "${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}.${BUILD_VERSION_PATCH}" )
if ( DEFINED VERSION_BUILD AND NOT ${VERSION_BUILD} STREQUAL "" )
message ( "VERSION BUILD DEFINED ${VERSION_BUILD}" )
set ( BUILD_VERSION_PATCH "${BUILD_VERSION_PATCH}-${VERSION_BUILD}" )
@@ -57,22 +58,22 @@ set ( CMAKE_C_FLAGS "-fPIC -W -Wall -Wextra -Werror -Wno-unused-parameter -Wform
set ( HSAKMT_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/src/libhsakmt.ver" )
## Linker Flags
set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.$(VERSION_MAJOR) -Wl,-z,nodelete" )
set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.$(PROJECT_VERSION_MAJOR) -Wl,-z,nodelete" )
## Source files
set ( HSAKMT_SRC ${HSAKMT_SRC} src/debug.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/events.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/fmm.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/globals.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/libhsakmt.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/memory.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/openclose.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/perfctr.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/pmc_table.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/queues.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/time.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/topology.c )
set ( HSAKMT_SRC ${HSAKMT_SRC} src/version.c )
set ( HSAKMT_SRC "src/debug.c"
"src/events.c"
"src/fmm.c"
"src/globals.c"
"src/libhsakmt.c"
"src/memory.c"
"src/openclose.c"
"src/perfctr.c"
"src/pmc_table.c"
"src/queues.c"
"src/time.c"
"src/topology.c"
"src/version.c")
## Include paths
include_directories ( ${CMAKE_CURRENT_SOURCE_DIR}/include )
@@ -94,28 +95,39 @@ if ( "${CMAKE_BUILD_TYPE}" STREQUAL Release )
add_custom_command ( TARGET ${HSAKMT_TARGET} POST_BUILD COMMAND ${CMAKE_STRIP} ${HSAKMT_COMPONENT}.so )
endif ()
## Create symlinks for packaging and install
add_custom_target ( ${HSAKMT_COMPONENT} ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink ../${HSAKMT_COMPONENT}/include/${HSAKMT_COMPONENT} ${HSAKMT_COMPONENT}-link )
add_custom_target ( ${HSAKMT_COMPONENT}.so-link ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink ../${HSAKMT_COMPONENT}/lib/${HSAKMT_COMPONENT}.so ${HSAKMT_COMPONENT}.so-link )
## Define default variable and variables for the optional build target hsakmt-dev
set ( SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "Location of hsakmt source code." )
set ( CMAKE_INSTALL_PREFIX "/opt/rocm" CACHE STRING "Default installation directory." )
set ( CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm" CACHE STRING "Default packaging prefix." )
set ( CPACK_GENERATOR "DEB;RPM" CACHE STRING "Default packaging generators." )
## Set the install targets
## Specify build, install and package targets hsakmt-dev
set ( DEV_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/hsakmt-roct-dev )
configure_file ( hsakmt-dev.txt ${DEV_BUILD_DIR}/CMakeLists.txt @ONLY )
add_custom_target ( build-dev
COMMAND ${CMAKE_COMMAND}
-DSOURCE_DIR="${SOURCE_DIR}"
-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}"
-DCPACK_PACKAGING_INSTALL_PREFIX="${CPACK_PACKAGING_INSTALL_PREFIX}"
COMMAND rm -rf *.deb *.rpm *.tar.gz
COMMAND make package
WORKING_DIRECTORY ${DEV_BUILD_DIR} )
## Remember to remove the 'ALL' dependency and the package-copy target in final version
add_custom_target ( install-dev ALL DEPENDS build-dev COMMAND make install WORKING_DIRECTORY ${DEV_BUILD_DIR} )
add_custom_target ( package-dev ALL DEPENDS install-dev COMMAND make package WORKING_DIRECTORY ${DEV_BUILD_DIR} )
add_custom_target ( package-copy ALL DEPENDS package-dev COMMAND ${CMAKE_COMMAND} -E copy hsakmt-roct-dev-* .. WORKING_DIRECTORY ${DEV_BUILD_DIR} )
## Add the install directives for the runtime library.
install ( TARGETS ${HSAKMT_TARGET} LIBRARY DESTINATION libhsakmt/lib COMPONENT ${HSAKMT_COMPONENT} )
install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md DESTINATION libhsakmt )
install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/hsakmt.h DESTINATION libhsakmt/include/libhsakmt )
install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/hsakmttypes.h DESTINATION libhsakmt/include/libhsakmt )
install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/linux/kfd_ioctl.h DESTINATION libhsakmt/include/libhsakmt/linux )
install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/${HSAKMT_COMPONENT}-link DESTINATION include RENAME ${HSAKMT_COMPONENT} )
install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/${HSAKMT_COMPONENT}.so-link DESTINATION lib RENAME ${HSAKMT_COMPONENT}.so )
## Packaging directives
set ( CPACK_PACKAGE_NAME "hsakmt-roct-dev" )
## Add the packaging directives for the runtime library.
set ( CPACK_PACKAGE_NAME ${HSAKMT_PACKAGE} )
set ( CPACK_PACKAGE_VENDOR "AMD" )
set ( CPACK_PACKAGE_VERSION_MAJOR ${BUILD_VERSION_MAJOR} )
set ( CPACK_PACKAGE_VERSION_MINOR ${BUILD_VERSION_MINOR} )
set ( CPACK_PACKAGE_VERSION_PATCH ${BUILD_VERSION_PATCH} )
set ( CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc." )
set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "HSAKMT library for AMD KFD support" )
set ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" )
# Debian package specific variables
set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface" )
-18
View File
@@ -1,18 +0,0 @@
.PHONY: all clean lnx64a lnx
all: lnx64a
deb:
$(MAKE) -C src deb
rpm:
$(MAKE) -C src rpm
lnx64a:
$(MAKE) -C src lnx64a
lnx:
$(MAKE) -C src lnx
clean:
$(MAKE) -C src clean
+19 -13
View File
@@ -1,26 +1,32 @@
### Boltzmann Thunk Library
### ROCt Library
This repository includes the user-mode API interfaces used to interact with the Boltzmann KFD driver. Currently supported agents include only the AMD/ATI Fiji family of discrete GPUs.
This repository includes the user-mode API interfaces used to interact with the ROCk driver. Currently supported agents include only the AMD/ATI Fiji family of discrete GPUs.
#### Boltzmann Kernel Driver
#### ROCk Driver
The thunk is not a standalone product and requires that you have the correct KFD installed. We recommend reading the full compatibility and installation details which are available in the ROCK github:
https://github.com/RadeonOpenCompute/ROCK-Radeon-Open-Compute-Kernel-Driver
The ROCt library is not a standalone product and requires that you have the correct ROCk driver set installed. We recommend reading the full compatibility and installation details which are available in the ROCk github:
#### Binaries for Ubuntu and Fedora
For deb and rpm binaries, please check the packages/ folder in the ROCK repository:
https://github.com/RadeonOpenCompute/ROCK-Radeon-Open-Compute-Kernel-Driver
#### Building the Thunk
A simple make-based system is available for building thunk. The following are the supported targets:
A simple cmake-based system is available for building thunk. To build the runtime from the the ROCT-Thunk-Interface directory, execute:
```bash
mkdir -p build
cd build
cmake ..
make
make deb
make rpm
make clean
```
If the hsakmt-roct and hsakmt-roct-dev packages are desired:
```bash
mkdir -p build
cd build
cmake ..
make package
make package-dev
```
#### Disclaimer
@@ -29,4 +35,4 @@ The information contained herein is for informational purposes only, and is subj
AMD, the AMD Arrow logo, and combinations thereof are trademarks of Advanced Micro Devices, Inc. Other product names used in this publication are for identification purposes only and may be trademarks of their respective companies.
Copyright (c) 2014-2016 Advanced Micro Devices, Inc. All rights reserved.
Copyright (c) 2014-2017 Advanced Micro Devices, Inc. All rights reserved.
+75
View File
@@ -0,0 +1,75 @@
################################################################################
##
## Copyright (c) 2016 Advanced Micro Devices, Inc. All rights reserved.
##
## MIT LICENSE:
## Permission is hereby granted, free of charge, to any person obtaining a copy of
## this software and associated documentation files (the "Software"), to deal in
## the Software without restriction, including without limitation the rights to
## use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
## of the Software, and to permit persons to whom the Software is furnished to do
## so, subject to the following conditions:
##
## The above copyright notice and this permission notice shall be included in all
## copies or substantial portions of the Software.
##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
## SOFTWARE.
##
################################################################################
cmake_minimum_required ( VERSION 3.5.0 )
set ( HSAKMT_DEV_PACKAGE "hsakmt-roct-dev" )
project ( ${HSAKMT_DEV_PACKAGE} )
## Set the runtime package name.
set ( HSAKMT_PACKAGE @HSAKMT_PACKAGE@ )
## Setup the package version.
set ( BUILD_VERSION_MAJOR @BUILD_VERSION_MAJOR@ )
set ( BUILD_VERSION_MINOR @BUILD_VERSION_MINOR@ )
set ( BUILD_VERSION_PATCH @BUILD_VERSION_PATCH@ )
## Verbose output.
set ( CMAKE_VERBOSE_MAKEFILE on )
## Create symlinks for packaging and install
add_custom_target ( ${HSAKMT_DEV_PACKAGE} ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink ../libhsakmt/include/libhsakmt libhsakmt-link )
add_custom_target ( ${HSAKMT_COMPONENT}.so-link ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink ../libhsakmt/lib/libhsakmt.so libhsakmt.so-link )
## Set the install targets
install ( FILES ${SOURCE_DIR}/LICENSE.md DESTINATION libhsakmt )
install ( FILES ${SOURCE_DIR}/include/hsakmt.h DESTINATION libhsakmt/include/libhsakmt )
install ( FILES ${SOURCE_DIR}/include/hsakmttypes.h DESTINATION libhsakmt/include/libhsakmt )
install ( FILES ${SOURCE_DIR}/include/linux/kfd_ioctl.h DESTINATION libhsakmt/include/libhsakmt/linux )
install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/libhsakmt-link DESTINATION include RENAME libhsakmt )
install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/libhsakmt.so-link DESTINATION lib RENAME libhsakmt.so )
## Set the default generator types for the devel package.
set ( CPACK_GENERATOR "DEB;RPM;TGZ" CACHE STRING "Default packaging generators." )
## Packaging directives
set ( CPACK_PACKAGE_NAME ${HSAKMT_DEV_PACKAGE} )
set ( CPACK_PACKAGE_VENDOR "AMD" )
set ( CPACK_PACKAGE_VERSION_MAJOR ${BUILD_VERSION_MAJOR} )
set ( CPACK_PACKAGE_VERSION_MINOR ${BUILD_VERSION_MINOR} )
set ( CPACK_PACKAGE_VERSION_PATCH ${BUILD_VERSION_PATCH} )
set ( CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc." )
set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "HSAKMT development package." )
set ( CPACK_RESOURCE_FILE_LICENSE "${SOURCE_DIR}/LICENSE.md" )
# Debian package specific variables
set ( CPACK_DEBIAN_PACKAGE_DEPENDS "${HSAKMT_PACKAGE} (=${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}.${BUILD_VERSION_PATCH})" )
set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface" )
# RPM package specific variables
set ( CPACK_RPM_PACKAGE_DEPENDS "${HSAKMT_PACKAGE} = ${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}.${BUILD_VERSION_PATCH}" )
include ( CPack )
-116
View File
@@ -1,116 +0,0 @@
# Our directory
THUNK_ROOT ?= $(abspath ../)
# Include directories
INCLUDE_DIR := ../include
INCLUDES += $(INCLUDE_DIR)
CFLAGS += $(foreach DIR,$(INCLUDES),-I$(DIR))
LIB_NAME = libhsakmt.so
LIB_MAJOR_VER = 1
PACKAGE_MAJOR_VER = 2
PACKAGE_MINOR_VER = 0
PACKAGE_PATCH_VER ?= 0
PACKAGE_VER = $(PACKAGE_MAJOR_VER).$(PACKAGE_MINOR_VER).$(PACKAGE_PATCH_VER)
export PACKAGE_VER
DEB_BUILD_ARCH = $(shell dpkg --print-architecture | sed 's/ \*$i//g')
# Compiler options
CFLAGS += -fPIC # Position-independent code required to build shared library
CFLAGS += -W -Wall -Wextra -Werror -Wno-unused-parameter
CFLAGS += -Wformat-security -Wswitch-default -Wundef \
-Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual \
-Wlogical-op -Wstrict-prototypes -Wmissing-prototypes \
-Wmissing-declarations -Wredundant-decls \
-Wunreachable-code
CFLAGS += -std=gnu99 -pthread -fvisibility=hidden -O2
# If this is not a release build, add debug-specific flags
ifneq ($(REL),1)
CFLAGS += -ggdb
endif
LDFLAGS += -lrt -pthread -lpci -Wl,--version-script=libhsakmt.ver -Wl,-soname=$(LIB_NAME).$(LIB_MAJOR_VER) -Wl,-z,nodelete
OBJS = debug.o globals.o memory.o perfctr.o time.o version.o \
events.o openclose.o queues.o topology.o fmm.o pmc_table.o \
libhsakmt.o
.PHONY: all lnx lnx64a clean
# Default target
all: lnx64a
# To relocate build output, set "O=target/dir/"
# otherwise it defaults to a local directory
ifdef O
BUILD_ROOT := $(O)
else
BUILD_ROOT := ../build
endif
BUILD_ROOT := $(abspath $(BUILD_ROOT))
BUILDDIR = $(BUILD_ROOT)/$(MAKECMDGOALS)
TARGET = $(addprefix $(BUILDDIR)/,$(OBJS))
$(BUILDDIR)/$(LIB_NAME).$(LIB_MAJOR_VER): $(TARGET)
gcc -shared -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/$(LIB_NAME): $(BUILDDIR)/$(LIB_NAME).$(LIB_MAJOR_VER)
@ln -sf $(LIB_NAME).$(LIB_MAJOR_VER) $(BUILDDIR)/$(LIB_NAME)
lnx: CFLAGS += -m32
lnx: LDFLAGS += -m32
lnx: $(BUILDDIR)/$(LIB_NAME)
PACKAGE_DIR = $(BUILDDIR)/libhsakmt
DEBIAN_DIR = ../DEBIAN
LDCONF_FILE = $(DEBIAN_DIR)/x86_64-libhsakmt.conf
LDCONF_INSTALL_DIR = $(PACKAGE_DIR)/etc/ld.so.conf.d
ROCM_ROOT = $(PACKAGE_DIR)/opt/rocm
ROCM_LIB = $(ROCM_ROOT)/lib
ROCM_INCLUDE = $(ROCM_ROOT)/include
INSTALL_LIB_DIR = libhsakmt/lib
INSTALL_INCLUDE_DIR = libhsakmt/include/libhsakmt
export PACKAGE_DIR
package-common: lnx64a
@mkdir -p $(PACKAGE_DIR)
@mkdir -p $(LDCONF_INSTALL_DIR)
@cp -r $(LDCONF_FILE) $(LDCONF_INSTALL_DIR)
@mkdir -p $(ROCM_ROOT)/$(INSTALL_LIB_DIR)
@cp $(BUILDDIR)/$(LIB_NAME).$(LIB_MAJOR_VER) $(ROCM_ROOT)/$(INSTALL_LIB_DIR)
@mkdir -p $(ROCM_ROOT)/$(INSTALL_INCLUDE_DIR)
@cp -r $(INCLUDE_DIR)/* $(ROCM_ROOT)/$(INSTALL_INCLUDE_DIR)
@mkdir -p $(ROCM_LIB)
@ln -fs ../$(INSTALL_LIB_DIR)/$(LIB_NAME).$(LIB_MAJOR_VER) $(ROCM_LIB)/$(LIB_NAME)
@mkdir -p $(ROCM_INCLUDE)
ln -fs ../$(INSTALL_INCLUDE_DIR) $(ROCM_INCLUDE)/
deb: package-common
@mkdir -p $(PACKAGE_DIR)/DEBIAN
@sed 's/\$$version/$(PACKAGE_VER)/g;s/\$$arch/$(DEB_BUILD_ARCH)/g' $(DEBIAN_DIR)/control > $(PACKAGE_DIR)/DEBIAN/control
@fakeroot dpkg-deb --build $(PACKAGE_DIR) \
$(BUILDDIR)/hsakmt-dev-$(PACKAGE_VER)-${DEB_BUILD_ARCH}.deb
rpm: package-common
@rpmbuild --define '_topdir $(BUILD_ROOT)/rpm' -ba $(THUNK_ROOT)/RPM/libhsakmt.spec
lnx64a: $(BUILDDIR)/$(LIB_NAME)
clean:
rm -rf $(BUILD_ROOT)
#Rule
$(BUILDDIR)/%.o: %.c ../include/hsakmt.h ../include/hsakmttypes.h ../include/linux/kfd_ioctl.h
@echo Compiling $^
@mkdir -p $(dir $@)
gcc $(CFLAGS) -c $< -o $@