Skip to content

Commit

Permalink
Auto-fetch missing dependencies (KhronosGroup#42)
Browse files Browse the repository at this point in the history
* Fix Ruby CI

CI script testing Ruby samples occasionally fails because it doesn't
apt update before installing

* Add dependency handling to CI

* Bump submodule hashes

* Add dependency fetch infrastructure

* Fix SDK lib exports

* Fix missing includes

* Fix conversion warnings

* Backport GLM usage to Ubuntu 18.04
  • Loading branch information
MathiasMagnus authored Mar 29, 2022
1 parent 6e89fdf commit 366b2b4
Show file tree
Hide file tree
Showing 40 changed files with 1,277 additions and 1,009 deletions.
58 changes: 47 additions & 11 deletions .github/workflows/presubmit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@ jobs:
run: ./scripts/check-format.sh
build:
needs: format
name: Build ${{ matrix.os }} ${{ matrix.compiler }}
name: Build ${{ matrix.os }} ${{ matrix.compiler }} ${{ matrix.deps }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-20.04, macos-latest]
compiler: [gcc, clang]
deps: [os, fetch, vcpkg]
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -30,7 +31,19 @@ jobs:
run: |
if [[ "${{ matrix.os }}" == "ubuntu-20.04" ]]; then
sudo apt update
sudo apt install -y libtclap-dev libglm-dev libglew-dev libsfml-dev libstb-dev libidn11 libx11-dev libxrandr-dev libxi-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libudev-dev
sudo apt install -y libidn11 libx11-dev libxrandr-dev libxi-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libudev-dev \
`if [[ "${{matrix.deps}}" == "os" ]]; then echo libtclap-dev libglm-dev libglew-dev libsfml-dev libstb-dev; fi;`
if [[ "${{matrix.deps}}" == "vcpkg" ]]; then
git clone https://github.com/Microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh
./vcpkg/vcpkg install sfml tclap glm glew stb
TOOLCHAIN_ARG="-D CMAKE_TOOLCHAIN_FILE=./vcpkg/scripts/buildsystems/vcpkg.cmake"
else
TOOLCHAIN_ARG=""
fi
if [[ "${{matrix.deps}}" == "fetch" ]]; then
sudo apt remove -y libtclap-dev libglm-dev libglew-dev libsfml-dev libstb-dev libfreetype6-dev
fi
elif [[ "${{ matrix.os }}" == "macos-latest" ]]; then
brew install tclap glm glew sfml mesa-glu
git clone https://github.com/Microsoft/vcpkg.git
Expand All @@ -45,24 +58,47 @@ jobs:
CC=clang
CXX=clang++
fi
cmake -D CMAKE_C_COMPILER=$CC -D CMAKE_CXX_COMPILER=$CXX $TOOLCHAIN_ARG -S . -B build
cmake --build ./build --verbose --parallel 2
cmake \
-D CMAKE_C_COMPILER=$CC \
-D CMAKE_CXX_COMPILER=$CXX \
$TOOLCHAIN_ARG \
-S . -B build
cmake \
--build ./build \
--verbose \
--parallel `numproc`
buildwin:
needs: format
name: Build Windows
name: Build Windows ${{ matrix.deps }}
runs-on: windows-latest
strategy:
matrix:
deps: [fetch, vcpkg]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: recursive
- name: Build
shell: pwsh
run: |
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
.\vcpkg\vcpkg.exe --triplet=x64-windows install sfml tclap glm glew stb
cmake -D CMAKE_TOOLCHAIN_FILE=.\vcpkg\scripts\buildsystems\vcpkg.cmake -S . -B build
cmake --build ./build -- /verbosity:minimal /maxCpuCount /noLogo
if ('${{ matrix.deps }}' -eq 'vcpkg') {
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
.\vcpkg\vcpkg.exe --triplet=x64-windows install sfml tclap glm glew stb
$TOOLCHAIN_ARG='-D CMAKE_TOOLCHAIN_FILE=.\vcpkg\scripts\buildsystems\vcpkg.cmake'
} else {
$TOOLCHAIN_ARG=''
}
cmake `
$TOOLCHAIN_ARG `
-S . -B build
cmake `
--build ./build `
-- `
/verbosity:minimal `
/maxCpuCount `
/noLogo
python:
name: Exercise Python examples on ${{matrix.os}}
Expand Down Expand Up @@ -112,7 +148,7 @@ jobs:
fetch-depth: 0
submodules: recursive
- name: Install Ruby and POCL
run: sudo apt install pocl-opencl-icd
run: sudo apt update; sudo apt install pocl-opencl-icd
if: ${{ matrix.os == 'ubuntu-latest' }}
- name: Install OpenCL Ruby Bindings and RuboCop
run: gem install --user-install opencl_ruby_ffi rubocop
Expand Down
30 changes: 5 additions & 25 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,31 +42,11 @@ add_subdirectory(external/OpenCL-Headers)
add_subdirectory(external/OpenCL-ICD-Loader)
add_subdirectory(external/OpenCL-CLHPP)

if(OPENCL_SDK_BUILD_SAMPLES)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
add_subdirectory(third_party/cargs)
find_package(TCLAP REQUIRED)
find_package(Stb REQUIRED)
if(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
cmake_minimum_required(VERSION 3.10) # SFML 2 won't find Freetype::Freetype under 3.10
find_package(OpenGL REQUIRED)
if(CMAKE_SYSTEM_NAME MATCHES Linux) # TODO: Add EGL support
# OpenGL doesn't explicitly depend on X11 (as of CMake v3.2) but we'll need it
find_package(X11 REQUIRED)
endif()
find_package(GLEW REQUIRED)
if(NOT TARGET OpenGL::GLU)
# GLU is a dependency of GLEW but it's not advertized as an OpenGL COMPONENT
message(FATAL_ERROR "GLEW depends on GLU but was not found.")
endif()
find_package(SFML 2
REQUIRED
COMPONENTS window graphics
)
find_package(GLEW REQUIRED)
find_package(glm CONFIG REQUIRED)
endif(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
endif(OPENCL_SDK_BUILD_SAMPLES)
list(APPEND CMAKE_MODULE_PATH
${PROJECT_SOURCE_DIR}/cmake
${PROJECT_SOURCE_DIR}/cmake/Modules
)
include(Dependencies)

add_subdirectory(lib)
if(OPENCL_SDK_BUILD_SAMPLES)
Expand Down
13 changes: 13 additions & 0 deletions cmake/Dependencies.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
if(OPENCL_SDK_BUILD_SAMPLES)
foreach(DEP IN ITEMS cargs TCLAP Stb)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Dependencies/${DEP}")
include(${DEP})
endforeach()

if(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
foreach(DEP IN ITEMS X11 glm OpenGL GLEW Freetype SFML)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Dependencies/${DEP}")
include(${DEP})
endforeach()
endif(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
endif(OPENCL_SDK_BUILD_SAMPLES)
32 changes: 32 additions & 0 deletions cmake/Dependencies/Freetype/Freetype.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
if(NOT DEPENDENCIES_FORCE_DOWNLOAD AND NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/_deps/freetype-external-src")
find_package(Freetype)
endif()

if(NOT (Freetype_FOUND OR TARGET freetype))
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/_deps/freetype-external-src")
if(DEPENDENCIES_FORCE_DOWNLOAD)
message(STATUS "DEPENDENCIES_FORCE_DOWNLOAD is ON. Fetching FreeType.")
else()
message(STATUS "Fetching FreeType.")
endif()
message(STATUS "Adding FreeType subproject: ${CMAKE_CURRENT_BINARY_DIR}/_deps/freetype-external-src")
endif()
cmake_minimum_required(VERSION 3.11)
include(FetchContent)
set(SKIP_INSTALL_HEADERS ON CACHE BOOL "Skip installing FreeType headers")
FetchContent_Declare(
freetype-external
GIT_REPOSITORY https://github.com/freetype/freetype.git
GIT_TAG VER-2-11-1 # 3f83daeecb1a78d851b660eed025eeba362c0e4a
)
FetchContent_MakeAvailable(freetype-external)
set_target_properties(freetype
PROPERTIES
POSITION_INDEPENDENT_CODE ON
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}"
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
FOLDER "Dependencies"
)
endif()
Loading

0 comments on commit 366b2b4

Please sign in to comment.