Skip to content

MacOS #488

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 24 commits into
base: master
Choose a base branch
from
Open

MacOS #488

Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
453bb2d
add macos-clang PLATFORM given apple clang compiler vendor to CMake
Apr 14, 2023
c4a41b4
Correct dxc's CMakeLists file in order to cover non multi generators,…
AnastaZIuk Apr 15, 2023
df32b15
remove x86 processor specific compile flags added without respect to …
AnastaZIuk Apr 15, 2023
dece03a
generate endian.h and byteswap.h patch headers on fly for AppleClang …
AnastaZIuk Apr 17, 2023
0039960
force x86_64 arch builds for all APPLE devices
AnastaZIuk Apr 19, 2023
ff275de
Merge branch 'newBuiltinResources' of github.com:Devsh-Graphics-Progr…
AnastaZIuk Apr 19, 2023
afe16f6
turn explicit instantiation definition in builtin resources auto-gene…
devshgraphicsprogrammingjenkins Apr 22, 2023
b4b7d9e
add standalone boost math library in order to patch Nabla for MacOS b…
AnastaZIuk Apr 22, 2023
76e4662
Force Xcode legacy build system in order to work with Nabla, add vali…
AnastaZIuk Apr 22, 2023
50e657d
fix oneDPL & oneTBB Nabla build system and make it work on MacOS with…
AnastaZIuk Apr 22, 2023
7a6de70
bring back installation of tbb targets and coditionally handle tbbmal…
AnastaZIuk Apr 23, 2023
3d4c2c3
fix dependent type errors, add some copy constructor with assignment …
AnastaZIuk Apr 23, 2023
1f024e5
Add CSystemMacOS source and header file, update Nabla codebase with M…
AnastaZIuk Apr 24, 2023
b9c830e
eliminate last errors and compile Nabla on MacOS with AppleClang and …
AnastaZIuk Apr 25, 2023
e43df25
updated .gitmodules to use DevshGraphicsProgramming forks and SSH
Hazardu Sep 21, 2023
1f8548a
pull master & resolve conflicts
AnastaZIuk Jul 25, 2024
0101507
second pull from remote & resolve conflicts
AnastaZIuk Jul 25, 2024
5752d7e
Delete 3rdparty/boost/standalone directory
AnastaZIuk Jul 25, 2024
e7bef08
Refactor submodule.update.cmake & do not use proxy scripts anymore, s…
AnastaZIuk Jul 25, 2024
f22f391
Merge branch 'MacOSX' of github.com:Devsh-Graphics-Programming/Nabla …
AnastaZIuk Jul 25, 2024
e2067c2
make NBL_FORCE_ON_UPDATE_GIT_SUBMODULE truely wipe-all thing
AnastaZIuk Jul 25, 2024
e08ee2c
make this configure again
AnastaZIuk Jul 25, 2024
e7bfe9e
make it generate on my MacOS Air M2 (cross-compile to x86_64)
AnastaZIuk Jul 25, 2024
edb3c8d
silent all warnings regarding flags & definitions, add apple-clang.cm…
AnastaZIuk Jul 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
url = https://github.com/Devsh-Graphics-Programming/oneTBB.git
[submodule "3rdparty/pstl/oneDPL/oneDPL"]
path = 3rdparty/pstl/oneDPL/oneDPL
url = https://github.com/Devsh-Graphics-Programming/oneDPL.git
url = git@github.com:Devsh-Graphics-Programming/oneDPL.git
[submodule "3rdparty/Vulkan-Headers"]
path = 3rdparty/Vulkan-Headers
url = [email protected]:KhronosGroup/Vulkan-Headers.git
Expand All @@ -84,3 +84,6 @@
[submodule "3rdparty/tcpp"]
path = 3rdparty/tcpp
url = [email protected]:Erfan-Ahmadi/tcpp.git
[submodule "3rdparty/boost/standalone/math"]
path = 3rdparty/boost/standalone/math
url = [email protected]:boostorg/math.git
34 changes: 32 additions & 2 deletions 3rdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,10 @@ add_subdirectory(volk volk EXCLUDE_FROM_ALL)
target_include_directories(volk PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include")
target_include_directories(volk_headers INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include")

if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
add_subdirectory(pstl pstl EXCLUDE_FROM_ALL)
endif()


# zlib (target is zlibstatic)
set(_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
set(_OLD_SKIP_INSTALL_ALL ${SKIP_INSTALL_ALL})
Expand All @@ -62,11 +61,16 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E rename zconf.h.included zconf.h
set(SKIP_INSTALL_ALL ${_OLD_SKIP_INSTALL_ALL})
set(BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS})

if(APPLE)
target_compile_options(zlibstatic PUBLIC "-includeunistd.h")
endif()

get_target_property(ZLIB_SOURCE_DIR zlibstatic "SOURCE_DIR")
get_target_property(ZLIB_BINARY_DIR zlibstatic "BINARY_DIR")
get_filename_component(_ORIGINAL_SOURCE_ "${ZLIB_SOURCE_DIR}" ABSOLUTE)
get_filename_component(_COPY_BIN_SOURCE_ "${ZLIB_BINARY_DIR}/copy_source" ABSOLUTE)

# TODO: add coresponding custom command and mark proper dependencies [zlib_copy]
add_custom_target(zlib_copy
COMMAND ${CMAKE_COMMAND} -E rm -Rf "${_COPY_BIN_SOURCE_}"
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_ORIGINAL_SOURCE_}" "${_COPY_BIN_SOURCE_}"
Expand Down Expand Up @@ -241,6 +245,32 @@ add_library(aesGladman OBJECT
aesGladman/sha1.c
)

# MacOS patches
if(APPLE)
set(_NBL_MACOS_PATCH_INCLUDE_ "${CMAKE_CURRENT_BINARY_DIR}/macos/include" CACHE INTERNAL "")

set(_NBL_MACOS_BYTESWAP_H_
"#if defined(__APPLE__)\n\
// Mac OS X / Darwin features\n\
#include <libkern/OSByteOrder.h>\n\n\
#define bswap_16(x) OSSwapInt16(x)\n\
#define bswap_32(x) OSSwapInt32(x)\n\
#define bswap_64(x) OSSwapInt64(x)\n\
#endif // __APPLE__"
)

set(_NBL_MACOS_ENDIAN_H_
"#if defined(__APPLE__)\n\
#include <machine/endian.h>\n\
#endif // __APPLE__"
)

file(WRITE "${_NBL_MACOS_PATCH_INCLUDE_}/byteswap.h" "${_NBL_MACOS_BYTESWAP_H_}")
file(WRITE "${_NBL_MACOS_PATCH_INCLUDE_}/endian.h" "${_NBL_MACOS_ENDIAN_H_}")

include_directories(BEFORE SYSTEM "${_NBL_MACOS_PATCH_INCLUDE_}")
endif()
Comment on lines +341 to +365

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

both ARM and x86 are little-endian

we're not going to support PowerPC cause its freaking ancient

what dependency even needs this?


option(GLM_TEST_ENABLE_SIMD_SSE4_2 "Enable SSE 4.2 optimizations" ON)
option(GLM_TEST_ENABLE "Build unit tests" OFF)
#add_subdirectory(glm EXCLUDE_FROM_ALL)
Expand Down
1 change: 1 addition & 0 deletions 3rdparty/boost/standalone/math
Submodule math added at c56f33
38 changes: 27 additions & 11 deletions 3rdparty/dxc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,24 +122,40 @@ if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
add_subdirectory(CT CT)
endif()

include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/debug.cmake")
include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/release.cmake")
if(GENERATOR_IS_MULTI_CONFIG)
include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/debug.cmake")
include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/release.cmake")
else()
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/debug.cmake")
else()
include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/release.cmake")
endif()
endif()

set(DXC_INCLUDE_DIRECTORIES
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_INCLUDE_DIRECTORIES},${NBL_DXC_RELEASE_INCLUDE_DIRECTORIES}>
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_INCLUDE_DIRECTORIES},${NBL_DXC_RELEASE_INCLUDE_DIRECTORIES}>
CACHE INTERNAL "")

set(DXC_LIB
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_LIB},${NBL_DXC_RELEASE_LIB}>
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_LIB},${NBL_DXC_RELEASE_LIB}>
CACHE INTERNAL "")

set(DXC_DLL
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_DLL},${NBL_DXC_RELEASE_DLL}>
set(DXC_DLL
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_DLL},${NBL_DXC_RELEASE_DLL}>
CACHE INTERNAL "")

cmake_path(GET NBL_DXC_DEBUG_DLL FILENAME _NBL_DXC_DEBUG_DLL_NAME_)
cmake_path(GET NBL_DXC_RELEASE_DLL FILENAME _NBL_DXC_RELEASE_DLL_NAME_)
if(GENERATOR_IS_MULTI_CONFIG)
cmake_path(GET NBL_DXC_DEBUG_DLL FILENAME _NBL_DXC_DEBUG_DLL_NAME_)
cmake_path(GET NBL_DXC_RELEASE_DLL FILENAME _NBL_DXC_RELEASE_DLL_NAME_)
else()
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
cmake_path(GET NBL_DXC_DEBUG_DLL FILENAME _NBL_DXC_DEBUG_DLL_NAME_)
else()
cmake_path(GET NBL_DXC_RELEASE_DLL FILENAME _NBL_DXC_RELEASE_DLL_NAME_)
endif()
endif()

set(DXC_DLL_NAME
$<IF:$<CONFIG:Debug>,${_NBL_DXC_DEBUG_DLL_NAME_},${_NBL_DXC_RELEASE_DLL_NAME_}>
CACHE INTERNAL "")
set(DXC_DLL_NAME
$<IF:$<CONFIG:Debug>,${_NBL_DXC_DEBUG_DLL_NAME_},${_NBL_DXC_RELEASE_DLL_NAME_}>
CACHE INTERNAL "")
Binary file added 3rdparty/pstl/.DS_Store
Binary file not shown.
122 changes: 65 additions & 57 deletions 3rdparty/pstl/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,59 +1,67 @@
if(NBL_BUILD_DPL AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # only non-multi-generators and clang ifsupported
get_filename_component(CCBD_ABSOLUTE "${CMAKE_CURRENT_BINARY_DIR}" ABSOLUTE)

if (NBL_BUILD_DPL)
set(_NBL_BUILD_DPL_ ${NBL_BUILD_DPL})
endif()

set(TBB_INSTALL_VARS ON CACHE BOOL "" FORCE)
set(TBB_TEST OFF CACHE BOOL "" FORCE)
set(TBB_STRICT ON CACHE BOOL "" FORCE)
set(PREVIOUS_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
set(TBB_SANITIZE "" CACHE STRING "" FORCE)
add_subdirectory(oneTBB oneTBB EXCLUDE_FROM_ALL)

if(PREVIOUS_BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ${PREVIOUS_BUILD_SHARED_LIBS} CACHE BOOL "" FORCE)
else()
unset(BUILD_SHARED_LIBS CACHE)
endif()

set(ONETBB_BUILD ${CCBD_ABSOLUTE}/oneTBB)
set(ONETBB_INSTALL_DIR ${ONETBB_BUILD}/install CACHE STRING "oneTBB install directory" FORCE)

add_custom_target(onetbb_build
COMMAND ${CMAKE_COMMAND} --install ${ONETBB_BUILD} --component devel -v --config $<CONFIG> --prefix ${ONETBB_INSTALL_DIR}
COMMAND ${CMAKE_COMMAND} --install ${ONETBB_BUILD} --component runtime -v --config $<CONFIG> --prefix ${ONETBB_INSTALL_DIR}
DEPENDS tbb tbbmalloc tbbmalloc_proxy
COMMENT "Building oneTBB..."
)

set(ONEDPL_BUILD ${CCBD_ABSOLUTE}/oneDPL/build)
set(ONEDPL_INSTALL_DIR ${ONEDPL_BUILD}/install CACHE STRING "oneDPL install directory" FORCE)

set(CMAKE_ARGS_ONEDPL
-DCMAKE_BUILD_TYPE:STRING=$<CONFIG>
-DONETBB_INSTALL_DIR:PATH=${ONETBB_INSTALL_DIR}
get_filename_component(CCBD_ABSOLUTE "${CMAKE_CURRENT_BINARY_DIR}" ABSOLUTE)

set(_NBL_BUILD_DPL_ ON CACHE BOOL "")

set(TBB_INSTALL_VARS ON CACHE BOOL "" FORCE)
set(TBB_TEST OFF CACHE BOOL "" FORCE)
set(TBB_STRICT ON CACHE BOOL "" FORCE)
set(PREVIOUS_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
set(TBB_SANITIZE "" CACHE STRING "" FORCE)

add_subdirectory(oneTBB oneTBB EXCLUDE_FROM_ALL)
target_compile_options(tbb PUBLIC
-Wno-conversion
)

if(PREVIOUS_BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ${PREVIOUS_BUILD_SHARED_LIBS} CACHE BOOL "" FORCE)
else()
unset(BUILD_SHARED_LIBS CACHE)
endif()

set(ONETBB_BUILD ${CCBD_ABSOLUTE}/oneTBB)
set(ONETBB_INSTALL_DIR ${ONETBB_BUILD}/install CACHE STRING "oneTBB install directory" FORCE)

add_custom_target(onetbb_build
COMMAND ${CMAKE_COMMAND} --install ${ONETBB_BUILD} --component devel -v --config $<CONFIG> --prefix ${ONETBB_INSTALL_DIR}
COMMAND ${CMAKE_COMMAND} --install ${ONETBB_BUILD} --component runtime -v --config $<CONFIG> --prefix ${ONETBB_INSTALL_DIR}
COMMENT "Building oneTBB..."
)
add_dependencies(onetbb_build tbb tbbmalloc)

if(NOT (APPLE AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang"))
add_dependencies(onetbb_build tbbmalloc_proxy)
endif()

set(ONEDPL_BUILD ${CCBD_ABSOLUTE}/oneDPL/build)
set(ONEDPL_INSTALL_DIR ${ONEDPL_BUILD}/install CACHE STRING "oneDPL install directory" FORCE)

set(CMAKE_ARGS_ONEDPL
-DCMAKE_BUILD_TYPE:STRING=$<CONFIG>
-DONETBB_INSTALL_DIR:PATH=${ONETBB_INSTALL_DIR}
)

if(ANDROID)
list(APPEND CMAKE_ARGS_ONEDPL
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}
-DANDROID_ABI:STRING=${ANDROID_ABI}
-DANDROID_PLATFORM:STRING=${ANDROID_PLATFORM}
)

if(ANDROID)
list(APPEND CMAKE_ARGS_ONEDPL
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}
-DANDROID_ABI:STRING=${ANDROID_ABI}
-DANDROID_PLATFORM:STRING=${ANDROID_PLATFORM}
)
endif()

ExternalProject_Add(oneDPL
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/oneDPL
BINARY_DIR ${ONEDPL_BUILD}
CMAKE_ARGS ${CMAKE_ARGS_ONEDPL}
BUILD_COMMAND cmake --build ${ONEDPL_BUILD}
INSTALL_COMMAND cmake --install ${ONEDPL_BUILD} --prefix ${ONEDPL_INSTALL_DIR}
USES_TERMINAL_BUILD 1
COMMENT "Building oneDPL..."
elseif(APPLE)
list(APPEND CMAKE_ARGS_ONEDPL
"-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}"
)

add_dependencies(oneDPL onetbb_build)
endif()
endif()

ExternalProject_Add(oneDPL
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/oneDPL
BINARY_DIR ${ONEDPL_BUILD}
CMAKE_ARGS ${CMAKE_ARGS_ONEDPL}
BUILD_COMMAND cmake --build ${ONEDPL_BUILD} --config $<CONFIG>
INSTALL_COMMAND cmake --install ${ONEDPL_BUILD} --config $<CONFIG> -v --prefix ${ONEDPL_INSTALL_DIR}
USES_TERMINAL_BUILD 1
COMMENT "Building oneDPL..."
)

add_dependencies(oneDPL onetbb_build)
49 changes: 33 additions & 16 deletions 3rdparty/pstl/oneDPL/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,35 @@
cmake_minimum_required(VERSION 3.20)
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/toolchains/android/build.cmake)
cmake_minimum_required(VERSION 3.26)

if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(NOT DEFINED ONETBB_INSTALL_DIR)
message(FATAL_ERROR "oneDPL submodule requires valid ONETBB_INSTALL_DIR!")
endif()

set(TBB_DIR ${ONETBB_INSTALL_DIR}/lib/cmake/TBB CACHE INTERNAL "" FORCE)
set(ONEDPL_BACKEND tbb CACHE STRING "" FORCE)
add_subdirectory(oneDPL oneDPL)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(ANDROID)
add_compile_options(
$<$<CONFIG:DEBUG>:-glldb>
)
endif()
endif()
# assume built-in pthreads on MacOS
if(APPLE)
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON CACHE BOOL "")
endif()

if(ANDROID)
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/toolchains/android/build.cmake)
endif()

if(NOT DEFINED ONETBB_INSTALL_DIR)
message(FATAL_ERROR "oneDPL submodule requires valid ONETBB_INSTALL_DIR!")
endif()

set(TBB_DIR ${ONETBB_INSTALL_DIR}/lib/cmake/TBB CACHE INTERNAL "" FORCE)
set(ONEDPL_BACKEND tbb CACHE STRING "" FORCE)
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH ON CACHE BOOL "")
set(ONE_DPL_INSTALL_OVERRIDE "${CMAKE_CURRENT_BINARY_DIR}/output" CACHE STRING "" FORCE)
find_package(Threads REQUIRED)

add_subdirectory(oneDPL oneDPL)
Comment on lines +19 to +29

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so you need to compile OneDPL for AppleClang to support parallel execution policies?


if(ANDROID)
add_compile_options(
$<$<CONFIG:DEBUG>:-glldb>
)
endif()
2 changes: 1 addition & 1 deletion 3rdparty/pstl/oneDPL/oneDPL
Submodule oneDPL updated 1 files
+7 −0 CMakeLists.txt
2 changes: 1 addition & 1 deletion 3rdparty/zlib
Submodule zlib updated 133 files
Loading