]> O.S.I.I.S - jp/vkhelpers.git/commitdiff
Meson build support added (#8) LinuxLegend/master
authorRobert Gonzalez <32173659+uni-dos@users.noreply.github.com>
Mon, 28 Mar 2022 07:26:45 +0000 (00:26 -0700)
committerGitHub <noreply@github.com>
Mon, 28 Mar 2022 07:26:45 +0000 (09:26 +0200)
implementing meson (pull request #119)

meson.build [new file with mode: 0644]
meson_options.txt [new file with mode: 0644]

diff --git a/meson.build b/meson.build
new file mode 100644 (file)
index 0000000..12d74db
--- /dev/null
@@ -0,0 +1,233 @@
+# /////////////////////////////////////////
+#     VKH Library Build Configurations    #
+# /////////////////////////////////////////
+
+project(
+    'vkh',
+    'c', 'cpp',
+    version : '0.3.0',
+    meson_version : '>=0.62.0',
+    default_options : [
+        'c_std=c11',
+        'cpp_std=c++11'
+    ]
+)
+
+lib_so_version = '1'
+
+# Enable Vulkan Validation Layer
+ENABLE_VALIDATION_OPT = get_option('ENABLE_VALIDATION_OPT')
+
+# Enable Vulkan Memory Allocator - For more information: https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
+# Currently the only option
+VKH_ENABLE_VMA = get_option('VKH_ENABLE_VMA')
+
+# VMA Options
+
+# Enable VMA memory recording for debugging
+VMA_RECORDING_ENABLED = get_option('VMA_RECORDING_ENABLED')
+
+# Use C++ STL containers instead of VMA's containers
+VMA_USE_STL_CONTAINERS = get_option('VMA_USE_STL_CONTAINERS')
+
+# Link statically with Vulkan API
+VMA_STATIC_VULKAN_FUNCTIONS = get_option('VMA_STATIC_VULKAN_FUNCTIONS')
+
+# Fetch pointers to Vulkan functions internally (no static linking)
+VMA_DYNAMIC_VULKAN_FUNCTIONS = get_option('VMA_DYNAMIC_VULKAN_FUNCTIONS')
+
+# Every allocation will have its own memory block
+VMA_DEBUG_ALWAYS_DEDICATED_MEMORY = get_option('VMA_DEBUG_ALWAYS_DEDICATED_MEMORY')
+
+# Automatically fill new allocations and destroyed allocations with some bit pattern
+VMA_DEBUG_INITIALIZE_ALLOCATIONS = get_option('VMA_DEBUG_INITIALIZE_ALLOCATIONS')
+
+# Enable single mutex protecting all entry calls to the library
+VMA_DEBUG_GLOBAL_MUTEX = get_option('VMA_DEBUG_GLOBAL_MUTEX')
+
+# Never exceed VkPhysicalDeviceLimits::maxMemoryAllocationCount and return error
+VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT = get_option('VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT')
+
+# Minimum alignment of all allocations, in bytes.
+# Set to more than 1 for debugging purposes only. Must be power of two.
+VMA_DEBUG_ALIGNMENT = get_option('VMA_DEBUG_ALIGNMENT')
+
+# Minimum margin before and after every allocation, in bytes.
+# Set nonzero for debugging purposes only.
+VMA_DEBUG_MARGIN = get_option('VMA_DEBUG_MARGIN')
+
+# Minimum value for VkPhysicalDeviceLimits::bufferImageGranularity.
+# Set to more than 1 for debugging purposes only. Must be power of two.
+VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY = get_option('VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY')
+
+# Maximum size of a memory heap in Vulkan to consider it "small".
+VMA_SMALL_HEAP_MAX_SIZE = get_option('VMA_SMALL_HEAP_MAX_SIZE') # 1 Gigabyte default
+
+# Default size of a block allocated as single VkDeviceMemory from a "large" heap.
+VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE = get_option('VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE') # 256 Megabytes default
+
+# Configuration for Debug/Release builds
+vkh_compile_options = []
+
+if (get_option('buildtype').startswith('debug'))
+    vkh_compile_options = ['-DDEBUG']
+    ENABLE_VALIDATION_OPT = true
+    if (build_machine.system() == 'linux')
+        vkh_compile_options += ['-Wall', '-Wno-extra', '-Wno-unknown-pragmas']
+    elif (build_machine.system() == 'windows')
+        vkh_compile_options += ['/W4', '/wd4204', '/wd4221', '/wd4100']
+    endif
+else
+    if (build_machine.system() == 'linux')
+        vkh_compile_options += ['-w']
+    elif (build_machine.system() == 'windows')
+        vkh_compile_options += ['/W0']
+    endif
+endif
+
+# Enable Vulkan Memory Allocator - For more information: https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
+# currently the only option
+if (get_option('VKH_ENABLE_VMA'))
+    vkh_compile_options += '-DUSE_VMA'
+endif
+
+if (ENABLE_VALIDATION_OPT)
+    vkh_compile_options += '-DVKH_USE_VALIDATION'
+endif
+
+
+# VMA Options Define Flags
+if (VMA_RECORDING_ENABLED)
+    vkh_compile_options += '-DVMA_RECORDING_ENABLED=1'
+endif
+
+if (VMA_USE_STL_CONTAINERS)
+    vkh_compile_options += '-DVMA_USE_STL_CONTAINERS=1'
+endif
+
+if (VMA_STATIC_VULKAN_FUNCTIONS)
+    vkh_compile_options += '-DVMA_STATIC_VULKAN_FUNCTIONS=1'
+endif
+
+if (VMA_DYNAMIC_VULKAN_FUNCTIONS)
+    vkh_compile_options += '-DVMA_DYNAMIC_VULKAN_FUNCTIONS=1'
+endif
+
+if (VMA_DEBUG_ALWAYS_DEDICATED_MEMORY)
+    vkh_compile_options += '-DVMA_DEBUG_ALWAYS_DEDICATED_MEMORY=1'
+endif
+
+if (VMA_DEBUG_INITIALIZE_ALLOCATIONS)
+    vkh_compile_options += '-DVMA_DEBUG_INITIALIZE_ALLOCATIONS=1'
+endif
+
+if (VMA_DEBUG_GLOBAL_MUTEX)
+    vkh_compile_options += '-DVMA_DEBUG_GLOBAL_MUTEX=1'
+endif
+
+if (VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT)
+    vkh_compile_options += '-DVMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT=1'
+endif
+
+if (VMA_DEBUG_ALIGNMENT != 1)
+    vkh_compile_options += '-DVMA_DEBUG_ALIGNMENT=' + VMA_DEBUG_ALIGNMENT
+endif
+
+if (VMA_DEBUG_MARGIN != 0)
+    vkh_compile_options += '-DVMA_DEBUG_MARGIN=' + VMA_DEBUG_MARGIN
+endif
+
+if (VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY != 1)
+    vkh_compile_options += '-DVMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY=' + VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY
+endif
+
+if (VMA_SMALL_HEAP_MAX_SIZE != 1073741824) # 1 Gigabyte
+    vkh_compile_options += '-DVMA_SMALL_HEAP_MAX_SIZE=' + VMA_SMALL_HEAP_MAX_SIZE
+endif
+
+if (VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE != 268435456) # 256 Megabytes
+    vkh_compile_options += '-DVMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE=' + VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE
+endif
+
+# vkh dependencies
+vulkan_dep = dependency('vulkan')
+threads_dep = dependency('threads')
+vkh_dependencies = [vulkan_dep, threads_dep]
+
+pkg_conf = import('pkgconfig')
+
+
+vkh_src = [
+    'src/vkh_app.c',
+    'src/vkh_buffer.c',
+    'src/vkh_device.c',
+    'src/vkh_image.c',
+    'src/vkh_phyinfo.c',
+    'src/vkh_presenter.c',
+    'src/vkh_queue.c',
+    'src/vkhelpers.c',
+    'src/deps/tinycthread.c',
+    'src/VmaUsage.cpp'
+]
+
+vkh_include = [
+    'include',
+    'src',
+    'src/deps'
+]
+
+vkh_shared_library = shared_library('vkh', 
+    c_args: [vkh_compile_options, '-DVKH_SHARED_BUILD'],
+    cpp_args: [vkh_compile_options, '-DVKH_SHARED_BUILD'],
+    build_by_default: true,
+    install: true,
+    soversion: lib_so_version,
+    sources: vkh_src,
+    include_directories: vkh_include,
+    dependencies: vkh_dependencies
+)
+
+vkh_static_library = static_library('vkh', 
+    c_args: [vkh_compile_options, '-DVKH_STATIC_BUILD'],
+    cpp_args: [vkh_compile_options, '-DVKH_STATIC_BUILD'],
+    build_by_default: true,
+    install: true,
+    sources: vkh_src,
+    include_directories: vkh_include,
+    dependencies: vkh_dependencies
+)
+
+install_headers('include/vkh.h', subdir: 'vkh')
+
+vkh_shared_dep = declare_dependency(dependencies: vkh_dependencies, include_directories: 'include', link_with: vkh_shared_library)
+vkh_static_dep = declare_dependency(dependencies: vkh_dependencies, include_directories: 'include', link_with: vkh_static_library)
+
+
+# generate a pkgconfig file for shared lib
+pkg_conf.generate(vkh_shared_library,
+    name : meson.project_name(),
+    version : meson.project_version(),
+    filebase : meson.project_name(),
+    description : 'Vulkan helpers library',
+)
+
+summary ({
+    'ENABLE_VALIDATION_OPT': ENABLE_VALIDATION_OPT,
+    'VKH_ENABLE_VMA': VKH_ENABLE_VMA
+}, section: 'VKH Options')
+
+summary ({
+    'VMA_RECORDING_ENABLED': VMA_RECORDING_ENABLED,
+    'VMA_USE_STL_CONTAINERS': VMA_USE_STL_CONTAINERS,
+    'VMA_STATIC_VULKAN_FUNCTIONS': VMA_STATIC_VULKAN_FUNCTIONS,
+    'VMA_DYNAMIC_VULKAN_FUNCTIONS': VMA_DYNAMIC_VULKAN_FUNCTIONS,
+    'VMA_DEBUG_ALWAYS_DEDICATED_MEMORY': VMA_DEBUG_ALWAYS_DEDICATED_MEMORY,
+    'VMA_DEBUG_INITIALIZE_ALLOCATIONS': VMA_DEBUG_INITIALIZE_ALLOCATIONS,
+    'VMA_DEBUG_GLOBAL_MUTEX': VMA_DEBUG_GLOBAL_MUTEX,
+    'VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT': VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT,
+    'VMA_DEBUG_ALIGNMENT': VMA_DEBUG_ALIGNMENT,
+    'VMA_DEBUG_MARGIN': VMA_DEBUG_MARGIN,
+    'VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY': VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY,
+    'VMA_SMALL_HEAP_MAX_SIZE': VMA_SMALL_HEAP_MAX_SIZE,
+    'VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE': VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE,
+}, section: 'VMA Options')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644 (file)
index 0000000..72386c1
--- /dev/null
@@ -0,0 +1,15 @@
+option('ENABLE_VALIDATION_OPT', type: 'boolean', value: false, description: 'Enable Vulkan Validation Layer')
+option('VKH_ENABLE_VMA', type: 'boolean', value: true, description: 'Enable Vulkan Memory Allocator - For more information: https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator')
+option('VMA_RECORDING_ENABLED', type: 'boolean', value: false, description: 'Enable VMA memory recording for debugging')
+option('VMA_USE_STL_CONTAINERS', type: 'boolean', value: false, description: 'Use C++ STL containers instead of VMAs containers')
+option('VMA_STATIC_VULKAN_FUNCTIONS', type: 'boolean', value: false, description: 'Link statically with Vulkan API')
+option('VMA_DYNAMIC_VULKAN_FUNCTIONS', type: 'boolean', value: true, description: 'Fetch pointers to Vulkan functions internally (no static linking)')
+option('VMA_DEBUG_ALWAYS_DEDICATED_MEMORY', type: 'boolean', value: false, description: 'Every allocation will have its own memory block')
+option('VMA_DEBUG_INITIALIZE_ALLOCATIONS', type: 'boolean', value: false, description: 'Automatically fill new allocations and destroyed allocations with some bit pattern')
+option('VMA_DEBUG_GLOBAL_MUTEX', type: 'boolean', value: false, description: 'Enable single mutex protecting all entry calls to the library')
+option('VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT', type: 'boolean', value: false, description: 'Never exceed VkPhysicalDeviceLimits::maxMemoryAllocationCount and return error')
+option('VMA_DEBUG_ALIGNMENT', type: 'integer', value: 1, description: 'Minimum alignment of all allocations, in bytes. Set to more than 1 for debugging purposes only. Must be power of two.')
+option('VMA_DEBUG_MARGIN', type: 'integer', value: 0, description: 'Minimum margin before and after every allocation, in bytes. Set nonzero for debugging purposes only.')
+option('VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY', type: 'integer', value: 1, description: 'Minimum value for VkPhysicalDeviceLimits::bufferImageGranularity. Set to more than 1 for debugging purposes only. Must be power of two.')
+option('VMA_SMALL_HEAP_MAX_SIZE', type: 'integer', value: 1073741824, description: 'Maximum size of a memory heap in Vulkan to consider it "small".')
+option('VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE', type: 'integer', value: 268435456, description: 'Default size of a block allocated as single VkDeviceMemory from a "large" heap.')
\ No newline at end of file