diff --git a/.gitignore b/.gitignore index 57fd987..c7c7cd2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ compile_commands.json webgpu -## Meson -subprojects/ -!subprojects/*.wrap -!subprojects/wgpu-native -.cache/ +# CMake +CMakeCache.txt +CMakeFiles/ +CPackConfig.cmake +CPackSourceConfig.cmake +Makefile +_deps/ +cmake_install.cmake diff --git a/.gitmodules b/.gitmodules index e69de29..6599397 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,12 @@ +[submodule "extern/extern/SDL3"] + path = extern/SDL3 + url = git@github.com:libsdl-org/SDL.git +[submodule "extern/SDL3_image"] + path = extern/SDL3_image + url = https://github.com/libsdl-org/SDL_image +[submodule "extern/cglm"] + path = extern/cglm + url = git@github.com:recp/cglm.git +[submodule "external/glew"] + path = external/glew + url = https://github.com/nigels-com/glew.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..7bf9ae8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.16 FATAL_ERROR) +project(webgpu + VERSION 0 + DESCRIPTION "Simple Engine Experiment in C" + HOMEPAGE_URL "https://git.warwick-new.co.uk/" + LANGUAGES C +) + +set(CMAKE_C_STANDARD 17) + +# Since nix include dirs isn't appearing in compile_commands.json we're gonna +# force cmake to link it's includes more explicitly +set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") +if(CMAKE_EXPORT_COMPILE_COMMANDS) + set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) +endif() + +add_subdirectory(extern/SDL3) +add_subdirectory(extern/SDL3_image) +add_subdirectory(extern/cglm) +add_definitions(-DGLEW_STATIC) +set(OpenGL_GL_PREFERENCE GLVND) +find_package(OpenGL) + +include(FetchContent) +cmake_policy(SET CMP0135 NEW) #DOWNLOAD_EXTRACT_TIMESTAMP +FetchContent_Declare( + glew + URL https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.tgz + SOURCE_SUBDIR build/cmake +) + + +file(GLOB_RECURSE SOURCE_FILES + ${CMAKE_SOURCE_DIR}/src/*.c) +file(GLOB_RECURSE HEADER_FILES + ${CMAKE_SOURCE_DIR}/src/*.h) +add_executable(${PROJECT_NAME} ${HEADER_FILES} ${SOURCE_FILES}) + +# Error on memory address issues in debug mode +if(CMAKE_BUILD_TYPE MATCHES "Debug") + set( + CMAKE_C_FLAGS + "${CMAKE_C_FLAGS} -Werror -fsanitize=undefined -fsanitize=address" + ) + target_link_options(${PROJECT_NAME} + BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address + ) +endif() + +target_include_directories(${PROJECT_NAME} PRIVATE + ${SDL3_INCLUDE_DIRS} + ${SDL3_image_INCLUDE_DIRS} + ${GLFW_INCLUDE_DIRS} + ${CGLM_INCLUDE_DIRS} +) + +target_link_libraries(${PROJECT_NAME} + ${SDL3_LIBRARIES} + ${SDL3_image_LIBRARIES} + ${CGLM_LIBRARIES} +) diff --git a/extern/SDL3 b/extern/SDL3 new file mode 160000 index 0000000..c9a6709 --- /dev/null +++ b/extern/SDL3 @@ -0,0 +1 @@ +Subproject commit c9a6709bd21750f1ad9597be21abace78c6378c9 diff --git a/extern/SDL3_image b/extern/SDL3_image new file mode 160000 index 0000000..11154af --- /dev/null +++ b/extern/SDL3_image @@ -0,0 +1 @@ +Subproject commit 11154afb7855293159588b245b446a4ef09e574f diff --git a/extern/cglm b/extern/cglm new file mode 160000 index 0000000..144d1e7 --- /dev/null +++ b/extern/cglm @@ -0,0 +1 @@ +Subproject commit 144d1e7c29b3b0c6dede7917a0476cc95248559c diff --git a/external/glew b/external/glew new file mode 160000 index 0000000..3da315c --- /dev/null +++ b/external/glew @@ -0,0 +1 @@ +Subproject commit 3da315c23aa80b5727e51f21bbe33823bf4c0511