blob: dd3e22b099dfeb419c1e9fb78bac1bbc73086837 [file] [log] [blame]
workspace "rive"
configurations {"debug", "release"}
require 'setup_compiler'
-- Are we in the "rive-pls" or "rive" repository?
local handle = io.popen("git remote -v")
local git_remote = handle:read("*a")
handle:close()
if string.find(git_remote, "rive%-pls") then
-- In rive-pls. 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_GLES"}
end
filter "system:ios"
do
defines {"RIVE_IOS"}
end
filter "system:emscripten"
do
defines {"RIVE_WASM"}
end
newoption {
trigger = "obfuscate",
description = "force-include ../obfuscator/pls_renames.h to obfuscate PLS variable names",
}
filter {"options:obfuscate"}
do
forceincludes {"../obfuscator/pls_renames.h"}
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 or obfuscate 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"}
filter "system:macosx"
do
buildcommands {makecommand .. " rive_pls_macosx_metallib"}
rebuildcommands {makecommand .. " rive_pls_macosx_metallib"}
end
filter "system:ios"
do
buildcommands {makecommand .. " rive_pls_ios_metallib"}
rebuildcommands {makecommand .. " rive_pls_ios_metallib"}
end
filter {"system:not macosx", "system:not ios"}
do
buildcommands {makecommand .. " minify"}
rebuildcommands {makecommand .. " minify"}
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)",
}
project "rive_pls_renderer"
do
dependson 'rive_pls_shaders'
kind 'StaticLib'
language "C++"
cppdialect "C++17"
exceptionhandling "Off"
rtti "Off"
targetdir "%{cfg.buildcfg}"
objdir "obj/%{cfg.buildcfg}"
includedirs {"../include",
"../glad",
"../renderer",
RIVE_RUNTIME_DIR .. "/include"}
flags { "FatalWarnings" }
files {"../renderer/*.cpp"}
-- The Visual Studio clang toolset doesn't recognize -ffp-contract.
filter "system:not windows"
do
buildoptions {"-ffp-contract=on",
"-fassociative-math"}
end
filter "system:windows or macosx or linux or android"
do
files {"../renderer/gl/buffer_ring_gl.cpp",
"../renderer/gl/gl_utils.cpp",
"../renderer/gl/pls_render_context_gl.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"}
filter {'system:android', 'options:arch=x86'}
do
targetdir '%{cfg.system}/x86/%{cfg.buildcfg}/lib'
objdir '%{cfg.system}/x86/%{cfg.buildcfg}/obj'
end
filter {'system:android', 'options:arch=x64'}
do
targetdir '%{cfg.system}/x64/%{cfg.buildcfg}/lib'
objdir '%{cfg.system}/x64/%{cfg.buildcfg}/obj'
end
filter {'system:android', 'options:arch=arm'}
do
targetdir '%{cfg.system}/arm/%{cfg.buildcfg}/lib'
objdir '%{cfg.system}/arm/%{cfg.buildcfg}/obj'
end
filter {'system:android', 'options:arch=arm64'}
do
targetdir '%{cfg.system}/arm64/%{cfg.buildcfg}/lib'
objdir '%{cfg.system}/arm64/%{cfg.buildcfg}/obj'
end
end
filter {"system:macosx or ios", "options:not nop-obj-c"}
do
files {"../renderer/metal/*.mm"}
buildoptions {"-fobjc-arc"}
end
filter {"options:nop-obj-c"}
do
files {"../renderer/metal/pls_metal_nop.cpp"}
end
filter "system:windows"
do
architecture "x64"
files {"../renderer/d3d/*.cpp"}
end
if os.host() == 'macosx'
then
iphoneos_sysroot = os.outputof("xcrun --sdk iphoneos --show-sdk-path")
iphonesimulator_sysroot = os.outputof("xcrun --sdk iphonesimulator --show-sdk-path")
filter "system:ios"
do
buildoptions {"-Wno-deprecated-declarations"} -- Suppress warnings that GL is deprecated.
end
filter {"system:ios", "options:variant=system"}
do
targetdir "iphoneos_%{cfg.buildcfg}"
objdir "obj/iphoneos_%{cfg.buildcfg}"
buildoptions {
"--target=arm64-apple-ios13.0.0",
"-mios-version-min=13.0.0",
"-isysroot " .. iphoneos_sysroot,
}
end
filter {"system:ios", "options:variant=simulator"}
do
targetdir "iphonesimulator_%{cfg.buildcfg}"
objdir "obj/iphonesimulator_%{cfg.buildcfg}"
buildoptions {
"--target=arm64-apple-ios13.0.0-simulator",
"-mios-version-min=13.0.0",
"-isysroot " .. iphonesimulator_sysroot,
}
end
end
filter "system:emscripten"
do
targetdir "wasm_%{cfg.buildcfg}"
objdir "obj/wasm_%{cfg.buildcfg}"
files {"../renderer/gl/pls_impl_webgl.cpp"}
buildoptions {"-pthread"}
end
filter "configurations:debug"
do
defines {"DEBUG"}
symbols "On"
end
filter "configurations:release"
do
defines {"RELEASE"}
defines {"NDEBUG"}
optimize "On"
end
end
newoption {
trigger = 'variant',
value = 'type',
description = 'Choose a particular variant to build',
allowed = {
{'system', 'Builds the static library for the provided system'},
{'simulator', 'Builds for an emulator/simulator for the provided system'}
},
default = 'system'
}
newoption {
trigger = 'arch',
value = 'ABI',
description = 'The ABI with the right toolchain for this build, generally with Android',
allowed = {
{'x86'},
{'x64'},
{'arm'},
{'arm64'}
}
}