diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bdb76b..2a7ecba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,19 +3,28 @@ project(Gryphn) add_compile_definitions(GN_REVEAL_IMPL) -add_subdirectory(projects/loader) # build gryphn loader -add_subdirectory(projects/core) # build gryphn core -add_subdirectory(projects/platform) # build gryphn platform add_library(Gryphn INTERFACE) if (UNIX AND NOT APPLE) - add_compile_definitions(GN_PLATFORM_LINUX GN_WINDOW_X11) + add_compile_definitions( + GN_PLATFORM_LINUX + GN_WINDOW_X11 + + GN_API_VULKAN + ) add_subdirectory(projects/apis/vulkan/) target_link_libraries(Gryphn INTERFACE GryphnVulkanImpl) endif() if (APPLE) - add_compile_definitions(GN_PLATFORM_MACOS GN_API_VULKAN GN_API_METAL) + add_compile_definitions( + GN_PLATFORM_MACOS + + GN_API_VULKAN GN_API_METAL + ) add_subdirectory(projects/apis/vulkan/) add_subdirectory(projects/apis/metal/) target_link_libraries(Gryphn INTERFACE GryphnVulkanImpl GryphnMetalImpl) endif() +add_subdirectory(projects/loader) # build gryphn loader +add_subdirectory(projects/core) # build gryphn core +add_subdirectory(projects/platform) # build gryphn platform target_link_libraries(Gryphn INTERFACE GryphnCore GryphnLoader GryphnPlatform) diff --git a/projects/apis/metal/CMakeLists.txt b/projects/apis/metal/CMakeLists.txt index e41f303..db08935 100644 --- a/projects/apis/metal/CMakeLists.txt +++ b/projects/apis/metal/CMakeLists.txt @@ -5,7 +5,10 @@ project(GryphnMetalImpl) file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS "src/*.c" "src/*.h" "src/*.m" ) -add_library(GryphnMetalImpl STATIC ${SOURCE_FILES}) +file(GLOB_RECURSE LOADER_FILES CONFIGURE_DEPENDS + "loader/*.m" +) +add_library(GryphnMetalImpl STATIC ${SOURCE_FILES} ${LOADER_FILES}) target_include_directories(GryphnMetalImpl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../core/src/ ${CMAKE_CURRENT_SOURCE_DIR}/../../utils/ diff --git a/projects/apis/metal/loader/metal_command_loader.c b/projects/apis/metal/loader/metal_command_loader.m similarity index 100% rename from projects/apis/metal/loader/metal_command_loader.c rename to projects/apis/metal/loader/metal_command_loader.m diff --git a/projects/apis/metal/loader/metal_device_loader.c b/projects/apis/metal/loader/metal_device_loader.m similarity index 100% rename from projects/apis/metal/loader/metal_device_loader.c rename to projects/apis/metal/loader/metal_device_loader.m diff --git a/projects/apis/metal/loader/metal_instance_loader.c b/projects/apis/metal/loader/metal_instance_loader.m similarity index 100% rename from projects/apis/metal/loader/metal_instance_loader.c rename to projects/apis/metal/loader/metal_instance_loader.m diff --git a/projects/loader/src/gryphn_loader.c b/projects/loader/src/gryphn_loader.c index f315998..a5fef1a 100644 --- a/projects/loader/src/gryphn_loader.c +++ b/projects/loader/src/gryphn_loader.c @@ -1,5 +1,10 @@ #include "gryphn_loader.h" +#ifdef GN_API_VULKAN #include +#endif +#ifdef GN_API_METAL +#include +#endif gnInstanceFunctions loadInstanceFunctions(loaderInfo info) { switch (info.api) { @@ -10,7 +15,10 @@ gnInstanceFunctions loadInstanceFunctions(loaderInfo info) { case GN_RENDERINGAPI_DIRECTX11: return (gnInstanceFunctions){ NULL }; case GN_RENDERINGAPI_DIRECTX12: return (gnInstanceFunctions){ NULL }; case GN_RENDERINGAPI_OPENGL: return (gnInstanceFunctions){ NULL }; - case GN_RENDERINGAPI_METAL: return (gnInstanceFunctions){ NULL }; +#ifdef GN_API_METAL + case GN_RENDERINGAPI_METAL: return loadMetalInstanceFunctions(); +#endif + default: return (gnInstanceFunctions){NULL}; } } @@ -23,7 +31,11 @@ gnDeviceFunctions loadDeviceFunctions(loaderInfo info) { case GN_RENDERINGAPI_DIRECTX11: return (gnDeviceFunctions){ NULL }; case GN_RENDERINGAPI_DIRECTX12: return (gnDeviceFunctions){ NULL }; case GN_RENDERINGAPI_OPENGL: return (gnDeviceFunctions){ NULL }; - case GN_RENDERINGAPI_METAL: return (gnDeviceFunctions){ NULL }; +#ifdef GN_API_METAL + case GN_RENDERINGAPI_METAL: return loadMetalDeviceFunctions(); +#endif + + default: return (gnDeviceFunctions){NULL}; } } @@ -36,6 +48,10 @@ gnCommandFunctions loadCommandFunctions(loaderInfo info) { case GN_RENDERINGAPI_DIRECTX11: return (gnCommandFunctions){ NULL }; case GN_RENDERINGAPI_DIRECTX12: return (gnCommandFunctions){ NULL }; case GN_RENDERINGAPI_OPENGL: return (gnCommandFunctions){ NULL }; - case GN_RENDERINGAPI_METAL: return (gnCommandFunctions){ NULL }; +#ifdef GN_API_METAL + case GN_RENDERINGAPI_METAL: return loadMetalCommandFunctions(); +#endif + + default: return (gnCommandFunctions){NULL}; } }