Skip to content

Commit 86fb85e

Browse files
committed
Add cmake superbuild for embree deps
1 parent 515904d commit 86fb85e

File tree

4 files changed

+331
-1
lines changed

4 files changed

+331
-1
lines changed

.github/workflows/public.continuous.yml

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,32 @@ jobs:
6868
run: |
6969
cmake --preset public-gcc-tbb -DEMBREE_TESTING_INTENSITY=3
7070
cmake --build build --target build
71-
cmake --build build --target test_package
71+
cmake --build build --target test_package
72+
73+
74+
ubuntu-24_04-superbuild:
75+
runs-on: ubuntu-latest
76+
container:
77+
image: ubuntu:24.04
78+
steps:
79+
- name: Install packages (ubuntu 24.04)
80+
run: |
81+
apt-get update
82+
apt-get -y upgrade
83+
apt-get -y install g++ python3 git-lfs freeglut3-dev libglfw3-dev libxmu-dev libxi-dev unzip xorg-dev pip
84+
apt-get -y install libtinfo5
85+
apt-get -y install libopenimageio-dev
86+
pip install --upgrade cmake
87+
cmake --version
88+
89+
- name: Checkout Repository
90+
uses: actions/checkout@v4
91+
92+
- name: Build and Run
93+
run: |
94+
mkdir build
95+
cd build
96+
cmake -DEMBREE_EXTRA_OPTIONS="-DBUILD_TESTING=ON -DEMBREE_TUTORIALS=ON -DEMBREE_ISPC_SUPPORT=ON -DEMBREE_TESTING_INTENSITY=3" ../superbuild
97+
cmake --build .
98+
cd embree/build
99+
ctest

superbuild/CMakeLists.txt

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
## Copyright 2025 Intel Corporation
2+
## SPDX-License-Identifier: Apache-2.0
3+
4+
## Global settings ##
5+
6+
cmake_minimum_required(VERSION 3.1)
7+
8+
set(CMAKE_MODULE_PATH
9+
${CMAKE_MODULE_PATH}
10+
${CMAKE_CURRENT_SOURCE_DIR}/dependencies
11+
)
12+
13+
if(NOT CMAKE_INSTALL_PREFIX)
14+
set(CMAKE_INSTALL_PREFIX
15+
"${CMAKE_BINARY_DIR}/install"
16+
CACHE STRING "Final install location." FORCE)
17+
endif()
18+
19+
if (NOT CMAKE_BUILD_TYPE)
20+
set(CMAKE_BUILD_TYPE Release)
21+
endif()
22+
23+
## ======================================================================== ##
24+
## Project setup.
25+
## ======================================================================== ##
26+
27+
project(Embree_superbuild)
28+
29+
include(ExternalProject)
30+
include(GNUInstallDirs)
31+
include(ProcessorCount)
32+
33+
## Setup top-level variables ##
34+
35+
set(installDir ${CMAKE_INSTALL_PREFIX})
36+
37+
get_filename_component(INSTALL_DIR_ABSOLUTE
38+
${installDir} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_BINARY_DIR})
39+
40+
ProcessorCount(PROCESSOR_COUNT)
41+
42+
if(NOT PROCESSOR_COUNT EQUAL 0)
43+
set(BUILD_JOBS ${PROCESSOR_COUNT} CACHE STRING "Number of build jobs '-j <n>'")
44+
else()
45+
set(BUILD_JOBS 4 CACHE STRING "Number of build jobs '-j <n>'")
46+
endif()
47+
48+
if (${CMAKE_VERSION} VERSION_GREATER 3.11.4)
49+
set(PARALLEL_JOBS_OPTS -j ${BUILD_JOBS})
50+
endif()
51+
52+
set(DEFAULT_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release ${PARALLEL_JOBS_OPTS})
53+
54+
# We must replace separators so that ExternalProject_Add can work with the
55+
# paths we generate.
56+
macro(add_to_prefix_path PATH)
57+
list(APPEND CMAKE_PREFIX_PATH ${PATH})
58+
string(REPLACE ";" "|" CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}")
59+
endmacro()
60+
61+
## ======================================================================== ##
62+
## Superbuild options.
63+
## ======================================================================== ##
64+
65+
option(INSTALL_IN_SEPARATE_DIRECTORIES
66+
"Install libraries into their own directories under CMAKE_INSTALL_PREFIX"
67+
OFF
68+
)
69+
70+
option(BUILD_DEPENDENCIES_ONLY
71+
"Do not build Embree itself, only its dependencies"
72+
OFF
73+
)
74+
75+
## ======================================================================== ##
76+
## Build dependencies.
77+
##
78+
## Use the BUILD_* options to enable or disable building in superbuild. If
79+
## These options are OFF, then required dependencies must be available in the
80+
## environment.
81+
##
82+
## For most of the dependencies, you may override the *_URL and *_HASH
83+
## variables to select different versions.
84+
## ======================================================================== ##
85+
86+
option(BUILD_ISPC "Build the Intel SPMD Program Compiler or search in environment?" ON)
87+
if (BUILD_ISPC)
88+
set(ISPC_VERSION "1.28.2")
89+
set(ISPC_BASE_URL "https://github.com/ispc/ispc/releases/download/v${ISPC_VERSION}")
90+
if (APPLE)
91+
set(_ISPC_URL "${ISPC_BASE_URL}/ispc-v${ISPC_VERSION}-macOS.universal.tar.gz")
92+
set(_ISPC_HASH "9c5893cbb5fd0b04cf5109a027bcbe8f8ca54bc8f7eaf468ce0bc13a9b0e06bd")
93+
elseif(WIN32)
94+
set(_ISPC_URL "${ISPC_BASE_URL}/ispc-v${ISPC_VERSION}-windows.zip")
95+
set(_ISPC_HASH "709350902381968ee58fd67e9aed63df99b1313bc55a94195977bcc8d90bdced")
96+
else()
97+
set(_ISPC_URL "${ISPC_BASE_URL}/ispc-v${ISPC_VERSION}-linux.tar.gz")
98+
set(_ISPC_HASH "fc31f53f77a67cb5b465727b70af7d6cde8f38012c4ca0f1678b174a955cb5a8")
99+
endif()
100+
set(ISPC_URL "${_ISPC_URL}" CACHE STRING "URL of the ISPC archive.")
101+
set(ISPC_HASH "${_ISPC_HASH}" CACHE STRING "SHA256 hash of the ISPC archive.")
102+
include(dep_ispc)
103+
endif()
104+
105+
option(BUILD_TBB "Build Intel Threading Building Blocks or search in environment?" ON)
106+
option(BUILD_TBB_FROM_SOURCE "Build Intel Threading Building Blocks from source or use pre-built version?" OFF)
107+
if (BUILD_TBB)
108+
set(TBB_VERSION "2022.3.0" CACHE STRING "TBB version to download")
109+
if (BUILD_TBB_FROM_SOURCE)
110+
if (TBB_VERSION VERSION_LESS 2021)
111+
message(FATAL_ERROR "Only TBB 2021 and later are supported when building TBB from source")
112+
endif()
113+
114+
string(REGEX REPLACE "(^[0-9]+\.[0-9]+\.[0-9]+$)" "v\\1" TBB_ARCHIVE ${TBB_VERSION})
115+
set(_TBB_URL "https://github.com/oneapi-src/oneTBB/archive/refs/tags/${TBB_ARCHIVE}.zip")
116+
set(_TBB_HASH "2f0bfce641d238e80798fc48397d43821bd977d49c4e03bc785be363b7ab4742")
117+
else()
118+
if (TBB_VERSION VERSION_LESS 2021)
119+
set(TBB_BASE_URL "https://github.com/oneapi-src/oneTBB/releases/download/v${TBB_VERSION}/tbb-${TBB_VERSION}")
120+
else()
121+
set(TBB_BASE_URL "https://github.com/oneapi-src/oneTBB/releases/download/v${TBB_VERSION}/oneapi-tbb-${TBB_VERSION}")
122+
endif()
123+
if (APPLE)
124+
set(_TBB_URL "${TBB_BASE_URL}-mac.tgz")
125+
set(_TBB_HASH "f9f9369e956bd1cb1efbe6eab400291970e55fad1f3ae2a33bc96d991882ed38")
126+
set(TBB_LIB_SUBDIR "")
127+
elseif(WIN32)
128+
set(_TBB_URL "${TBB_BASE_URL}-win.zip")
129+
set(_TBB_HASH "e1b2373f25558bf47d16b4c89cf0a31e6689aaf7221400d209e8527afc7c9eee")
130+
set(TBB_LIB_SUBDIR "intel64/vc14")
131+
else()
132+
set(_TBB_URL "${TBB_BASE_URL}-lin.tgz")
133+
set(_TBB_HASH "7be34b376c9bdba9afe1ebacaf94ed6dc15af8377d73b539ec932f141195f6ec")
134+
set(TBB_LIB_SUBDIR "intel64/gcc4.8")
135+
endif()
136+
endif()
137+
set(TBB_URL "${_TBB_URL}" CACHE STRING "URL of the TBB archive.")
138+
set(TBB_HASH "${_TBB_HASH}" CACHE STRING "SHA256 hash of the TBB archive.")
139+
include(dep_tbb)
140+
endif()
141+
142+
143+
## ======================================================================== ##
144+
## Build Embree
145+
## ======================================================================== ##
146+
147+
set(COMPONENT_NAME embree)
148+
149+
set(COMPONENT_PATH ${INSTALL_DIR_ABSOLUTE})
150+
if (INSTALL_IN_SEPARATE_DIRECTORIES)
151+
set(COMPONENT_PATH ${INSTALL_DIR_ABSOLUTE}/${COMPONENT_NAME})
152+
endif()
153+
154+
if (NOT BUILD_DEPENDENCIES_ONLY)
155+
# needed to support multiple CMake options provided in a single quoted string
156+
separate_arguments(EMBREE_EXTRA_OPTIONS UNIX_COMMAND "${EMBREE_EXTRA_OPTIONS}")
157+
158+
ExternalProject_Add(embree
159+
PREFIX embree
160+
DOWNLOAD_COMMAND ""
161+
STAMP_DIR embree/stamp
162+
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..
163+
BINARY_DIR embree/build
164+
LIST_SEPARATOR | # CMAKE_PREFIX_PATH uses alternate separator.
165+
CMAKE_ARGS
166+
-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}
167+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
168+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
169+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
170+
-DCMAKE_INSTALL_PREFIX=${COMPONENT_PATH}
171+
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}
172+
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
173+
-DCMAKE_INSTALL_DOCDIR=${CMAKE_INSTALL_DOCDIR}
174+
-DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}
175+
$<$<BOOL:${BUILD_ISPC}>:-DEMBREE_ISPC_EXECUTABLE=${ISPC_PATH}>
176+
$<$<BOOL:${BUILD_TBB}>:-DEMBREE_TBB_ROOT=${TBB_PATH}>
177+
${EMBREE_EXTRA_OPTIONS}
178+
BUILD_COMMAND ${DEFAULT_BUILD_COMMAND}
179+
BUILD_ALWAYS OFF
180+
)
181+
182+
ExternalProject_Add_StepDependencies(embree
183+
configure
184+
$<$<BOOL:${BUILD_ISPC}>:ispc>
185+
$<$<BOOL:${BUILD_TBB}>:tbb>
186+
)
187+
endif()
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## Copyright 2019 Intel Corporation
2+
## SPDX-License-Identifier: Apache-2.0
3+
4+
set(COMPONENT_NAME ispc)
5+
6+
set(COMPONENT_PATH ${INSTALL_DIR_ABSOLUTE})
7+
if (INSTALL_IN_SEPARATE_DIRECTORIES)
8+
set(COMPONENT_PATH ${INSTALL_DIR_ABSOLUTE}/${COMPONENT_NAME})
9+
endif()
10+
11+
ExternalProject_Add(${COMPONENT_NAME}
12+
PREFIX ${COMPONENT_NAME}
13+
STAMP_DIR ${COMPONENT_NAME}/stamp
14+
URL ${ISPC_URL}
15+
URL_HASH SHA256=${ISPC_HASH}
16+
CONFIGURE_COMMAND ""
17+
BUILD_COMMAND ""
18+
INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_if_different
19+
<SOURCE_DIR>/bin/ispc${CMAKE_EXECUTABLE_SUFFIX}
20+
${COMPONENT_PATH}/bin/ispc${CMAKE_EXECUTABLE_SUFFIX}
21+
BUILD_ALWAYS OFF
22+
)
23+
24+
set(ISPC_PATH "${COMPONENT_PATH}/bin/ispc${CMAKE_EXECUTABLE_SUFFIX}")
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
## Copyright 2019 Intel Corporation
2+
## SPDX-License-Identifier: Apache-2.0
3+
4+
set(COMPONENT_NAME tbb)
5+
6+
set(COMPONENT_PATH ${INSTALL_DIR_ABSOLUTE})
7+
if (INSTALL_IN_SEPARATE_DIRECTORIES)
8+
set(COMPONENT_PATH ${INSTALL_DIR_ABSOLUTE}/${COMPONENT_NAME})
9+
endif()
10+
11+
set(TBB_HASH_ARGS "")
12+
if (NOT "${TBB_HASH}" STREQUAL "")
13+
set(TBB_HASH_ARGS URL_HASH SHA256=${TBB_HASH})
14+
endif()
15+
16+
if (BUILD_TBB_FROM_SOURCE)
17+
ExternalProject_Add(${COMPONENT_NAME}
18+
PREFIX ${COMPONENT_NAME}
19+
DOWNLOAD_DIR ${COMPONENT_NAME}
20+
STAMP_DIR ${COMPONENT_NAME}/stamp
21+
SOURCE_DIR ${COMPONENT_NAME}/src
22+
BINARY_DIR ${COMPONENT_NAME}/build
23+
LIST_SEPARATOR | # Use the alternate list separator
24+
URL ${TBB_URL}
25+
${TBB_HASH_ARGS}
26+
CMAKE_ARGS
27+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
28+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
29+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
30+
-DCMAKE_INSTALL_PREFIX:PATH=${COMPONENT_PATH}
31+
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}
32+
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
33+
-DCMAKE_INSTALL_DOCDIR=${CMAKE_INSTALL_DOCDIR}
34+
-DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}
35+
-DCMAKE_BUILD_TYPE=${DEPENDENCIES_BUILD_TYPE}
36+
-DTBB_TEST=OFF
37+
-DTBB_STRICT=OFF
38+
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
39+
-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
40+
BUILD_COMMAND ${DEFAULT_BUILD_COMMAND}
41+
BUILD_ALWAYS ${ALWAYS_REBUILD}
42+
)
43+
else()
44+
# handle changed paths in TBB 2021
45+
if (TBB_VERSION VERSION_LESS 2021)
46+
set(TBB_SOURCE_INCLUDE_DIR tbb/include)
47+
set(TBB_SOURCE_LIB_DIR tbb/lib/${TBB_LIB_SUBDIR})
48+
set(TBB_SOURCE_BIN_DIR tbb/bin/${TBB_LIB_SUBDIR})
49+
else()
50+
set(TBB_SOURCE_INCLUDE_DIR include)
51+
set(TBB_SOURCE_LIB_DIR lib/${TBB_LIB_SUBDIR})
52+
set(TBB_SOURCE_BIN_DIR redist/${TBB_LIB_SUBDIR})
53+
endif()
54+
55+
ExternalProject_Add(${COMPONENT_NAME}
56+
PREFIX ${COMPONENT_NAME}
57+
DOWNLOAD_DIR ${COMPONENT_NAME}
58+
STAMP_DIR ${COMPONENT_NAME}/stamp
59+
SOURCE_DIR ${COMPONENT_NAME}/src
60+
BINARY_DIR ${COMPONENT_NAME}
61+
URL ${TBB_URL}
62+
${TBB_HASH_ARGS}
63+
CONFIGURE_COMMAND ""
64+
BUILD_COMMAND ""
65+
INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_directory
66+
<SOURCE_DIR>/${TBB_SOURCE_INCLUDE_DIR}
67+
${COMPONENT_PATH}/include
68+
BUILD_ALWAYS OFF
69+
)
70+
71+
# We copy the libraries into the main lib dir. This makes it easier
72+
# to set the correct library path.
73+
ExternalProject_Add_Step(${COMPONENT_NAME} install_lib
74+
COMMAND "${CMAKE_COMMAND}" -E copy_directory
75+
<SOURCE_DIR>/${TBB_SOURCE_LIB_DIR} ${COMPONENT_PATH}/lib
76+
DEPENDEES install
77+
)
78+
79+
if (WIN32)
80+
# DLLs on Windows are in the bin subdirectory.
81+
ExternalProject_Add_Step(${COMPONENT_NAME} install_dll
82+
COMMAND "${CMAKE_COMMAND}" -E copy_directory
83+
<SOURCE_DIR>/${TBB_SOURCE_BIN_DIR} ${COMPONENT_PATH}/bin
84+
DEPENDEES install_lib
85+
)
86+
endif()
87+
endif()
88+
89+
set(TBB_PATH ${COMPONENT_PATH})
90+
91+
add_to_prefix_path(${COMPONENT_PATH})

0 commit comments

Comments
 (0)