1- # Specify the filename to search for
2- set (FILENAME "gpu.h" )
3-
41get_filename_component (PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY )
52get_filename_component (PROJECT_ROOT ${PROJECT_ROOT} DIRECTORY )
63
74# Construct potential paths
85set (FILEPATH_CURRENT_DIR "${CMAKE_CURRENT_SOURCE_DIR} /${FILENAME} " )
96set (FILEPATH_PROJECT_ROOT "${PROJECT_ROOT} /${FILENAME} " )
107
8+ # Include file finding utility script
9+ include ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/find_gpu.cmake" )
10+
1111# Check if the file exists in the current directory
12- if (EXISTS ${FILEPATH_CURRENT_DIR} )
13- set (TARGET_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR} )
14- elseif (EXISTS ${FILEPATH_PROJECT_ROOT} )
15- set (TARGET_FILE_PATH ${PROJECT_ROOT} )
16- else ()
17- message (FATAL_ERROR "File ${FILENAME} not found in either ${CMAKE_CURRENT_SOURCE_DIR} or ${CMAKE_CURRENT_SOURCE_DIR} /../../" )
12+ find_project_root(${CMAKE_CURRENT_SOURCE_DIR} ${FILENAME} TARGET_FILE_PATH)
13+ if ("${TARGET_FILE_PATH} " STREQUAL "" )
14+ find_project_root(${FILEPATH_CURRENT_DIR} ${FILENAME} TARGET_FILE_PATH)
15+ if ("${TARGET_FILE_PATH} " STREQUAL "" )
16+ message (
17+ FATAL_ERROR
18+ "File ${FILENAME} not found in either ${CMAKE_CURRENT_SOURCE_DIR} or ${CMAKE_CURRENT_SOURCE_DIR} /../../"
19+ )
20+ endif ()
1821endif ()
1922
2023# Define architecture and build type directories or file names
2124if (CMAKE_SIZEOF_VOID_P EQUAL 8)
22- set (ARCH "x64" )
25+ set (ARCH "x64" )
2326else ()
24- set (ARCH "x86" )
27+ set (ARCH "x86" )
2528endif ()
2629
2730if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
28- set (BUILD_TYPE "Debug" )
31+ set (BUILD_TYPE "Debug" )
2932else ()
30- set (BUILD_TYPE "Release" )
33+ set (BUILD_TYPE "Release" )
3134endif ()
3235
3336add_library (webgpulib SHARED IMPORTED )
@@ -38,22 +41,29 @@ add_dependencies(gpu webgpulib)
3841target_include_directories (gpu INTERFACE ${TARGET_FILE_PATH} )
3942
4043# Add headers webgpu.h
41- target_include_directories (wgpu INTERFACE ${TARGET_FILE_PATH} /third_party/headers)
42- if (WIN32 )
43- set (DLL_PATH "${TARGET_FILE_PATH} /third_party/lib/libdawn_${ARCH} _${BUILD_TYPE} .dll" )
44- if (EXISTS ${DLL_PATH} )
45- file (COPY ${DLL_PATH} DESTINATION ${CMAKE_CURRENT_BINARY_DIR} )
46- target_link_libraries (webgpulib INTERFACE ${DLL_PATH} )
47- else ()
48- message (FATAL_ERROR "libdawn dll not found at: ${DLL_PATH} " )
49- endif ()
50- else ()
51- find_library (LIBDAWN dawn REQUIRED PATHS "${TARGET_FILE_PATH} /third_party/lib" )
52- if (LIBDAWN)
53- message (STATUS "Found libdawn: ${LIBDAWN} " )
54- # Link against libdawn
55- target_link_libraries (webgpulib INTERFACE ${LIBDAWN} )
56- else ()
57- message (FATAL_ERROR "libdawn not found" )
58- endif ()
59- endif ()
44+ target_include_directories (wgpu
45+ INTERFACE ${TARGET_FILE_PATH} /third_party/headers)
46+ include (ExternalProject)
47+
48+ set (DAWN_EXT_PREFIX "${TARGET_FILE_PATH} /third_party/local/dawn" )
49+
50+ ExternalProject_Add(
51+ dawn_project
52+ PREFIX ${DAWN_EXT_PREFIX}
53+ GIT_REPOSITORY "https://dawn.googlesource.com/dawn"
54+ GIT_TAG "main"
55+ SOURCE_DIR "${DAWN_EXT_PREFIX} /source"
56+ BINARY_DIR "${DAWN_EXT_PREFIX} /build"
57+ INSTALL_DIR "${DAWN_EXT_PREFIX} /install"
58+ GIT_SUBMODULES ""
59+ # setting cmake args doesn't work and I don't know why
60+ CONFIGURE_COMMAND
61+ ${CMAKE_COMMAND} -S ${DAWN_EXT_PREFIX} /source -B
62+ ${DAWN_EXT_PREFIX} /build -DDAWN_FETCH_DEPENDENCIES=ON
63+ -DDAWN_ENABLE_INSTALL=ON -DDAWN_BUILD_MONOLITHIC_LIBRARY=ON
64+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -G ${CMAKE_GENERATOR}
65+ INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix
66+ ${DAWN_EXT_PREFIX} /install
67+ LOG_INSTALL ON )
68+ find_library (LIBDAWN dawn PATHS "${DAWN_EXT_PREFIX} /install/lib" )
69+ target_link_libraries (webgpulib INTERFACE ${LIBDAWN} )
0 commit comments