blob: 8051c3569f578a7eac2e6a76ff7b70ee4ee9c7e7 [file] [log] [blame] [edit]
dofile('rive_build_config.lua')
defines({ 'WITH_RIVE_TOOLS' })
RIVE_RUNTIME_DIR = path.getabsolute('..')
RIVE_PLS_DIR = path.getabsolute('../renderer')
dofile(RIVE_RUNTIME_DIR .. '/premake5_v2.lua')
dofile(RIVE_RUNTIME_DIR .. '/cg_renderer/premake5.lua')
dofile(RIVE_RUNTIME_DIR .. '/dependencies/premake5_libpng_v2.lua')
dofile(RIVE_RUNTIME_DIR .. '/decoders/premake5_v2.lua')
dofile(RIVE_PLS_DIR .. '/premake5_pls_renderer.lua')
newoption({ trigger = 'with-skia', description = 'use skia' })
if _OPTIONS['with-skia'] then
dofile(RIVE_RUNTIME_DIR .. '/skia/renderer/premake5_v2.lua')
end
function rive_tools_project(name, project_kind)
project(name)
if project_kind == 'RiveTool' then
kind(
_OPTIONS['for_unreal'] and 'StaticLib'
or _OPTIONS['for_android'] and 'SharedLib'
or _OPTIONS['os'] == 'ios' and 'StaticLib'
or 'ConsoleApp'
)
dependson({
'tools_common',
'rive_pls_renderer',
'rive_cg_renderer',
'rive_decoders',
'rive',
'libpng',
'zlib',
'libjpeg',
'libwebp',
'rive_yoga',
'rive_harfbuzz',
'rive_sheenbidi',
'miniaudio',
})
filter({ 'system:windows', 'options:with-asan', 'options:toolset=clang' })
do
links({
'clang_rt.asan_dbg_dynamic-x86_64.lib',
'clang_rt.asan_dynamic_runtime_thunk-x86_64.lib',
})
end
filter({})
else
kind(project_kind)
end
fatalwarnings { "All" }
defines({
'SK_GL',
'GL_SILENCE_DEPRECATION', -- For glReadPixels()
'YOGA_EXPORT=',
})
includedirs({
'.',
RIVE_PLS_DIR .. '/include',
RIVE_PLS_DIR .. '/path_fiddle',
RIVE_PLS_DIR .. '/shader_hotload',
RIVE_PLS_DIR .. '/src',
RIVE_RUNTIME_DIR .. '/include',
RIVE_RUNTIME_DIR .. '/cg_renderer/include',
'unit_tests',
'%{cfg.targetdir}/include/libpng',
})
externalincludedirs({
'include',
RIVE_PLS_DIR .. '/glad',
RIVE_PLS_DIR .. '/glad/include',
yoga,
libpng,
zlib,
})
if ndk then
externalincludedirs({ ndk .. '/sources' })
links({ 'log', 'android' })
end
if _OPTIONS['with_vulkan'] then
dofile(RIVE_PLS_DIR .. '/rive_vk_bootstrap/bootstrap_project.lua')
end
filter({ 'system:windows or macosx or linux', 'options:not for_unreal' })
do
externalincludedirs({
RIVE_RUNTIME_DIR .. '/skia/dependencies/glfw/include',
})
end
filter('options:with-skia')
do
includedirs({
RIVE_RUNTIME_DIR .. '/skia/renderer/include',
RIVE_RUNTIME_DIR .. '/skia/dependencies',
RIVE_RUNTIME_DIR .. '/skia/dependencies/skia',
})
defines({ 'RIVE_SKIA' })
libdirs({ RIVE_RUNTIME_DIR .. '/skia/dependencies/skia/out/static' })
end
filter({ 'toolset:not msc' })
do
buildoptions({ '-Wshorten-64-to-32' })
end
filter({ 'system:windows' })
do
architecture('x64')
defines({
'_USE_MATH_DEFINES',
'_CRT_SECURE_NO_WARNINGS',
'_CRT_NONSTDC_NO_DEPRECATE',
'_WINSOCK_DEPRECATED_NO_WARNINGS',
'UNICODE',
})
end
filter('system:android')
do
defines({ 'RIVE_TOOLS_NO_GLFW' })
end
filter('system:ios')
do
defines({ 'RIVE_TOOLS_NO_GLFW', 'RIVE_TOOLS_NO_GL' })
end
-- Match PLS math options for testing simd.
filter({ 'system:not windows', 'options:not no_ffp_contract' })
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:windows', 'options:toolset=msc' })
do
-- MSVC doesn't allow designated initializers on C++17.
defines({
'_SILENCE_CXX20_IS_POD_DEPRECATION_WARNING',
'_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS',
})
buildoptions({
-- "warning C4577: 'noexcept' used with no exception handling mode specified;
-- termination on exception is not guaranteed. Specify /EHsc"
'/EHsc',
})
end
filter('options:with-dawn')
do
includedirs({
RIVE_PLS_DIR .. '/dependencies/dawn/include',
RIVE_PLS_DIR .. '/dependencies/dawn/out/release/gen/include',
})
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp' })
do
libdirs({ RIVE_RUNTIME_DIR .. '/build/%{cfg.system}/bin/' .. RIVE_BUILD_CONFIG })
links({
'tools_common',
'rive_pls_renderer',
'rive_cg_renderer',
'rive_decoders',
'rive',
'libpng',
'zlib',
'libwebp',
'rive_yoga',
'rive_harfbuzz',
'rive_sheenbidi',
'miniaudio',
})
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp', 'options:not no_rive_jpeg' })
do
links({
'libjpeg',
})
end
filter({})
if ndk then
relative_ndk = ndk
if string.sub(ndk, 1, 1) == '/' then
-- An absolute file path wasn't working with premake.
local current_path = string.gmatch(path.getabsolute('.'), '([^\\/]+)')
for dir in current_path do
relative_ndk = '../' .. relative_ndk
end
end
files({
relative_ndk .. '/sources/android/native_app_glue/android_native_app_glue.c',
})
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp', 'system:windows' })
do
libdirs({
RIVE_RUNTIME_DIR .. '/skia/dependencies/glfw_build/src/Release',
})
links({
'glfw3',
'opengl32',
'd3d11',
'd3d12',
'dxguid',
'dxgi',
'Dbghelp',
'd3dcompiler',
'ws2_32',
})
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp', 'system:macosx' })
do
libdirs({ RIVE_RUNTIME_DIR .. '/skia/dependencies/glfw_build/src' })
links({
'glfw3',
'Metal.framework',
'QuartzCore.framework',
'Cocoa.framework',
'CoreGraphics.framework',
'CoreFoundation.framework',
'CoreMedia.framework',
'CoreServices.framework',
'IOKit.framework',
'Security.framework',
'OpenGL.framework',
'bz2',
'iconv',
'lzma',
'z', -- lib av format
})
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp', 'system:linux' })
do
libdirs({ RIVE_RUNTIME_DIR .. '/skia/dependencies/glfw_build/src' })
links({ 'glfw3', 'm', 'z', 'dl', 'pthread', 'GL' })
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp', 'system:android' })
do
links({ 'EGL', 'GLESv3', 'log' })
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp', 'options:with-dawn' })
do
libdirs({
RIVE_PLS_DIR .. '/dependencies/dawn/out/release/obj/src/dawn',
RIVE_PLS_DIR .. '/dependencies/dawn/out/release/obj/src/dawn/native',
RIVE_PLS_DIR .. '/dependencies/dawn/out/release/obj/src/dawn/platform',
RIVE_PLS_DIR .. '/dependencies/dawn/out/release/obj/src/dawn/platform',
})
links({
'winmm',
'webgpu_dawn',
'dawn_native_static',
'dawn_proc_static',
'dawn_platform_static',
})
end
filter({
'kind:ConsoleApp or SharedLib or WindowedApp',
'options:with-dawn',
'system:windows',
})
do
links({ 'dxguid' })
end
filter({
'kind:ConsoleApp or SharedLib or WindowedApp',
'options:with-dawn',
'system:macosx',
})
do
links({ 'IOSurface.framework' })
end
filter({ 'kind:ConsoleApp or SharedLib or WindowedApp', 'options:with-skia' })
do
links({ 'skia', 'rive_skia_renderer' })
end
filter('system:emscripten')
do
targetextension('.js')
linkoptions({
'-sEXPORTED_FUNCTIONS=_main,_rive_print_message_on_server,_malloc,_free',
'-sEXPORTED_RUNTIME_METHODS=ccall,cwrap',
'-sENVIRONMENT=web',
'-sUSE_GLFW=3',
'-sMIN_WEBGL_VERSION=2',
'-sMAX_WEBGL_VERSION=2',
'-sASYNCIFY',
'-sASYNCIFY_IMPORTS="[async_sleep, wasi_snapshot_preview1.fd_write]"',
'-sASYNCIFY_STACK_SIZE=16384',
'-sGL_TESTING',
'-lwebsocket.js',
})
end
filter({ 'system:emscripten', 'options:with-webgpu', 'options:not with_wagyu' })
do
linkoptions({
'-sUSE_WEBGPU',
})
end
filter('files:**.html')
do
buildmessage('Copying %{file.relpath} to %{cfg.targetdir}')
buildcommands({ 'cp %{file.relpath} %{cfg.targetdir}/%{file.name}' })
buildoutputs({ '%{cfg.targetdir}/%{file.name}' })
end
filter({})
if RIVE_WAGYU_PORT then
buildoptions({ RIVE_WAGYU_PORT })
linkoptions({ RIVE_WAGYU_PORT })
end
end
rive_tools_project('tools_common', 'StaticLib')
do
files({
'common/*.cpp',
'unit_tests/assets/*.cpp',
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_gl.cpp',
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_d3d.cpp',
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_d3d12.cpp',
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_vulkan.cpp',
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_dawn.cpp',
RIVE_PLS_DIR .. '/shader_hotload/**.cpp',
})
if _TARGET_OS == 'windows' then
externalincludedirs({
dx12_headers .. '/include/directx',
})
end
filter({ 'options:for_unreal' })
do
defines({ 'RIVE_UNREAL', 'RIVE_TOOLS_NO_GLFW', 'RIVE_TOOLS_NO_GL' })
end
filter({ 'toolset:not msc' })
do
buildoptions({ '-Wshorten-64-to-32' })
end
filter('system:macosx or ios')
do
files({ 'common/*.mm' })
end
filter('system:macosx')
do
files({
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_metal.mm',
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_dawn_helper.mm',
})
end
filter('system:emscripten')
do
files({ 'common/rive_wasm_app.cpp' })
end
filter({})
end