blob: 5ed82c64012346512f5d0489aaf590f8b7b04714 [file] [log] [blame] [edit]
dofile('rive_build_config.lua')
-- Are we in the "rive-renderer" or "rive" repository?
local handle = io.popen('git remote -v')
local git_remote = handle:read('*a')
handle:close()
if string.find(git_remote, 'rive%-renderer') or string.find(git_remote, 'rive%-pls') then
-- In rive-renderer. Rive runtime is a submodule.
RIVE_RUNTIME_DIR = path.getabsolute('submodules/rive-cpp')
else
-- In rive. Rive runtime is further up the tree.
RIVE_RUNTIME_DIR = path.getabsolute('../runtime')
end
filter('system:windows or macosx or linux')
do
-- Define RIVE_DESKTOP_GL outside of a project so that it also gets defined for consumers. It is
-- the responsibility of consumers to call gladLoadCustomLoader() when RIVE_DESKTOP_GL is
-- defined.
defines({ 'RIVE_DESKTOP_GL' })
end
filter('system:android')
do
defines({ 'RIVE_ANDROID' })
end
filter({ 'system:ios', 'options:variant=system' })
do
defines({ 'RIVE_IOS' })
end
newoption({
trigger = 'with-dawn',
description = 'compile in support for webgpu via dawn',
})
filter({ 'options:with-dawn' })
do
defines({ 'RIVE_DAWN' })
end
newoption({
trigger = 'with-webgpu',
description = 'compile in native support for webgpu',
})
filter({ 'options:with-webgpu' })
do
defines({ 'RIVE_WEBGPU' })
end
filter({ 'system:ios', 'options:variant=emulator' })
do
defines({ 'RIVE_IOS_SIMULATOR' })
end
filter('system:emscripten')
do
defines({ 'RIVE_WEBGL' })
end
filter({})
-- Minify PLS shaders, and precompile them into metal libraries if targeting ios or macosx.
newoption({
trigger = 'human-readable-shaders',
description = 'don\'t minimize shaders',
})
project('rive_pls_shaders')
do
kind('Makefile')
local makecommand = '@make -C ' .. path.getabsolute('renderer/shaders')
if _OPTIONS['human-readable-shaders'] then
makecommand = makecommand .. ' FLAGS=--human-readable'
end
cleancommands({ makecommand .. ' clean' })
buildcommands({ makecommand .. ' minify' })
rebuildcommands({ makecommand .. ' minify' })
filter('system:macosx')
do
buildcommands({ makecommand .. ' rive_pls_macosx_metallib' })
rebuildcommands({ makecommand .. ' rive_pls_macosx_metallib' })
end
filter({ 'system:ios', 'options:variant=system' })
do
buildcommands({ makecommand .. ' rive_pls_ios_metallib' })
rebuildcommands({ makecommand .. ' rive_pls_ios_metallib' })
end
filter({ 'system:ios', 'options:variant=emulator' })
do
buildcommands({ makecommand .. ' rive_pls_ios_simulator_metallib' })
rebuildcommands({ makecommand .. ' rive_pls_ios_simulator_metallib' })
end
filter({ 'options:with-dawn or with-webgpu' })
do
buildcommands({ makecommand .. ' spirv' })
rebuildcommands({ makecommand .. ' spirv' })
end
filter('system:windows')
do
architecture('x64')
end
end
newoption({
trigger = 'nop-obj-c',
description = 'include Metal classes, but as no-ops (for compilers that don\'t support Obj-C)',
})
newoption({
trigger = 'no-rive-decoders',
description = 'don\'t use the rive_decoders library (built-in image decoding will fail)',
})
newoption({
trigger = 'universal-release',
description = '(Apple only): build a universal binary to release to the store',
})
project('rive_pls_renderer')
do
dependson('rive_pls_shaders')
kind('StaticLib')
includedirs({ 'include', 'glad', 'renderer', RIVE_RUNTIME_DIR .. '/include' })
flags({ 'FatalWarnings' })
files({ 'renderer/*.cpp', 'renderer/decoding/*.cpp' })
-- The Visual Studio clang toolset doesn't recognize -ffp-contract.
filter('system:not windows')
do
buildoptions({
'-ffp-contract=on',
'-fassociative-math',
-- Don't warn about simd vectors larger than 128 bits when AVX is not enabled.
'-Wno-psabi',
})
end
filter('system:not ios')
do
files({
'renderer/gl/gl_state.cpp',
'renderer/gl/gl_utils.cpp',
'renderer/gl/load_store_actions_ext.cpp',
'renderer/gl/pls_render_buffer_gl_impl.cpp',
'renderer/gl/pls_render_context_gl_impl.cpp',
'renderer/gl/pls_render_target_gl.cpp',
})
end
filter('system:windows or macosx or linux')
do
files({
'renderer/gl/pls_impl_webgl.cpp', -- Emulate WebGL with ANGLE.
'renderer/gl/pls_impl_rw_texture.cpp',
'glad/glad.c',
'glad/glad_custom.c',
}) -- GL loader library for ANGLE.
end
filter('system:android')
do
files({
'renderer/gl/load_gles_extensions.cpp',
'renderer/gl/pls_impl_ext_native.cpp',
'renderer/gl/pls_impl_framebuffer_fetch.cpp',
})
end
filter({ 'system:macosx or ios', 'options:not nop-obj-c' })
do
files({ 'renderer/metal/*.mm' })
buildoptions({ '-fobjc-arc' })
end
filter({ 'options:with-dawn' })
do
includedirs({
'dependencies/dawn/include',
'dependencies/dawn/out/release/gen/include',
})
files({ 'dependencies/dawn/out/release/gen/src/dawn/webgpu_cpp.cpp' })
end
filter({ 'options:with-webgpu or with-dawn' })
do
files({
'renderer/webgpu/**.cpp',
'renderer/gl/load_store_actions_ext.cpp',
})
end
filter({ 'options:nop-obj-c' })
do
files({ 'renderer/metal/pls_metal_nop.cpp' })
end
filter({ 'options:not no-rive-decoders' })
do
includedirs({ RIVE_RUNTIME_DIR .. '/decoders/include' })
defines({ 'RIVE_DECODERS' })
end
filter('system:windows')
do
architecture('x64')
files({ 'renderer/d3d/*.cpp' })
end
filter('system:emscripten')
do
files({ 'renderer/gl/pls_impl_webgl.cpp' })
buildoptions({ '-pthread' })
end
end