aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2023-10-08 00:53:16 +0800
committercrupest <crupest@outlook.com>2023-10-08 01:06:10 +0800
commitc216f37a9dd3c360d390a3e134881539731186d1 (patch)
tree6705ebc8695407e6dfdbc00c4a544cd9ac73a788
parent4283858191d39d0babdaa63f5f3c1a0f365b6543 (diff)
downloadcru-c216f37a9dd3c360d390a3e134881539731186d1.tar.gz
cru-c216f37a9dd3c360d390a3e134881539731186d1.tar.bz2
cru-c216f37a9dd3c360d390a3e134881539731186d1.zip
Use clangd config file in emscripten.
-rw-r--r--.gitignore1
-rw-r--r--CMakeLists.txt38
-rw-r--r--include/cru/platform/graphics/web_canvas/WebCanvasPainter.h2
-rw-r--r--scripts/clangd.in2
-rw-r--r--scripts/cmake/patch-compile-commands.cmake28
5 files changed, 42 insertions, 29 deletions
diff --git a/.gitignore b/.gitignore
index b9b64bb9..2d2573ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ vcpkg_installed
vcpkg
compile_commands.json
+.clangd
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9e364e63..61845b2c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,31 +53,13 @@ add_subdirectory(src)
add_subdirectory(test)
add_subdirectory(demos)
-function (patch_compile_commands input output_var)
- set(ENTRY_FILE ${CMAKE_BINARY_DIR}/compile_commands_entry)
- set(RESULT "[]")
- string(JSON COUNT LENGTH "${input}")
- message("Total commands need to patch: " ${COUNT})
- math(EXPR COUNT "${COUNT} - 1")
- foreach(INDEX RANGE ${COUNT})
- message("Patching: " ${INDEX} "/" ${COUNT})
- string(JSON ORIGINAL_COMMAND GET "${input}" ${INDEX} command)
- string(JSON WORKING_DIR GET "${input}" ${INDEX} directory)
- string(FIND "${ORIGINAL_COMMAND}" " " COMMAND_FIRST_SPACE)
- string(SUBSTRING "${ORIGINAL_COMMAND}" 0 ${COMMAND_FIRST_SPACE} COMMAND_COMPILER)
- string(SUBSTRING "${ORIGINAL_COMMAND}" ${COMMAND_FIRST_SPACE} -1 ORIGINAL_COMMAND_ARGS)
- string(CONCAT COMMAND_GENERATE "${COMMAND_COMPILER}" " -MJ ${ENTRY_FILE}" "${ORIGINAL_COMMAND_ARGS}")
- #message("Run: " "${COMMAND_GENERATE}")
- execute_process(COMMAND sh -c "${COMMAND_GENERATE}" WORKING_DIRECTORY "${WORKING_DIR}")
- file(READ ${ENTRY_FILE} ENTRY)
- string(JSON RESULT SET "${RESULT}" ${INDEX} "${ENTRY}")
- endforeach()
- set(${output_var} "${RESULT}" PARENT_SCOPE)
-endfunction()
-
-function (patch_compile_commands_file)
- file(READ ${CMAKE_BINARY_DIR}/compile_commands.json COMPILE_COMMANDS)
- patch_compile_commands("${COMPILE_COMMANDS}" COMPILE_COMMANDS_PATCHED)
- file(WRITE ${CMAKE_BINARY_DIR}/compile_commands-patched.json "${COMPILE_COMMANDS_PATCHED}")
-endfunction()
-
+set(CLANGD_FILE ${CMAKE_BINARY_DIR}/clangd)
+if(EMSCRIPTEN)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} --cflags OUTPUT_VARIABLE CLANGD_FLAGS_TO_ADD)
+ separate_arguments(CLANGD_FLAGS_TO_ADD UNIX_COMMAND "${CLANGD_FLAGS_TO_ADD}")
+ list(JOIN CLANGD_FLAGS_TO_ADD ", " CLANGD_FLAGS_TO_ADD)
+ set(CLANGD_TEMPLATE ${PROJECT_SOURCE_DIR}/scripts/clangd.in)
+ configure_file(${CLANGD_TEMPLATE} ${CLANGD_FILE})
+else()
+ file(WRITE ${CLANGD_FILE} "")
+endif()
diff --git a/include/cru/platform/graphics/web_canvas/WebCanvasPainter.h b/include/cru/platform/graphics/web_canvas/WebCanvasPainter.h
index 44ec1df6..f85f93b0 100644
--- a/include/cru/platform/graphics/web_canvas/WebCanvasPainter.h
+++ b/include/cru/platform/graphics/web_canvas/WebCanvasPainter.h
@@ -7,6 +7,6 @@
namespace cru::platform::graphics::web_canvas {
class WebCanvasPainter: public WebCanvasResource, public virtual IPainter {
public:
- WebCanvasPainter(WebCanvasGraphicsFactory* factory);
+ WebCanvasPainter(WebCanvasGraphicsFactory* factory, emscripten::val context);
};
}
diff --git a/scripts/clangd.in b/scripts/clangd.in
new file mode 100644
index 00000000..5db08ed3
--- /dev/null
+++ b/scripts/clangd.in
@@ -0,0 +1,2 @@
+CompileFlags:
+ Add: [${CLANGD_FLAGS_TO_ADD}]
diff --git a/scripts/cmake/patch-compile-commands.cmake b/scripts/cmake/patch-compile-commands.cmake
new file mode 100644
index 00000000..d855ce3c
--- /dev/null
+++ b/scripts/cmake/patch-compile-commands.cmake
@@ -0,0 +1,28 @@
+function (patch_compile_commands input output_var)
+ set(ENTRY_FILE ${CMAKE_BINARY_DIR}/compile_commands_entry)
+ set(RESULT "[]")
+ string(JSON COUNT LENGTH "${input}")
+ message("Total commands need to patch: " ${COUNT})
+ math(EXPR COUNT "${COUNT} - 1")
+ foreach(INDEX RANGE ${COUNT})
+ message("Patching: " ${INDEX} "/" ${COUNT})
+ string(JSON ORIGINAL_COMMAND GET "${input}" ${INDEX} command)
+ string(JSON WORKING_DIR GET "${input}" ${INDEX} directory)
+ string(FIND "${ORIGINAL_COMMAND}" " " COMMAND_FIRST_SPACE)
+ string(SUBSTRING "${ORIGINAL_COMMAND}" 0 ${COMMAND_FIRST_SPACE} COMMAND_COMPILER)
+ string(SUBSTRING "${ORIGINAL_COMMAND}" ${COMMAND_FIRST_SPACE} -1 ORIGINAL_COMMAND_ARGS)
+ string(CONCAT COMMAND_GENERATE "${COMMAND_COMPILER}" " -MJ ${ENTRY_FILE}" "${ORIGINAL_COMMAND_ARGS}")
+ #message("Run: " "${COMMAND_GENERATE}")
+ execute_process(COMMAND sh -c "${COMMAND_GENERATE}" WORKING_DIRECTORY "${WORKING_DIR}")
+ file(READ ${ENTRY_FILE} ENTRY)
+ string(JSON RESULT SET "${RESULT}" ${INDEX} "${ENTRY}")
+ endforeach()
+ set(${output_var} "${RESULT}" PARENT_SCOPE)
+endfunction()
+
+function (patch_compile_commands_file)
+ file(READ ${CMAKE_BINARY_DIR}/compile_commands.json COMPILE_COMMANDS)
+ patch_compile_commands("${COMPILE_COMMANDS}" COMPILE_COMMANDS_PATCHED)
+ file(WRITE ${CMAKE_BINARY_DIR}/compile_commands-patched.json "${COMPILE_COMMANDS_PATCHED}")
+endfunction()
+