blob: 945e046a4e95b5097d171b828c63f865705fac95 [file] [log] [blame]
dofile('rive_build_config.lua')
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/build/premake5.lua')
end
function rive_tools_project(name, project_kind)
project(name)
cppdialect('C++17')
if project_kind == 'RiveTool' then
kind(
_OPTIONS['for_unreal'] and 'StaticLib'
or _OPTIONS['os'] == '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',
})
else
kind(project_kind)
end
flags({ 'FatalCompileWarnings' })
defines({
'SK_GL',
'GL_SILENCE_DEPRECATION', -- For glReadPixels()
'YOGA_EXPORT=',
})
includedirs({
'.',
RIVE_PLS_DIR .. '/include',
RIVE_PLS_DIR .. '/path_fiddle',
RIVE_PLS_DIR .. '/src',
RIVE_RUNTIME_DIR .. '/include',
RIVE_RUNTIME_DIR .. '/cg_renderer/include',
'unit_tests',
})
includedirs({
'.',
RIVE_PLS_DIR .. '/include',
RIVE_PLS_DIR .. '/path_fiddle',
RIVE_PLS_DIR .. '/src',
RIVE_RUNTIME_DIR .. '/include',
RIVE_RUNTIME_DIR .. '/cg_renderer/include',
})
externalincludedirs({
'include',
RIVE_PLS_DIR .. '/glad',
RIVE_RUNTIME_DIR .. '/skia/dependencies/glfw/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('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' })
links({ 'skia', 'rive_skia_renderer' })
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')
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.
cppdialect('c++latest')
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',
'libjpeg',
'libwebp',
'rive_yoga',
'rive_harfbuzz',
'rive_sheenbidi',
})
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', 'dxgi', '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
links({
'dawn_native_static',
'webgpu_dawn',
'dawn_platform_static',
'dawn_proc_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
end
filter({})
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_vulkan.cpp',
RIVE_PLS_DIR .. '/path_fiddle/fiddle_context_dawn.cpp',
})
filter({ 'options:for_unreal' })
do
defines({ 'RIVE_UNREAL', 'RIVE_TOOLS_NO_GLFW', 'RIVE_TOOLS_NO_GL' })
cppdialect('C++20')
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({})
end