| JensOwen | 95c6227 | 2014-11-01 13:05:43 -0600 | [diff] [blame] | 1 | # Build Instructions |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 2 | This project fully supports Linux today. |
| Mark Lobodzinski | 87220f8 | 2015-08-27 15:30:29 -0600 | [diff] [blame] | 3 | Support for Windows is for the loader, layers, and the VkTrace trace/replay tools. |
| JensOwen | 95c6227 | 2014-11-01 13:05:43 -0600 | [diff] [blame] | 4 | Support for Android is TBD. |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 5 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 6 | ## Git the Bits |
| Courtney Goeltzenleuchter | 47469d9 | 2015-02-13 09:30:42 -0700 | [diff] [blame] | 7 | |
| Dejan Mircevski | 8e672a0 | 2015-08-05 15:17:06 -0400 | [diff] [blame] | 8 | Make sure you have access to the Khronos GitLab repository at gitlab.khronos.org. Once you do, the |
| 9 | preferred work flow is to clone the repo, create a branch, push branch to gitlab and then |
| 10 | issue a merge request to integrate that work back into the repo. |
| Courtney Goeltzenleuchter | 47469d9 | 2015-02-13 09:30:42 -0700 | [diff] [blame] | 11 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 12 | Note: If you are doing ICD (driver) development, please make sure to look at documentation in the [ICD Loader](loader/README.md) and the [Sample Driver](icd). |
| Ian Elliott | a3d5501 | 2015-02-13 10:57:55 -0700 | [diff] [blame] | 13 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 14 | ## Linux System Requirements |
| Courtney Goeltzenleuchter | fc82da6 | 2015-02-05 17:02:39 -0700 | [diff] [blame] | 15 | Ubuntu 14.10 needed for DRI 3 |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 16 | |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 17 | ``` |
| Dejan Mircevski | 8e672a0 | 2015-08-05 15:17:06 -0400 | [diff] [blame] | 18 | sudo apt-get install git subversion cmake libgl1-mesa-dev freeglut3-dev libglm-dev libpng12-dev libmagickwand-dev qt5-default libpciaccess-dev libpthread-stubs0-dev libudev-dev |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 19 | sudo apt-get build-dep mesa |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 20 | ``` |
| Mark Lobodzinski | 87220f8 | 2015-08-27 15:30:29 -0600 | [diff] [blame] | 21 | Warning: Recent versions of 14.10 have **REMOVED** DRI 3. |
| 22 | Version: 2:2.99.914-1~exp1ubuntu4.1 is known to work. |
| Courtney Goeltzenleuchter | fc82da6 | 2015-02-05 17:02:39 -0700 | [diff] [blame] | 23 | To see status of this package: |
| 24 | ``` |
| 25 | dpkg -s xserver-xorg-video-intel |
| 26 | ``` |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 27 | |
| Mark Lobodzinski | 87220f8 | 2015-08-27 15:30:29 -0600 | [diff] [blame] | 28 | Note: |
| 29 | Version 2:2.99.914-1~exp1ubuntu4.2 does not work anymore. |
| 30 | To install the working driver from launchpadlibrarian.net: |
| 31 | - Remove the current driver: |
| Norbert Nopper | 36ccff7 | 2015-02-06 21:06:58 +0100 | [diff] [blame] | 32 | ``` |
| 33 | sudo apt-get purge xserver-xorg-video-intel |
| 34 | ``` |
| Mark Lobodzinski | 87220f8 | 2015-08-27 15:30:29 -0600 | [diff] [blame] | 35 | - Download the old driver: |
| Norbert Nopper | 36ccff7 | 2015-02-06 21:06:58 +0100 | [diff] [blame] | 36 | ``` |
| 37 | wget http://launchpadlibrarian.net/189418339/xserver-xorg-video-intel_2.99.914-1%7Eexp1ubuntu4.1_amd64.deb |
| 38 | ``` |
| 39 | - Install the driver: |
| 40 | ``` |
| 41 | sudo dpkg -i xserver-xorg-video-intel_2.99.914-1~exp1ubuntu4.1_amd64.deb |
| 42 | ``` |
| Mike Stroyan | cd2ab47 | 2015-03-23 17:36:54 -0600 | [diff] [blame] | 43 | - Pin the package to prevent updates |
| 44 | ``` |
| 45 | sudo bash -c "echo $'Package: xserver-xorg-video-intel\nPin: version 2:2.99.914-1~exp1ubuntu4.1\nPin-Priority: 1001' > /etc/apt/preferences.d/xserver-xorg-video-intel" |
| 46 | ``` |
| 47 | |
| Mark Lobodzinski | 87220f8 | 2015-08-27 15:30:29 -0600 | [diff] [blame] | 48 | - Either restart Ubuntu or just X11. |
| 49 | |
| Courtney Goeltzenleuchter | 47469d9 | 2015-02-13 09:30:42 -0700 | [diff] [blame] | 50 | ## Clone the repository |
| 51 | |
| 52 | To create your local git repository: |
| 53 | ``` |
| 54 | mkdir YOUR_DEV_DIRECTORY # it's called GL-Next on Github, but the name doesn't matter |
| 55 | cd YOUR_DEV_DIRECTORY |
| Dejan Mircevski | 8e672a0 | 2015-08-05 15:17:06 -0400 | [diff] [blame] | 56 | git clone -o khronos git@gitlab.khronos.org:vulkan/LoaderAndTools.git . |
| 57 | # Or substitute the URL from your forked repo for git@gitlab.khronos.org:vulkan/LoaderAndTools.git above. |
| Courtney Goeltzenleuchter | 47469d9 | 2015-02-13 09:30:42 -0700 | [diff] [blame] | 58 | ``` |
| 59 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 60 | ## Linux Build |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 61 | |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 62 | The sample driver uses cmake and should work with the usual cmake options and utilities. |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 63 | The standard build process builds the icd, the icd loader and all the tests. |
| 64 | |
| 65 | Example debug build: |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 66 | ``` |
| Courtney Goeltzenleuchter | 9cc421e | 2015-04-08 15:36:08 -0600 | [diff] [blame] | 67 | cd YOUR_DEV_DIRECTORY # cd to the root of the vk git repository |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 68 | export KHRONOS_ACCOUNT_NAME= <subversion login name for svn checkout of BIL> |
| 69 | ./update_external_sources.sh # fetches and builds glslang, llvm, LunarGLASS, and BIL |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 70 | cmake -H. -Bdbuild -DCMAKE_BUILD_TYPE=Debug |
| 71 | cd dbuild |
| 72 | make |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 73 | ``` |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 74 | |
| Ian Elliott | b626af0 | 2015-07-15 09:46:10 -0600 | [diff] [blame] | 75 | To run VK programs you must tell the icd loader where to find the libraries. |
| 76 | This is described in a specification in the Khronos documentation Git |
| 77 | repository. See the file: |
| Peter Gal | 9ba151c | 2015-08-07 13:38:58 +0200 | [diff] [blame] | 78 | https://gitlab.khronos.org/vulkan/vulkan/blob/master/ecosystem/LinuxICDs.txt |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 79 | |
| Ian Elliott | b626af0 | 2015-07-15 09:46:10 -0600 | [diff] [blame] | 80 | This specification describes both how ICDs and layers should be properly |
| 81 | packaged, and how developers can point to ICDs and layers within their builds. |
| 82 | |
| Courtney Goeltzenleuchter | 39af8ef | 2015-01-06 17:32:22 -0700 | [diff] [blame] | 83 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 84 | ## Linux Test |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 85 | |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 86 | The test executibles can be found in the dbuild/tests directory. The tests use the Google |
| Norbert Nopper | 9652dfd | 2015-01-22 20:52:34 +0100 | [diff] [blame] | 87 | gtest infrastructure. Tests available so far: |
| Courtney Goeltzenleuchter | 9cc421e | 2015-04-08 15:36:08 -0600 | [diff] [blame] | 88 | - vkbase: Test basic entry points |
| 89 | - vk_blit_tests: Test VK Blits (copy, clear, and resolve) |
| 90 | - vk_image_tests: Test VK image related calls needed by render_test |
| 91 | - vk_render_tests: Render a single triangle with VK. Triangle will be in a .ppm in |
| Courtney Goeltzenleuchter | b5fdda2 | 2014-09-01 18:05:45 -0600 | [diff] [blame] | 92 | the current directory at the end of the test. |
| Dejan Mircevski | 8e672a0 | 2015-08-05 15:17:06 -0400 | [diff] [blame] | 93 | - vk_layer_validation_tests: Test Vulkan layers. |
| 94 | |
| 95 | There are also a few shell and Python scripts that run test collections (eg, |
| 96 | `run_all_tests.sh`). |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 97 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 98 | ## Linux Demos |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 99 | |
| JensOwen | 95c6227 | 2014-11-01 13:05:43 -0600 | [diff] [blame] | 100 | The demos executables can be found in the dbuild/demos directory. The demos use DRI 3 |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 101 | to render directly onto window surfaces. |
| Dejan Mircevski | 8e672a0 | 2015-08-05 15:17:06 -0400 | [diff] [blame] | 102 | - vulkaninfo: report GPU properties |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 103 | - tri: a textured triangle |
| 104 | - cube: a textured spinning cube |
| 105 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 106 | ## Linux Render Nodes |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 107 | |
| 108 | The render tests depend on access to DRM render nodes. |
| 109 | To make that available, a couple of config files need to be created to set a module option |
| 110 | and make accessible device files. |
| 111 | The system will need to be rebooted with these files in place to complete initialization. |
| 112 | These commands will create the config files. |
| 113 | |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 114 | ``` |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 115 | sudo tee /etc/modprobe.d/drm.conf << EOF |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 116 | # Enable render nodes |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 117 | options drm rnodes=1 |
| 118 | EOF |
| Courtney Goeltzenleuchter | a109944 | 2015-01-07 17:46:53 -0700 | [diff] [blame] | 119 | # this will add the rnodes=1 option into the boot environment |
| 120 | sudo update-initramfs -k all -u |
| JensOwen | 3ceb475 | 2014-11-01 13:18:21 -0600 | [diff] [blame] | 121 | ``` |
| 122 | ``` |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 123 | sudo tee /etc/udev/rules.d/drm.rules << EOF |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 124 | # Add permissions to render nodes |
| Mike Stroyan | a768fc1 | 2014-10-30 15:59:54 -0600 | [diff] [blame] | 125 | SUBSYSTEM=="drm", ACTION=="add", DEVPATH=="/devices/*/renderD*", MODE="020666" |
| 126 | EOF |
| JensOwen | ef27114 | 2014-11-01 13:11:50 -0600 | [diff] [blame] | 127 | ``` |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 128 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 129 | ## Windows System Requirements |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 130 | |
| Ian Elliott | 8ebc355 | 2015-07-08 15:43:03 -0600 | [diff] [blame] | 131 | Windows 7+ with additional required software packages: |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 132 | |
| 133 | - Microsoft Visual Studio 2013 Professional. Note: it is possible that lesser/older versions may work, but that has not been tested. |
| Ian Elliott | 40fb02f | 2015-03-06 11:37:07 -0700 | [diff] [blame] | 134 | - CMake (from http://www.cmake.org/download/). Notes: |
| Mark Lobodzinski | 87220f8 | 2015-08-27 15:30:29 -0600 | [diff] [blame] | 135 | - In order to build the VkTrace tools, you need at least version 3.0. |
| Ian Elliott | 40fb02f | 2015-03-06 11:37:07 -0700 | [diff] [blame] | 136 | - Tell the installer to "Add CMake to the system PATH" environment variable. |
| 137 | - Python 3 (from https://www.python.org/downloads). Notes: |
| 138 | - Select to install the optional sub-package to add Python to the system PATH environment variable. |
| Mark Lobodzinski | 87220f8 | 2015-08-27 15:30:29 -0600 | [diff] [blame] | 139 | - Need python3.3 or later to get the Windows py.exe launcher that is used to get python3 rather than python2 if both are installed on Windows |
| Ian Elliott | 3ef2dfd | 2015-07-08 14:33:52 -0600 | [diff] [blame] | 140 | - Git (from http://git-scm.com/download/win). |
| 141 | - Note: If you use Cygwin, you can normally use Cygwin's "git.exe". However, in order to use the "update_external_sources.bat" script, you must have this version. |
| 142 | - Tell the installer to allow it to be used for "Developer Prompt" as well as "Git Bash". |
| 143 | - Tell the installer to treat line endings "as is" (i.e. both DOS and Unix-style line endings). |
| 144 | - Image Magick is used by the tests to compare images (from http://www.imagemagick.org/script/binary-releases.php) |
| 145 | - Be sure to check box to "Install development headers and libraries" |
| 146 | - glslang is required for demos and tests. |
| 147 | - You can download and configure it (in a peer directory) here: https://github.com/KhronosGroup/glslang/blob/master/README.md |
| 148 | - A windows batch file has been included that will pull and build the correct version. Run it from Developer Command Prompt for VS2013 like so: |
| 149 | - update_external_sources.bat --build-glslang |
| 150 | |
| Ian Elliott | 8ebc355 | 2015-07-08 15:43:03 -0600 | [diff] [blame] | 151 | Optional software packages: |
| 152 | |
| Ian Elliott | 8ebc355 | 2015-07-08 15:43:03 -0600 | [diff] [blame] | 153 | - Cygwin (from https://www.cygwin.com/). Notes: |
| 154 | - Cygwin provides some Linux-like tools, which are valuable for obtaining the source code, and running CMake. |
| 155 | Especially valuable are the BASH shell and git packages. |
| 156 | - If you don't want to use Cygwin, there are other shells and environments that can be used. |
| 157 | You can also use a Git package that doesn't come from Cygwin. |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 158 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 159 | ## Windows Build |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 160 | |
| 161 | Cygwin is used in order to obtain a local copy of the Git repository, and to run the CMake command that creates Visual Studio files. Visual Studio is used to build the software, and will re-run CMake as appropriate. |
| 162 | |
| Ian Elliott | 8ebc355 | 2015-07-08 15:43:03 -0600 | [diff] [blame] | 163 | Example debug build (e.g. in a "Developer Command Prompt for VS2013" window): |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 164 | ``` |
| Ian Elliott | 8ebc355 | 2015-07-08 15:43:03 -0600 | [diff] [blame] | 165 | cd LoaderAndTools # cd to the root of the Vulkan git repository |
| 166 | update_external_sources.bat --build-glslang |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 167 | mkdir _out64 |
| 168 | cd _out64 |
| David Pinedo | 8e9cb3b | 2015-02-10 15:02:08 -0700 | [diff] [blame] | 169 | cmake -G "Visual Studio 12 Win64" -DCMAKE_BUILD_TYPE=Debug .. |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 170 | ``` |
| 171 | |
| Cody Northrop | 043ea22 | 2015-05-26 15:51:12 -0400 | [diff] [blame] | 172 | At this point, you can use Windows Explorer to launch Visual Studio by double-clicking on the "VULKAN.sln" file in the \_out64 folder. Once Visual Studio comes up, you can select "Debug" or "Release" from a drop-down list. You can start a build with either the menu (Build->Build Solution), or a keyboard shortcut (Ctrl+Shift+B). As part of the build process, Python scripts will create additional Visual Studio files and projects, along with additional source files. All of these auto-generated files are under the "_out64" folder. |
| Ian Elliott | 40e7dd9 | 2015-02-05 12:22:51 -0700 | [diff] [blame] | 173 | |
| Courtney Goeltzenleuchter | 9cc421e | 2015-04-08 15:36:08 -0600 | [diff] [blame] | 174 | VK programs must be able to find and use the VK.dll libary. Make sure it is either installed in the C:\Windows\System32 folder, or the PATH enviroment variable includes the folder that it is located in. |
| David Pinedo | 8e9cb3b | 2015-02-10 15:02:08 -0700 | [diff] [blame] | 175 | |
| Ian Elliott | b626af0 | 2015-07-15 09:46:10 -0600 | [diff] [blame] | 176 | To run VK programs you must tell the icd loader where to find the libraries. |
| 177 | This is described in a specification in the Khronos documentation Git |
| 178 | repository. See the file: |
| Peter Gal | 9ba151c | 2015-08-07 13:38:58 +0200 | [diff] [blame] | 179 | https://gitlab.khronos.org/vulkan/vulkan/blob/master/ecosystem/WindowsICDs.txt |
| Ian Elliott | 225188f | 2015-02-17 10:33:47 -0700 | [diff] [blame] | 180 | |
| Ian Elliott | b626af0 | 2015-07-15 09:46:10 -0600 | [diff] [blame] | 181 | This specification describes both how ICDs and layers should be properly |
| 182 | packaged, and how developers can point to ICDs and layers within their builds. |