| filter({ 'system:not windows' }) | |
| do | |
| buildoptions({ '-ffp-model=strict' }) | |
| end | |
| filter({ 'system:windows' }) | |
| do | |
| -- Visual Studio compiles through clang-cl and takes MSVC flag syntax; ninja drives clang++ | |
| -- directly, which only understands the GNU spelling. | |
| buildoptions({ _ACTION == 'ninja' and '-ffp-model=strict' or '/fp:strict' }) | |
| end | |
| filter({ 'system:windows', 'options:toolset=clang' }) | |
| do | |
| buildoptions({ | |
| '-Wno-overriding-option', | |
| }) | |
| end | |
| filter({}) | |
| dofile('rive_build_config.lua') | |
| TESTING = true | |
| defines({ | |
| 'TESTING', | |
| 'ENABLE_QUERY_FLAT_VERTICES', | |
| 'WITH_RIVE_TOOLS', | |
| 'WITH_RIVE_TEXT', | |
| 'WITH_RIVE_AUDIO', | |
| 'WITH_RIVE_AUDIO_TOOLS', | |
| 'WITH_RIVE_LAYOUT', | |
| 'WITH_RIVE_SCRIPTING', | |
| 'WITH_RIVE_SCRIPTNET', | |
| 'YOGA_EXPORT=', | |
| 'RIVE_NO_CORETEXT', | |
| }) | |
| if _OPTIONS['toolset'] == 'msc' then | |
| defines({ | |
| 'MA_NO_MP3', -- miniaudio's mp3 decoder + fp:strict causes C2099 | |
| }) | |
| end | |
| -- Every line break dictionary, so their tests run, compressed so they cover | |
| -- rebuilding the tries too. Set here rather than on the command line so | |
| -- existing out directories keep their premake arguments. | |
| for _, language in ipairs({ 'thai', 'lao', 'khmer', 'burmese', 'compressed' }) do | |
| -- Empty, like a bare command line flag, so 'options:' filters match. | |
| _OPTIONS['with_rive_text_dict_' .. language] = '' | |
| end | |
| dofile(path.join(path.getabsolute('../../'), 'premake5_v2.lua')) | |
| dofile(path.join(path.getabsolute('../../decoders/'), 'premake5_v2.lua')) | |
| -- Force "--raw_shaders" so that we can include the generated shader files and | |
| -- compile them as C++ for unit tests. | |
| _OPTIONS['raw_shaders'] = true | |
| dofile(path.join(path.getabsolute('../../renderer/'), 'premake5_pls_renderer.lua')) | |
| dofile('../rive_tools_project.lua') | |
| rive_tools_project('unit_tests', 'ConsoleApp') | |
| do | |
| kind('ConsoleApp') | |
| exceptionhandling('On') | |
| includedirs({ | |
| '..', | |
| '../include', | |
| '../../include', | |
| '../../decoders/include', | |
| '../../renderer/include', | |
| '../../renderer/rive_vk_bootstrap/include', | |
| '../../renderer/src', | |
| '../../../rive_native/native/include', | |
| '../../../texture_compressor/src', | |
| harfbuzz .. '/src', | |
| miniaudio, | |
| yoga, | |
| pls_generated_headers, | |
| luau .. '/VM/include', | |
| -- we need these for testing so we can compile | |
| luau .. '/Compiler/include', | |
| luau .. '/Ast/include', | |
| luau .. '/Common/include', | |
| }) | |
| -- The renderer premake only puts these on rive_pls_renderer's search path, | |
| -- but the vulkan tests include vkutil.hpp directly. | |
| if _OPTIONS['with_vulkan'] then | |
| externalincludedirs({ | |
| vulkan_headers .. '/include', | |
| vulkan_memory_allocator .. '/include', | |
| }) | |
| end | |
| links({ | |
| 'rive', | |
| 'rive_harfbuzz', | |
| 'rive_sheenbidi', | |
| 'rive_yoga', | |
| 'rive_decoders', | |
| 'libpng', | |
| 'zlib', | |
| 'libjpeg', | |
| 'libwebp', | |
| 'miniaudio', | |
| 'luau_vm', | |
| 'luau_compiler', | |
| }) | |
| files({ | |
| 'runtime/**.cpp', -- the runtime tests | |
| 'renderer/**.cpp', -- the renderer tests | |
| '../../utils/**.cpp', -- no_op utils | |
| '../common/render_context_null.cpp', | |
| '../../../texture_compressor/src/write_ktx2.cpp', | |
| }) | |
| -- The entry split is plain C++; test it where the renderer leaves it out. | |
| if not (_OPTIONS['with_vulkan'] and _OPTIONS['with_rive_canvas']) then | |
| files({ '../../renderer/src/ore/vulkan/ore_spirv_entry_split.cpp' }) | |
| end | |
| -- These exercise the Luau backend directly; the wasm backend's coverage | |
| -- is the two-runner differential in rive-cli until wasm twins land. | |
| if _OPTIONS['scripting_vm'] == 'wasm' then | |
| removefiles({ 'runtime/scripting/**' }) | |
| end | |
| filter('system:linux') | |
| do | |
| links({ 'dl', 'pthread' }) | |
| end | |
| -- Catch2 puts its own SIGSEGV handler over WAMR's for every test without | |
| -- chaining, and Linux raises guard page traps as SIGSEGV. On Windows its | |
| -- vectored handler goes in front of WAMR's and fails on any access | |
| -- violation. | |
| if wasmHwBounds then | |
| filter('system:linux') | |
| defines({ 'CATCH_CONFIG_NO_POSIX_SIGNALS' }) | |
| filter('system:windows') | |
| defines({ 'CATCH_CONFIG_NO_WINDOWS_SEH' }) | |
| end | |
| filter({ 'options:not no-harfbuzz-renames' }) | |
| do | |
| includedirs({ | |
| dependencies, | |
| }) | |
| forceincludes({ 'rive_harfbuzz_renames.h' }) | |
| end | |
| filter({ 'options:not no-yoga-renames' }) | |
| do | |
| includedirs({ | |
| dependencies, | |
| }) | |
| forceincludes({ 'rive_yoga_renames.h' }) | |
| end | |
| filter({ 'system:macosx' }) | |
| do | |
| links({ | |
| 'Foundation.framework', | |
| 'ImageIO.framework', | |
| 'CoreGraphics.framework', | |
| 'CoreText.framework', | |
| }) | |
| -- The ore helper pulls in <Metal/Metal.h>, so compile these tests as | |
| -- Obj-C++ on Apple instead of the C++ glob. | |
| files({ | |
| 'renderer/ore_buffer_race_test.mm', | |
| 'renderer/ore_layout_intern_test.mm', | |
| 'renderer/ore_layout_native_slots_test.mm', | |
| 'renderer/ore_scratch_pass_objects_test.mm', | |
| 'renderer/ore_split_stage_test.mm', | |
| }) | |
| removefiles({ | |
| 'renderer/ore_buffer_race_test.cpp', | |
| 'renderer/ore_layout_intern_test.cpp', | |
| 'renderer/ore_layout_native_slots_test.cpp', | |
| 'renderer/ore_scratch_pass_objects_test.cpp', | |
| 'renderer/ore_split_stage_test.cpp', | |
| }) | |
| end | |
| filter({ 'toolset:not msc' }) | |
| do | |
| linkoptions({ '-fprofile-instr-generate', '-fcoverage-mapping' }) | |
| end | |
| filter({}) | |
| end |