1
- # Specify the filename to search for
2
- set (FILENAME "gpu.h" )
3
-
4
1
get_filename_component (PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY )
5
2
get_filename_component (PROJECT_ROOT ${PROJECT_ROOT} DIRECTORY )
6
3
7
4
# Construct potential paths
8
5
set (FILEPATH_CURRENT_DIR "${CMAKE_CURRENT_SOURCE_DIR} /${FILENAME} " )
9
6
set (FILEPATH_PROJECT_ROOT "${PROJECT_ROOT} /${FILENAME} " )
10
7
8
+ # Include file finding utility script
9
+ include ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/find_gpu.cmake" )
10
+
11
11
# 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 ()
18
21
endif ()
19
22
20
23
# Define architecture and build type directories or file names
21
24
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
22
- set (ARCH "x64" )
25
+ set (ARCH "x64" )
23
26
else ()
24
- set (ARCH "x86" )
27
+ set (ARCH "x86" )
25
28
endif ()
26
29
27
30
if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
28
- set (BUILD_TYPE "Debug" )
31
+ set (BUILD_TYPE "Debug" )
29
32
else ()
30
- set (BUILD_TYPE "Release" )
33
+ set (BUILD_TYPE "Release" )
31
34
endif ()
32
35
33
36
add_library (webgpulib SHARED IMPORTED )
@@ -38,22 +41,29 @@ add_dependencies(gpu webgpulib)
38
41
target_include_directories (gpu INTERFACE ${TARGET_FILE_PATH} )
39
42
40
43
# 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