Skip to content

Commit 229fcbf

Browse files
using new way to find file
from [this](#44 (comment))
1 parent 39b40b8 commit 229fcbf

File tree

4 files changed

+100
-39
lines changed

4 files changed

+100
-39
lines changed

.gitignore

+11
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,14 @@ source
99
third_party/lib/libdawn.*
1010
third_party/lib/*.so
1111
third_party/lib/*.dylib
12+
13+
# formatter files
14+
.cmake-format.py
15+
16+
# cmake generated files
17+
compile_commands.json
18+
out
19+
20+
# clangd files
21+
.cache
22+

cmake/example.cmake

+33-21
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # export compile_commands.json to use with LSP
1+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # export compile_commands.json to use with
2+
# LSP
23
set(CMAKE_CXX_STANDARD 17)
34
set(CMAKE_CXX_STANDARD_REQUIRED ON)
45

@@ -9,37 +10,47 @@ get_filename_component(PROJECT_ROOT ${PROJECT_ROOT} DIRECTORY)
910
set(FILEPATH_CURRENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}")
1011
set(FILEPATH_PROJECT_ROOT "${PROJECT_ROOT}/${FILENAME}")
1112

13+
# Include file finding utility script
14+
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/find_gpu.cmake")
15+
1216
# Check if the file exists in the current directory
13-
if(EXISTS ${FILEPATH_CURRENT_DIR})
14-
set(TARGET_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
15-
elseif(EXISTS ${FILEPATH_PROJECT_ROOT})
16-
set(TARGET_FILE_PATH ${PROJECT_ROOT})
17-
else()
18-
message(FATAL_ERROR "File ${FILENAME} not found in either ${CMAKE_CURRENT_SOURCE_DIR} or ${CMAKE_CURRENT_SOURCE_DIR}/../../")
17+
find_project_root(${CMAKE_CURRENT_SOURCE_DIR} ${FILEPATH_CURRENT_DIR}
18+
${TARGET_FILE_PATH})
19+
if("${TARGET_FILE_PATH}" STREQUAL "")
20+
find_project_root(${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_ROOT}
21+
${TARGET_FILE_PATH})
22+
if("${TARGET_FILE_PATH}" STREQUAL "")
23+
message(
24+
FATAL_ERROR
25+
"File ${FILENAME} not found in either ${CMAKE_CURRENT_SOURCE_DIR} or ${CMAKE_CURRENT_SOURCE_DIR}/../../"
26+
)
27+
endif()
1928
endif()
2029

2130
# Ensure the build type is set
2231
if(NOT CMAKE_BUILD_TYPE)
23-
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build: Debug or Release" FORCE)
32+
set(CMAKE_BUILD_TYPE
33+
Release
34+
CACHE STRING "Choose the type of build: Debug or Release" FORCE)
2435
endif()
2536

2637
# Define architecture and build type directories or file names
2738
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
28-
set(ARCH "x64")
39+
set(ARCH "x64")
2940
else()
30-
set(ARCH "x86")
41+
set(ARCH "x86")
3142
endif()
3243

3344
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
34-
set(BUILD_TYPE "Debug")
45+
set(BUILD_TYPE "Debug")
3546
else()
36-
set(BUILD_TYPE "Release")
47+
set(BUILD_TYPE "Release")
3748
endif()
3849

3950
if(NOT TARGET gpu)
40-
message(STATUS "GPU_LIB not found")
41-
include("${TARGET_FILE_PATH}/cmake/webgpu.cmake")
42-
include("${TARGET_FILE_PATH}/cmake/gpu.cmake")
51+
message(STATUS "GPU_LIB not found")
52+
include("${TARGET_FILE_PATH}/cmake/webgpu.cmake")
53+
include("${TARGET_FILE_PATH}/cmake/gpu.cmake")
4354
endif()
4455

4556
add_executable(${PROJECT_NAME} run.cpp)
@@ -48,9 +59,10 @@ target_link_libraries(${PROJECT_NAME} PRIVATE wgpu)
4859
target_link_libraries(${PROJECT_NAME} PRIVATE webgpu)
4960

5061
if(WIN32)
51-
# Ensure DLL is copied if on Windows
52-
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
53-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
54-
${DLL_PATH}
55-
$<TARGET_FILE_DIR:${PROJECT_NAME}>)
56-
endif()
62+
# Ensure DLL is copied if on Windows
63+
add_custom_command(
64+
TARGET ${PROJECT_NAME}
65+
POST_BUILD
66+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DLL_PATH}
67+
$<TARGET_FILE_DIR:${PROJECT_NAME}>)
68+
endif()

cmake/find_gpu.cmake

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# file name to find
2+
set(FILENAME "gpu.h")
3+
4+
# Function to check for file existence up the directory hierarchy
5+
function(find_project_root current_dir filename result_var)
6+
set(found FALSE) # Flag to indicate if the file is found
7+
set(current_check_dir "${current_dir}") # Start from the given directory
8+
# using 1 is jsut to supress the cmane-format warning
9+
foreach(i RANGE 0 2 1)
10+
set(filepath "${current_check_dir}/${filename}")
11+
12+
if(EXISTS "${filepath}")
13+
set(${result_var}
14+
"${current_check_dir}"
15+
PARENT_SCOPE)
16+
set(found TRUE)
17+
break()
18+
endif()
19+
20+
# Move one level up
21+
get_filename_component(current_check_dir "${current_check_dir}"
22+
DIRECTORY)
23+
endforeach()
24+
25+
if(NOT found)
26+
set(${result_var}
27+
""
28+
PARENT_SCOPE) # Set to empty if not found
29+
endif()
30+
endfunction()

cmake/gpu.cmake

+26-18
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
1-
# Specify the filename to search for
2-
set(FILENAME "gpu.h")
3-
41
get_filename_component(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
52
get_filename_component(PROJECT_ROOT ${PROJECT_ROOT} DIRECTORY)
63

74
# Construct potential paths
85
set(FILEPATH_CURRENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}")
96
set(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(
18-
FATAL_ERROR
19-
"File ${FILENAME} not found in either ${CMAKE_CURRENT_SOURCE_DIR} or ${CMAKE_CURRENT_SOURCE_DIR}/../../"
20-
)
12+
find_project_root(${CMAKE_CURRENT_SOURCE_DIR} ${FILEPATH_CURRENT_DIR}
13+
${TARGET_FILE_PATH})
14+
if("${TARGET_FILE_PATH}" STREQUAL "")
15+
find_project_root(${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_ROOT}
16+
${TARGET_FILE_PATH})
17+
if("${TARGET_FILE_PATH}" STREQUAL "")
18+
message(
19+
FATAL_ERROR
20+
"File ${FILENAME} not found in either ${CMAKE_CURRENT_SOURCE_DIR} or ${CMAKE_CURRENT_SOURCE_DIR}/../../"
21+
)
22+
endif()
2123
endif()
2224

2325
# Define architecture and build type directories or file names
@@ -43,6 +45,15 @@ target_include_directories(gpu INTERFACE ${TARGET_FILE_PATH})
4345
# Add headers webgpu.h
4446
target_include_directories(wgpu
4547
INTERFACE ${TARGET_FILE_PATH}/third_party/headers)
48+
# FetchContent_Declare( DAWN_EXT GIT_REPOSITORY
49+
# "https://dawn.googlesource.com/dawn" GIT_TAG "main" INSTALL_DIR
50+
# "${TARGET_FILE_PATH}/third_party/dawn" CONFIGURE_COMMAND "python3
51+
# tools/fetch_dawn_dependencies.py" CMAKE_ARGS "-DDAWN_ENABLE_INSTALL=ON
52+
# -DDAWN_BUILD_MONOLITHIC_LIBRARY=ON -DCMAKE_BUILD_TYPE=Debug
53+
# -DBUILD_SAMPLES=OFF" )
54+
55+
# FetchContent_MakeAvailable(DAWN_EXT)
56+
4657
if(WIN32)
4758
set(DLL_PATH
4859
"${TARGET_FILE_PATH}/third_party/lib/libdawn_${ARCH}_${BUILD_TYPE}.dll")
@@ -55,11 +66,9 @@ if(WIN32)
5566
else()
5667
find_library(LIBDAWN dawn PATHS "${TARGET_FILE_PATH}/third_party/lib")
5768
if(LIBDAWN)
58-
message(STATUS "Found libdawn: ${LIBDAWN}")
59-
# Link against libdawn
69+
message(STATUS "Found libdawn: ${LIBDAWN}") # Link against libdawn
6070
target_link_libraries(webgpulib INTERFACE ${LIBDAWN})
61-
# if not found, try download from release
62-
else()
71+
# if not found, try download from release else()
6372
message("libdawn not found, try downloading from the release")
6473
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
6574
set(libdawn_ext "dylib")
@@ -75,8 +84,7 @@ else()
7584
find_library(LIBDAWN dawn REQUIRED
7685
PATHS "${TARGET_FILE_PATH}/third_party/lib")
7786
if(LIBDAWN)
78-
message(STATUS "Found libdawn: ${LIBDAWN}")
79-
# Link against libdawn
87+
message(STATUS "Found libdawn: ${LIBDAWN}") # Link against libdawn
8088
target_link_libraries(webgpulib INTERFACE ${LIBDAWN})
8189
else()
8290
message(FATAL_ERROR "libdawn not found")

0 commit comments

Comments
 (0)