From afd12b7bdcd63bf4d8d669d6e06a368a0954b6e3 Mon Sep 17 00:00:00 2001 From: Karl Schultz Date: Wed, 30 May 2018 16:43:14 -0600 Subject: [PATCH] build: Add CMake files for install target --- .gitignore | 2 +- BUILD.md | 184 +++++++++++++++++++++++++++++++++++++++++ CMakeLists.txt | 20 +++++ README.md | 1 + cmake/cmake_uninstall.cmake.in | 21 +++++ 5 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 BUILD.md create mode 100644 CMakeLists.txt create mode 100644 cmake/cmake_uninstall.cmake.in diff --git a/.gitignore b/.gitignore index c4e1519..cc044d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ # Python cache __pycache__ *.pyc - +build diff --git a/BUILD.md b/BUILD.md new file mode 100644 index 0000000..e4d2821 --- /dev/null +++ b/BUILD.md @@ -0,0 +1,184 @@ +# Build Instructions + +Instructions for building this repository on Windows, Linux, and MacOS. + +Since this repository doesn't contain any build targets for libraries +or executables, there usually isn't any need to "build" this repository. +However, `install` and `uninstall` targets are provided if you have a need to +install the Vulkan headers and registry files to system directories +or other location for use by other repositories. + +## Index + +1. [Contributing](#contributing-to-the-repository) +2. [Repository Set-Up](#repository-set-up) +3. [Installed Files](#installed-files) +4. [Windows Build](#building-on-windows) +5. [Linux Build](#building-on-linux) +6. [MacOS build](#building-on-macos) + +## Contributing to the Repository + +The contents of this repository are sourced primarily from the +[Khronos Vulkan API specification repository](https://github.com/KhronosGroup/Vulkan-Docs). +Please visit that repository for information on contributing. + +## Repository Set-Up + +### Download the Repository + +To create your local git repository: + + git clone https://github.com/KhronosGroup/Vulkan-Headers.git + +## Installed Files + +The `install` target installs the following files under the directory +indicated by "install_dir": + +- `install_dir/include/vulkan` : The header files found in the + `include/vulkan` directory of this repository +- `install_dir/share/vulkan/registry` : The registry files found in the + `registry` directory of this repository + +## Building On Windows + +### Windows Build Requirements + +Windows 7+ with the following software packages: + +- Microsoft Visual Studio 2013 Update 4 Professional, VS2015 (any version), or VS2017 (any version). +- [CMake](http://www.cmake.org/download/) + - Tell the installer to "Add CMake to the system PATH" environment variable. +- [Git](http://git-scm.com/download/win) + - Tell the installer to allow it to be used for "Developer Prompt" as well as "Git Bash". + - Tell the installer to treat line endings "as is" (i.e. both DOS and Unix-style line endings). + - Install both the 32-bit and 64-bit versions, as the 64-bit installer does not install the + 32-bit libraries and tools. + +### Windows Build - Microsoft Visual Studio + +The general approach is to run `cmake` to generate the VS project files. +Then either run `cmake` again to build from the command line or use the +Visual Studio IDE to open the generated solution and work with the solution +interactively. + +It should be possible to perform these `cmake` invocations from any one of the Windows +"terminal programs", including the standard Windows Command Prompt, MSBuild Command Prompt, +PowerShell, MINGW, CygWin, etc. + +#### Use `cmake` to create the VS project files + +Switch to the top of the cloned repository directory, +create a build directory and generate the VS project files: + + cd Vulkan-Headers + mkdir build + cd build + cmake .. + +The default install directory location is `$CMAKE_BINARY_DIR\install`, +which is your `Vulkan-Headers\build\install` directory. + +This default setting sets the install destination to +`Vulkan-Headers\build\install` +and causes the header files to be installed to +`Vulkan-Headers\build\install\include/vulkan` +and the registry files to be installed to +`Vulkan-Headers\build\install\share\vulkan\registry`. + +The install location can be changed with the `CMAKE_INSTALL_PREFIX` variable. + +For example: + + cd Vulkan-Headers + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=/c/Users/dev/install .. # MINGW64 shell + +As it starts generating the project files, `cmake` responds with something like: + + -- Building for: Visual Studio 14 2015 + +which is a 32-bit generator. + +Since this repository does not compile anything, there is no need +to specify a specific generator such as "Visual Studio 14 2015 Win64", +so the default generator should suffice. + +This creates a Windows solution file named `Vulkan-Headers.sln` +in the build directory. + +At this point, you can build the solution from the command line or open the +generated solution with Visual Studio. + +#### Build the solution from the command line + +While still in the build directory: + + cmake --build . --target install + +to build the install target. + +Build the `uninstall` target to remove the files from the install location. + + cmake --build . --target uninstall + +#### Build the solution with Visual Studio + +Launch Visual Studio and open the "Vulkan-Headers.sln" solution file in the build folder. +Build the `INSTALL` target from the Visual Studio solution explorer. + +Build the `uninstall` target to remove the files from the install location. + + cmake --build . --target uninstall + +## Building On Linux + +### Linux Build Requirements + +There are no specific Linux distribution or compiler +verison requirements for building this repository. + +### Linux Build + +Switch to the top of the cloned repository directory, +create a build directory and generate the make files: + + cd Vulkan-Headers + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=install .. + +Set the `CMAKE_INSTALL_PREFIX` variable to the directory to serve as the +destination directory for the `install` target. +The above setting sets the install destination to +`Vulkan-Headers/build/install` +which causes the header files to be installed to +`Vulkan-Headers/build/install/include/vulkan` +and the registry files to be installed to +`Vulkan-Headers/build/install/share/vulkan/registry` + +For Linux, the default value for `CMAKE_INSTALL_PREFIX` is `/usr/local`, +which would be used if you do not specify `CMAKE_INSTALL_PREFIX`. +In this case, you may need to use `sudo` to install to system directories +later when you run `make install`. + +Note that after generating the make files, running `make`: + + make + +does nothing, since there are no libraries or executables to build. + +To install the header files: + + make install + +To uninstall the files from the install directories, you can execute: + + make uninstall + +## Building on MacOS + +The instructions for installing the headers for MacOS are the +same as those for Linux. diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4cd8911 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 2.8.11) + +project(Vulkan-Headers NONE) + +include(GNUInstallDirs) +# Set a better default install location for Windows only if the user did not provide one. +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32) + set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "default install path" FORCE) +endif() + +install(DIRECTORY "${CMAKE_SOURCE_DIR}/include/vulkan" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(DIRECTORY "${CMAKE_SOURCE_DIR}/registry" DESTINATION ${CMAKE_INSTALL_DATADIR}/vulkan) + +# uninstall target +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) +add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) diff --git a/README.md b/README.md index c828666..e9661fe 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # Vulkan-Headers + Vulkan Header files and API registry diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in new file mode 100644 index 0000000..2037e36 --- /dev/null +++ b/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,21 @@ +if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") +endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif(NOT "${rm_retval}" STREQUAL 0) + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") +endforeach(file) -- 2.7.4