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 ()
0 commit comments