Skip to content

Commit 366b2b4

Browse files
Auto-fetch missing dependencies (#42)
* 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
1 parent 6e89fdf commit 366b2b4

File tree

40 files changed

+1277
-1009
lines changed

40 files changed

+1277
-1009
lines changed

.github/workflows/presubmit.yml

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ jobs:
1515
run: ./scripts/check-format.sh
1616
build:
1717
needs: format
18-
name: Build ${{ matrix.os }} ${{ matrix.compiler }}
18+
name: Build ${{ matrix.os }} ${{ matrix.compiler }} ${{ matrix.deps }}
1919
runs-on: ${{ matrix.os }}
2020
strategy:
2121
matrix:
2222
os: [ubuntu-20.04, macos-latest]
2323
compiler: [gcc, clang]
24+
deps: [os, fetch, vcpkg]
2425
steps:
2526
- uses: actions/checkout@v2
2627
with:
@@ -30,7 +31,19 @@ jobs:
3031
run: |
3132
if [[ "${{ matrix.os }}" == "ubuntu-20.04" ]]; then
3233
sudo apt update
33-
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
34+
sudo apt install -y libidn11 libx11-dev libxrandr-dev libxi-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libudev-dev \
35+
`if [[ "${{matrix.deps}}" == "os" ]]; then echo libtclap-dev libglm-dev libglew-dev libsfml-dev libstb-dev; fi;`
36+
if [[ "${{matrix.deps}}" == "vcpkg" ]]; then
37+
git clone https://github.com/Microsoft/vcpkg.git
38+
./vcpkg/bootstrap-vcpkg.sh
39+
./vcpkg/vcpkg install sfml tclap glm glew stb
40+
TOOLCHAIN_ARG="-D CMAKE_TOOLCHAIN_FILE=./vcpkg/scripts/buildsystems/vcpkg.cmake"
41+
else
42+
TOOLCHAIN_ARG=""
43+
fi
44+
if [[ "${{matrix.deps}}" == "fetch" ]]; then
45+
sudo apt remove -y libtclap-dev libglm-dev libglew-dev libsfml-dev libstb-dev libfreetype6-dev
46+
fi
3447
elif [[ "${{ matrix.os }}" == "macos-latest" ]]; then
3548
brew install tclap glm glew sfml mesa-glu
3649
git clone https://github.com/Microsoft/vcpkg.git
@@ -45,24 +58,47 @@ jobs:
4558
CC=clang
4659
CXX=clang++
4760
fi
48-
cmake -D CMAKE_C_COMPILER=$CC -D CMAKE_CXX_COMPILER=$CXX $TOOLCHAIN_ARG -S . -B build
49-
cmake --build ./build --verbose --parallel 2
61+
cmake \
62+
-D CMAKE_C_COMPILER=$CC \
63+
-D CMAKE_CXX_COMPILER=$CXX \
64+
$TOOLCHAIN_ARG \
65+
-S . -B build
66+
cmake \
67+
--build ./build \
68+
--verbose \
69+
--parallel `numproc`
5070
buildwin:
5171
needs: format
52-
name: Build Windows
72+
name: Build Windows ${{ matrix.deps }}
5373
runs-on: windows-latest
74+
strategy:
75+
matrix:
76+
deps: [fetch, vcpkg]
5477
steps:
5578
- uses: actions/checkout@v2
5679
with:
5780
fetch-depth: 0
5881
submodules: recursive
5982
- name: Build
83+
shell: pwsh
6084
run: |
61-
git clone https://github.com/Microsoft/vcpkg.git
62-
.\vcpkg\bootstrap-vcpkg.bat
63-
.\vcpkg\vcpkg.exe --triplet=x64-windows install sfml tclap glm glew stb
64-
cmake -D CMAKE_TOOLCHAIN_FILE=.\vcpkg\scripts\buildsystems\vcpkg.cmake -S . -B build
65-
cmake --build ./build -- /verbosity:minimal /maxCpuCount /noLogo
85+
if ('${{ matrix.deps }}' -eq 'vcpkg') {
86+
git clone https://github.com/Microsoft/vcpkg.git
87+
.\vcpkg\bootstrap-vcpkg.bat
88+
.\vcpkg\vcpkg.exe --triplet=x64-windows install sfml tclap glm glew stb
89+
$TOOLCHAIN_ARG='-D CMAKE_TOOLCHAIN_FILE=.\vcpkg\scripts\buildsystems\vcpkg.cmake'
90+
} else {
91+
$TOOLCHAIN_ARG=''
92+
}
93+
cmake `
94+
$TOOLCHAIN_ARG `
95+
-S . -B build
96+
cmake `
97+
--build ./build `
98+
-- `
99+
/verbosity:minimal `
100+
/maxCpuCount `
101+
/noLogo
66102
67103
python:
68104
name: Exercise Python examples on ${{matrix.os}}
@@ -112,7 +148,7 @@ jobs:
112148
fetch-depth: 0
113149
submodules: recursive
114150
- name: Install Ruby and POCL
115-
run: sudo apt install pocl-opencl-icd
151+
run: sudo apt update; sudo apt install pocl-opencl-icd
116152
if: ${{ matrix.os == 'ubuntu-latest' }}
117153
- name: Install OpenCL Ruby Bindings and RuboCop
118154
run: gem install --user-install opencl_ruby_ffi rubocop

CMakeLists.txt

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,31 +42,11 @@ add_subdirectory(external/OpenCL-Headers)
4242
add_subdirectory(external/OpenCL-ICD-Loader)
4343
add_subdirectory(external/OpenCL-CLHPP)
4444

45-
if(OPENCL_SDK_BUILD_SAMPLES)
46-
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
47-
add_subdirectory(third_party/cargs)
48-
find_package(TCLAP REQUIRED)
49-
find_package(Stb REQUIRED)
50-
if(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
51-
cmake_minimum_required(VERSION 3.10) # SFML 2 won't find Freetype::Freetype under 3.10
52-
find_package(OpenGL REQUIRED)
53-
if(CMAKE_SYSTEM_NAME MATCHES Linux) # TODO: Add EGL support
54-
# OpenGL doesn't explicitly depend on X11 (as of CMake v3.2) but we'll need it
55-
find_package(X11 REQUIRED)
56-
endif()
57-
find_package(GLEW REQUIRED)
58-
if(NOT TARGET OpenGL::GLU)
59-
# GLU is a dependency of GLEW but it's not advertized as an OpenGL COMPONENT
60-
message(FATAL_ERROR "GLEW depends on GLU but was not found.")
61-
endif()
62-
find_package(SFML 2
63-
REQUIRED
64-
COMPONENTS window graphics
65-
)
66-
find_package(GLEW REQUIRED)
67-
find_package(glm CONFIG REQUIRED)
68-
endif(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
69-
endif(OPENCL_SDK_BUILD_SAMPLES)
45+
list(APPEND CMAKE_MODULE_PATH
46+
${PROJECT_SOURCE_DIR}/cmake
47+
${PROJECT_SOURCE_DIR}/cmake/Modules
48+
)
49+
include(Dependencies)
7050

7151
add_subdirectory(lib)
7252
if(OPENCL_SDK_BUILD_SAMPLES)

cmake/Dependencies.cmake

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
if(OPENCL_SDK_BUILD_SAMPLES)
2+
foreach(DEP IN ITEMS cargs TCLAP Stb)
3+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Dependencies/${DEP}")
4+
include(${DEP})
5+
endforeach()
6+
7+
if(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
8+
foreach(DEP IN ITEMS X11 glm OpenGL GLEW Freetype SFML)
9+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Dependencies/${DEP}")
10+
include(${DEP})
11+
endforeach()
12+
endif(OPENCL_SDK_BUILD_OPENGL_SAMPLES)
13+
endif(OPENCL_SDK_BUILD_SAMPLES)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
if(NOT DEPENDENCIES_FORCE_DOWNLOAD AND NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/_deps/freetype-external-src")
2+
find_package(Freetype)
3+
endif()
4+
5+
if(NOT (Freetype_FOUND OR TARGET freetype))
6+
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/_deps/freetype-external-src")
7+
if(DEPENDENCIES_FORCE_DOWNLOAD)
8+
message(STATUS "DEPENDENCIES_FORCE_DOWNLOAD is ON. Fetching FreeType.")
9+
else()
10+
message(STATUS "Fetching FreeType.")
11+
endif()
12+
message(STATUS "Adding FreeType subproject: ${CMAKE_CURRENT_BINARY_DIR}/_deps/freetype-external-src")
13+
endif()
14+
cmake_minimum_required(VERSION 3.11)
15+
include(FetchContent)
16+
set(SKIP_INSTALL_HEADERS ON CACHE BOOL "Skip installing FreeType headers")
17+
FetchContent_Declare(
18+
freetype-external
19+
GIT_REPOSITORY https://github.com/freetype/freetype.git
20+
GIT_TAG VER-2-11-1 # 3f83daeecb1a78d851b660eed025eeba362c0e4a
21+
)
22+
FetchContent_MakeAvailable(freetype-external)
23+
set_target_properties(freetype
24+
PROPERTIES
25+
POSITION_INDEPENDENT_CODE ON
26+
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}"
27+
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
28+
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
29+
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
30+
FOLDER "Dependencies"
31+
)
32+
endif()

0 commit comments

Comments
 (0)