Refactored rocm-project to use amd apt-get packages repo

In the docker-compose yaml file, a new target to launch rocm-project
without mapping any volumes is available.  This target only uses the
binary bits availalbe from the amd apt-get repo.  The old targets were
merged into a new one, and now map the built from source bits on top
of the amd apt repo data, hiding it.

License changed to MIT
This commit is contained in:
Kent Knox
2016-04-27 18:21:12 -05:00
parent 24318085b7
commit 3b954c5bbc
5 changed files with 77 additions and 68 deletions

40
LICENSE
View File

@@ -1,27 +1,21 @@
Copyright (c) 2016, Advanced Micro Devices, Inc.
All rights reserved.
The MIT License (MIT)
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Copyright (c) 2016 Advanced Micro Devices, Inc.
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
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:
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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.

View File

@@ -20,12 +20,23 @@ Without explicit parameters, `./roc-setup` default flags are --master && --relea
`./roc-setup` generates Dockerfiles to be consumed by the docker build engine. Each sub-directory of this repository corresponds to a docker 'build context' responsible for a software layer in the ROCm stack. After running the script each directory contains a generated 'Dockerfile'. The parameters to the script control which flavor of the components to build, for instance: debug builds of the /develop branches.
**What are the individual ROCm software components**
| ROC component | |
|-----|-----|
| hcc-isa | the compiler that generates GPU ISA from the backend |
| hcc-hsail | the compiler that generates HSAIL IL from the backend |
| rocr | the runtime |
| roct | the kernel thunk library |
| rocr | the runtime |
| hcc-hsail | the compiler that generates HSAIL IL from the backend |
| hcc-lc | the compiler that generates GPU ISA from the backend |
**What repo branches are built with roc-setup flags**
|| --master | --develop |
|------|-----|-----|
|roct| master | dev |
|rocr| master | dev |
|hcc-hsail| master | develop |
|hcc-lc| testing | master |
The ROCm component that can not be used in a docker image is the ROCK-Kernel-Driver<sup>[1](#ROCK)</sup>. In order for the docker framework to function, **the ROCm kernel must be installed on the host machine.** This is a design constraint of docker; the linux kernel is not resident in the container. All containers share the host linux kernel, so the ROCK-Kernel-Driver component must be installed on the host linux kernel.

View File

@@ -1,3 +1,7 @@
# #################################################
# Copyright (c) 2016 Advanced Micro Devices, Inc.
# #################################################
version: '2'
services:
# The following defines data-only containers
@@ -51,13 +55,24 @@ services:
# The following defines application containers, which depend on the data-only
# containers defiend above to provide their software layers
# These should be run with `docker-compose run --rm <application-service>`
rocm-project-isa:
rocm:
build:
context: ./rocm-project
dockerfile: Dockerfile
devices:
- "/dev/kfd"
image: rocm/rocm-project-isa
image: rocm/rocm
# volumes is used to map host directories into the container
volumes:
- ~:/usr/local/src/host-home
rocm-source:
build:
context: ./rocm-project
dockerfile: Dockerfile
devices:
- "/dev/kfd"
image: rocm/rocm-source
# volumes is used to map host directories into the container
volumes:
- ~:/usr/local/src/host-home
@@ -65,18 +80,4 @@ services:
- roct:ro
- rocr:ro
- hcc-lc:ro
rocm-project-hsail:
build:
context: ./rocm-project
dockerfile: Dockerfile
devices:
- "/dev/kfd"
image: rocm/rocm-project-hsail
# volumes is used to map host directories into the container
volumes:
- ~:/usr/local/src/host-home
volumes_from:
- roct:ro
- rocr:ro
- hcc-hsail:ro

View File

@@ -1,3 +1,6 @@
# #################################################
# Copyright (c) 2016 Advanced Micro Devices, Inc.
# #################################################
#!/usr/bin/env bash
# Set reasonable defaults for dockerfile builds
@@ -65,18 +68,18 @@ while :; do
shift
done
# hcc-hsail does not have a develop branch
export repo_branch_hcc_hsail="master"
# hcc-lc conforms to a non git-flow naming scheme, 'master' changes the most
export repo_branch_hcc_lc=
export repo_branch_hcc_hsail=
export repo_branch=
if [ -n "${build_master}" ]; then
repo_branch="master"
repo_branch_hcc_hsail="master"
repo_branch_hcc_lc="testing"
else
repo_branch="dev"
repo_branch_hcc_hsail="develop"
repo_branch_hcc_lc="master"
fi

View File

@@ -1,37 +1,35 @@
# This is a template dockerfile meant to be personalized for application development.
# This dockerfile meant to be personalized for application development.
# Copy this dockerfile into a new build context (directory) and modify to taste.
# After a new build context is created, build with
# `docker build -t <user-name>/<project-name> .`
# Run the container to start up a development environment. Optionally, map host
# directories into the container with -v for development convenience, which is
# especially nice for source code to persist after the container closes.
# The following maps the host directory into the container 'read only'
# It is recommended to control docker containers through 'docker-compose' https://docs.docker.com/compose/
# Docker compose depends on a .yml file to control container sets
# roc-setup.sh can generate a useful docker-compose .yml file
# `docker-compose run --rm <rocm-project>`
# If running the container manually through the docker command-line, the following is an example
# 'docker run -it --rm -v [host/directory]:[container/directory]:ro <user-name>/<project-name>'.
# Example: 'docker run -it --rm -v ~/src/my-hcc-project:/root/my-hcc-project:ro kknox/my-hcc-project'.
# The application container can inherit from any other OS container
FROM ubuntu:14.04
MAINTAINER Kent Knox <kent.knox@amd>
# Change WORKPATH to a location where
ENV WORKPATH /opt/my-rocm-project
# The working directory is meant to be where build files are generated
WORKDIR ${WORKPATH}
# Default to a login shell
ENTRYPOINT ["/bin/bash"]
CMD ["-l"]
# Initialize the image to install common and recommended dev tools
# Initialize the image to install recommended dev tools and ROCm packages
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y curl
# The following imports a key to the external AMD packages repository to make it trusted
RUN curl -sL http://packages.amd.com/rocm/apt/debian/rocm.gpg.key | apt-key add - && \
sh -c 'echo deb [arch=amd64] http://packages.amd.com/rocm/apt/debian/ trusty main > /etc/apt/sources.list.d/rocm.list'
# Initialize the image to install recommended dev tools and ROCm packages
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
build-essential \
clang-3.5 \
libelf1 \
curl \
rocm \
git \
gdb \
valgrind \
@@ -40,12 +38,14 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# This is meant to be an interactive container; create a non-root user
RUN useradd --create-home --shell /bin/bash rocm-user
USER rocm-user
WORKDIR /home/rocm-user
# The following attempts to create a nice command line developer environment
# 1. Sets up an enhanced command line dev environment within VIM
# 2. Aliases GDB to use its native TUI mode by default
RUN curl https://j.mp/spf13-vim3 -L | bash && \
echo "\nalias gdb='gdb --tui'" >> ~/.bashrc && \
echo "\nsource /opt/roct/setenv-roct.sh" >> ~/.bashrc && \
echo "\nsource /opt/hsa/setenv-rocr.sh" >> ~/.bashrc && \
echo "\nsource /opt/hcc/setenv-hcc.sh" >> ~/.bashrc && \
mkdir -p ${WORKPATH}
RUN curl -sL https://j.mp/spf13-vim3 | bash && \
echo "\n PATH=${PATH}:/opt/rocm/bin\n" >> ~/.bashrc && \
echo "alias gdb='gdb --tui'\n" >> ~/.bashrc