Reorganize premake

Diffs=
b8875ef31 Reorganize premake (#6522)

Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
This commit is contained in:
csmartdalton
2024-01-26 21:20:44 +00:00
parent 2126435e8c
commit 11084a7167
13 changed files with 1092 additions and 225 deletions

View File

@@ -1 +1 @@
fddb050ca322c797dbbd01292f7d4f2b568eb627
b8875ef3109298913c20335cfb70eb9831f1703f

View File

@@ -1,40 +0,0 @@
#!/bin/sh
set -e
source ../../dependencies/macosx/config_directories.sh
CONFIG=debug
TOOLS=
for var in "$@"; do
if [[ $var = "release" ]]; then
CONFIG=release
fi
if [[ $var = "tools" ]]; then
TOOLS="--with_rive_tools"
fi
if [[ $var = "text" ]]; then
TOOLS="--with_rive_text"
fi
done
if [[ ! -f "$DEPENDENCIES/bin/premake5" ]]; then
pushd $DEPENDENCIES_SCRIPTS
./get_premake5.sh
popd
fi
export PREMAKE=$DEPENDENCIES/bin/premake5
pushd ..
$PREMAKE --file=./premake5.lua gmake2 $TOOLS
for var in "$@"; do
if [[ $var = "clean" ]]; then
make clean
make config=release clean
fi
done
make config=$CONFIG -j$(($(sysctl -n hw.physicalcpu) + 1))
popd

385
build/rive_build_config.lua Normal file
View File

@@ -0,0 +1,385 @@
workspace 'rive'
newoption {
trigger = "config",
description = "one-and-only config (for multiple configs, target a new --out directory)",
allowed = {{'debug'}, {'release'}, {nil}},
default = nil,
}
newoption {
trigger = "release",
description = "shortcut for '--config=release'",
}
if _OPTIONS['release']
then
if _OPTIONS['config']
then
error("use either '--release' or '--config=release/debug' (not both)")
end
_OPTIONS["config"] = "release"
_OPTIONS["release"] = nil
elseif not _OPTIONS['config']
then
_OPTIONS["config"] = "debug"
end
RIVE_BUILD_CONFIG = _OPTIONS["config"]
newoption {
trigger = "out",
description = "Directory to generate build files",
default = nil,
}
RIVE_BUILD_OUT = _OPTIONS["out"] or ("out/" .. RIVE_BUILD_CONFIG)
newoption {
trigger = 'toolset',
value = 'type',
description = 'Choose which toolchain to build with',
allowed = {
{'clang', 'Build with Clang'},
{'msc', 'Build with the Microsoft C/C++ compiler'}
},
default = 'clang',
}
newoption {
trigger = 'arch',
value = 'ABI',
description = 'The ABI with the right toolchain for this build, generally with Android',
allowed = {
{'host'},
{'x86'},
{'x64'},
{'arm'},
{'arm64'},
{'universal', '"fat" library on apple platforms'},
{'wasm', 'emscripten targeting web assembly'},
{'js', 'emscripten targeting javascript'}
},
default = 'host',
}
newoption {
trigger = 'variant',
value = 'type',
description = 'Choose a particular variant to build',
allowed = {
{'system', 'Builds the static library for the provided system'},
{'emulator', 'Builds for a simulator for the provided system'}
},
default = 'system',
}
newoption {
trigger = "with-rtti",
description = "don't disable rtti (nonstandard for Rive)",
}
newoption {
trigger = "with-exceptions",
description = "don't disable exceptions (nonstandard for Rive)",
}
location (_WORKING_DIR .. "/" .. RIVE_BUILD_OUT)
targetdir (_WORKING_DIR .. "/" .. RIVE_BUILD_OUT)
objdir (_WORKING_DIR .. "/" .. RIVE_BUILD_OUT .. "/obj")
toolset (_OPTIONS["toolset"] or "clang")
language 'C++'
cppdialect 'C++17'
configurations {"default"}
filter {"options:not with-rtti"} rtti "Off"
filter {"options:with-rtti"} rtti "On"
filter {"options:not with-exceptions"} exceptionhandling "Off"
filter {"options:with-exceptions"} exceptionhandling "On"
filter 'options:config=debug'
do
defines {'DEBUG'}
symbols 'On'
end
filter 'options:config=release'
do
defines {'RELEASE'}
defines {'NDEBUG'}
optimize 'On'
end
filter {'system:not windows', 'options:config=release'}
do
buildoptions {'-flto=full'}
end
filter 'system:windows'
do
staticruntime "on" -- Match Skia's /MT flag for link compatibility
runtime "Release" -- Use /MT even in debug (/MTd is incompatible with Skia)
architecture 'x64'
defines {'_USE_MATH_DEFINES'}
end
filter {'system:windows', 'options:toolset=clang'}
do
buildoptions {
'-Wno-c++98-compat',
'-Wno-c++20-compat',
'-Wno-c++98-compat-pedantic',
'-Wno-c99-extensions',
'-Wno-ctad-maybe-unsupported',
'-Wno-deprecated-copy-with-user-provided-dtor',
'-Wno-deprecated-declarations',
'-Wno-documentation',
'-Wno-documentation-pedantic',
'-Wno-documentation-unknown-command',
'-Wno-double-promotion',
'-Wno-exit-time-destructors',
'-Wno-float-equal',
'-Wno-global-constructors',
'-Wno-implicit-float-conversion',
'-Wno-newline-eof',
'-Wno-old-style-cast',
'-Wno-reserved-identifier',
'-Wno-shadow',
'-Wno-sign-compare',
'-Wno-sign-conversion',
'-Wno-unused-macros',
'-Wno-unused-parameter',
'-Wno-four-char-constants',
'-Wno-unreachable-code',
'-Wno-switch-enum',
'-Wno-missing-field-initializers',
'-Wno-unsafe-buffer-usage'
}
end
filter {'system:windows', 'options:toolset=msc'}
do
-- We currently suppress several warnings for the MSVC build, some serious. Once this build
-- is fully integrated into GitHub actions, we will definitely want to address these.
disablewarnings {
"4061", -- enumerator 'identifier' in switch of enum 'enumeration' is not explicitly
-- handled by a case label
"4100", -- 'identifier': unreferenced formal parameter
"4201", -- nonstandard extension used: nameless struct/union
"4244", -- 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
"4245", -- 'conversion_type': conversion from 'type1' to 'type2', signed/unsigned
-- mismatch
"4267", -- 'variable': conversion from 'size_t' to 'type', possible loss of data
"4355", -- 'this': used in base member initializer list
"4365", -- 'expression': conversion from 'type1' to 'type2', signed/unsigned mismatch
"4388", -- 'expression': signed/unsigned mismatch
"4389", -- 'operator': signed/unsigned mismatch
"4458", -- declaration of 'identifier' hides class member
"4514", -- 'function': unreferenced inline function has been removed
"4583", -- 'Catch::clara::detail::ResultValueBase<T>::m_value': destructor is not
-- implicitly called
"4623", -- 'Catch::AssertionInfo': default constructor was implicitly defined as deleted
"4625", -- 'derived class': copy constructor was implicitly defined as deleted because a
-- base class copy constructor is inaccessible or deleted
"4626", -- 'derived class': assignment operator was implicitly defined as deleted
-- because a base class assignment operator is inaccessible or deleted
"4820", -- 'bytes' bytes padding added after construct 'member_name'
"4868", -- (catch.hpp) compiler may not enforce left-to-right evaluation order in braced
-- initializer list
"5026", -- 'type': move constructor was implicitly defined as deleted
"5027", -- 'type': move assignment operator was implicitly defined as deleted
"5039", -- (catch.hpp) 'AddVectoredExceptionHandler': pointer or reference to
-- potentially throwing function passed to 'extern "C"' function under -EHc.
-- Undefined behavior may occur if this function throws an exception.
"5045", -- Compiler will insert Spectre mitigation for memory load if /Qspectre switch
-- specified
"5204", -- 'Catch::Matchers::Impl::MatcherMethod<T>': class has virtual functions, but
-- its trivial destructor is not virtual; instances of objects derived from this
-- class may not be destructed correctly
"5219", -- implicit conversion from 'type-1' to 'type-2', possible loss of data
"5262", -- MSVC\14.34.31933\include\atomic(917,9): implicit fall-through occurs here;
-- are you missing a break statement?
"5264", -- 'rive::math::PI': 'const' variable is not used
"4647", -- behavior change: __is_pod(rive::Vec2D) has different value in previous versions
}
end
filter{}
-- Don't use filter() here because we don't want to generate the "android_ndk" toolset if not
-- building for android.
if _OPTIONS["os"] == "android"
then
pic "on" -- Position-independent code is required for NDK libraries.
local ndk = os.getenv("NDK_PATH")
if not ndk or ndk == "" then
error("export $NDK_PATH")
end
local ndk_toolchain = ndk .. "/toolchains/llvm/prebuilt"
if os.host() == 'windows' then
ndk_toolchain = ndk_toolchain .. "/windows-x86_64"
elseif os.host() == 'macosx' then
ndk_toolchain = ndk_toolchain .. "/darwin-x86_64"
else
ndk_toolchain = ndk_toolchain .. "/linux-x86_64"
end
-- clone the clang toolset into a custom one called "android_ndk".
premake.tools.android_ndk = {}
for k,v in pairs(premake.tools.clang) do
premake.tools.android_ndk[k] = v
end
-- update the android_ndk toolset to use the appropriate binaries.
local android_ndk_tools = {
cc = ndk_toolchain .. "/bin/clang",
cxx = ndk_toolchain .. "/bin/clang++",
ar = ndk_toolchain .. "/bin/llvm-ar"
}
function premake.tools.android_ndk.gettoolname(cfg, tool)
return android_ndk_tools[tool]
end
toolset "android_ndk"
buildoptions {
"--sysroot=" .. ndk_toolchain .. "/sysroot",
"-fdata-sections",
"-ffunction-sections",
"-funwind-tables",
"-fstack-protector-strong",
"-no-canonical-prefixes",
}
linkoptions {
"--sysroot=" .. ndk_toolchain .. "/sysroot",
"-fdata-sections",
"-ffunction-sections",
"-funwind-tables",
"-fstack-protector-strong",
"-no-canonical-prefixes",
"-Wl,--fatal-warnings",
"-Wl,--gc-sections",
"-Wl,--no-rosegment",
"-Wl,--no-undefined",
"-static-libstdc++",
}
filter "options:arch=x86"
do
architecture "x86"
buildoptions {"--target=i686-none-linux-android21"}
linkoptions {"--target=i686-none-linux-android21"}
end
filter "options:arch=x64"
do
architecture "x64"
buildoptions {"--target=x86_64-none-linux-android21"}
linkoptions {"--target=x86_64-none-linux-android21"}
end
filter "options:arch=arm"
do
architecture "arm"
buildoptions {"--target=armv7a-none-linux-android21"}
linkoptions {"--target=armv7a-none-linux-android21"}
end
filter "options:arch=arm64"
do
architecture "arm64"
buildoptions {"--target=aarch64-none-linux-android21"}
linkoptions {"--target=aarch64-none-linux-android21"}
end
filter {}
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 {'-fembed-bitcode '}
end
filter {'system:ios', 'options:variant=system'}
do
buildoptions {
'--target=arm64-apple-ios13.0.0',
'-mios-version-min=13.0.0',
'-isysroot ' .. iphoneos_sysroot
}
end
filter {'system:ios', 'options:variant=emulator'}
do
buildoptions {
'--target=arm64-apple-ios13.0.0-simulator',
'-mios-version-min=13.0.0',
'-isysroot ' .. iphonesimulator_sysroot
}
end
filter "system:macosx"
do
buildoptions {"-fobjc-arc"}
end
filter {'system:macosx', 'options:arch=arm64 or arch=universal'}
do
buildoptions {'-arch arm64'}
end
filter {'system:macosx', 'options:arch=x64 or arch=universal'}
do
buildoptions {'-arch x86_64'}
end
filter {'system:ios', 'options:variant=system', 'options:arch=arm64 or arch=universal'}
do
buildoptions {'-arch arm64'}
end
filter {'system:ios', 'options:variant=emulator', 'options:arch=x64 or arch=universal'}
do
buildoptions {'-arch x86_64'}
end
filter {'system:ios', 'options:variant=emulator', 'options:arch=arm64 or arch=universal'}
do
buildoptions {'-arch arm64'}
end
filter{}
end
if _OPTIONS['arch'] == 'wasm' or _OPTIONS['arch'] == 'js'
then
-- Target emscripten via https://github.com/TurkeyMan/premake-emscripten.git
-- Premake doesn't properly load the _preload.lua for this module, so we load it here manually.
-- BUG: https://github.com/premake/premake-core/issues/1235
require "premake-emscripten/_preload"
require "premake-emscripten/emscripten"
system "emscripten"
toolset "emcc"
linkoptions {
"-sALLOW_MEMORY_GROWTH",
}
filter "options:arch=wasm"
do
buildoptions {
"-msimd128",
}
linkoptions {
"-sWASM=1",
}
end
filter "options:arch=js"
do
linkoptions {
"-sWASM=0",
}
end
filter{}
end

View File

@@ -1,125 +0,0 @@
workspace 'rive'
configurations {'debug', 'release'}
require 'setup_compiler'
dependencies = os.getenv('DEPENDENCIES')
project 'rive_cg_renderer'
do
kind 'StaticLib'
language 'C++'
cppdialect 'C++17'
targetdir '%{cfg.system}/bin/%{cfg.buildcfg}'
objdir '%{cfg.system}/obj/%{cfg.buildcfg}'
includedirs {
'../include',
'../../include',
}
libdirs {'../../../build/%{cfg.system}/bin/%{cfg.buildcfg}'}
files {
'../src/**.cpp',
}
flags {
'FatalCompileWarnings',
}
filter "system:windows"
do
architecture 'x64'
defines {'_USE_MATH_DEFINES'}
end
filter {'system:macosx', 'options:variant=runtime'}
do
buildoptions {
'-fembed-bitcode -arch arm64 -arch x86_64',
}
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', 'options:variant=system'}
do
buildoptions {
'-mios-version-min=13.0 -fembed-bitcode -arch arm64 -isysroot ' .. iphoneos_sysroot
}
end
filter {'system:ios', 'options:variant=emulator'}
do
buildoptions {
'--target=arm64-apple-ios13.0.0-simulator -mios-version-min=13.0 -arch x86_64 -arch arm64 -isysroot ' ..
iphonesimulator_sysroot
}
targetdir '%{cfg.system}_sim/bin/%{cfg.buildcfg}'
objdir '%{cfg.system}_sim/obj/%{cfg.buildcfg}'
end
end
filter {'configurations:release', 'system:macosx'}
do
buildoptions {'-flto=full'}
end
filter {'configurations:release', 'system:android'}
do
buildoptions {'-flto=full'}
end
filter {'configurations:release', 'system:ios'}
do
buildoptions {'-flto=full'}
end
filter 'configurations:debug'
do
defines {'DEBUG'}
symbols 'On'
end
filter 'configurations:release'
do
defines {'RELEASE', 'NDEBUG'}
optimize 'On'
end
filter {'options:with_rive_text'}
do
defines {'WITH_RIVE_TEXT'}
end
end
newoption {
trigger = 'with_rive_text',
description = 'Enables text experiments'
}
newoption {
trigger = 'variant',
value = 'type',
description = 'Choose a particular variant to build',
allowed = {
{'system', 'Builds the static library for the provided system'},
{'emulator', 'Builds for an emulator/simulator for the provided system'},
{'runtime', 'Build the static library specifically targeting our runtimes'}
},
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'}
}
}

65
cg_renderer/premake5.lua Normal file
View File

@@ -0,0 +1,65 @@
dofile 'rive_build_config.lua'
dependencies = os.getenv('DEPENDENCIES')
project 'rive_cg_renderer'
do
kind 'StaticLib'
includedirs {
'include',
'../include',
}
libdirs {'../../build/%{cfg.system}/bin/' .. RIVE_BUILD_CONFIG}
files {
'src/**.cpp',
}
flags {
'FatalCompileWarnings',
}
filter "system:windows"
do
architecture 'x64'
defines {'_USE_MATH_DEFINES'}
end
filter {'system:macosx', 'options:variant=runtime'}
do
buildoptions {
'-fembed-bitcode -arch arm64 -arch x86_64',
}
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', 'options:variant=system'}
do
buildoptions {
'-mios-version-min=13.0 -fembed-bitcode -arch arm64 -isysroot ' .. iphoneos_sysroot
}
end
filter {'system:ios', 'options:variant=emulator'}
do
buildoptions {
'--target=arm64-apple-ios13.0.0-simulator -mios-version-min=13.0 -arch x86_64 -arch arm64 -isysroot ' ..
iphonesimulator_sysroot
}
end
end
filter {'options:with_rive_text'}
do
defines {'WITH_RIVE_TEXT'}
end
end
newoption {
trigger = 'with_rive_text',
description = 'Enables text experiments'
}

20
decoders/premake5_v2.lua Normal file
View File

@@ -0,0 +1,20 @@
dofile 'setup_compiler.lua'
rive = path.getabsolute("../")
dofile(rive .. '/dependencies/premake5_libpng_v2.lua')
project 'rive_decoders'
dependson 'libpng'
kind 'StaticLib'
flags { "FatalWarnings" }
includedirs {
'include',
'../include',
libpng,
}
files {
'src/**.cpp'
}

247
dependencies/premake5_harfbuzz_v2.lua vendored Normal file
View File

@@ -0,0 +1,247 @@
dofile 'rive_build_config.lua'
local dependency = require 'dependency'
harfbuzz = dependency.github('harfbuzz/harfbuzz', '6.0.0')
project 'rive_harfbuzz'
do
kind 'StaticLib'
includedirs {
'../',
harfbuzz .. '/src'
}
files {
harfbuzz .. '/src/hb-aat-layout-ankr-table.hh',
harfbuzz .. '/src/hb-aat-layout-bsln-table.hh',
harfbuzz .. '/src/hb-aat-layout-common.hh',
harfbuzz .. '/src/hb-aat-layout-feat-table.hh',
harfbuzz .. '/src/hb-aat-layout-just-table.hh',
harfbuzz .. '/src/hb-aat-layout-kerx-table.hh',
harfbuzz .. '/src/hb-aat-layout-morx-table.hh',
harfbuzz .. '/src/hb-aat-layout-opbd-table.hh',
harfbuzz .. '/src/hb-aat-layout-trak-table.hh',
harfbuzz .. '/src/hb-aat-layout.cc',
harfbuzz .. '/src/hb-aat-layout.hh',
harfbuzz .. '/src/hb-aat-ltag-table.hh',
harfbuzz .. '/src/hb-aat-map.cc',
harfbuzz .. '/src/hb-aat-map.hh',
harfbuzz .. '/src/hb-aat.h',
harfbuzz .. '/src/hb-algs.hh',
harfbuzz .. '/src/hb-array.hh',
harfbuzz .. '/src/hb-atomic.hh',
harfbuzz .. '/src/hb-bimap.hh',
harfbuzz .. '/src/hb-bit-page.hh',
harfbuzz .. '/src/hb-bit-set-invertible.hh',
harfbuzz .. '/src/hb-bit-set.hh',
harfbuzz .. '/src/hb-blob.cc',
harfbuzz .. '/src/hb-blob.hh',
harfbuzz .. '/src/hb-buffer-deserialize-json.hh',
harfbuzz .. '/src/hb-buffer-deserialize-text.hh',
harfbuzz .. '/src/hb-buffer-serialize.cc',
harfbuzz .. '/src/hb-buffer-verify.cc',
harfbuzz .. '/src/hb-buffer.cc',
harfbuzz .. '/src/hb-buffer.hh',
harfbuzz .. '/src/hb-cache.hh',
harfbuzz .. '/src/hb-cff-interp-common.hh',
harfbuzz .. '/src/hb-cff-interp-cs-common.hh',
harfbuzz .. '/src/hb-cff-interp-dict-common.hh',
harfbuzz .. '/src/hb-cff1-interp-cs.hh',
harfbuzz .. '/src/hb-cff2-interp-cs.hh',
harfbuzz .. '/src/hb-common.cc',
harfbuzz .. '/src/hb-config.hh',
harfbuzz .. '/src/hb-debug.hh',
harfbuzz .. '/src/hb-dispatch.hh',
harfbuzz .. '/src/hb-draw.cc',
harfbuzz .. '/src/hb-draw.h',
harfbuzz .. '/src/hb-draw.hh',
harfbuzz .. '/src/hb-face.cc',
harfbuzz .. '/src/hb-face.hh',
harfbuzz .. '/src/hb-font.cc',
harfbuzz .. '/src/hb-font.hh',
harfbuzz .. '/src/hb-iter.hh',
harfbuzz .. '/src/hb-kern.hh',
harfbuzz .. '/src/hb-machinery.hh',
harfbuzz .. '/src/hb-map.cc',
harfbuzz .. '/src/hb-map.hh',
harfbuzz .. '/src/hb-meta.hh',
harfbuzz .. '/src/hb-ms-feature-ranges.hh',
harfbuzz .. '/src/hb-mutex.hh',
harfbuzz .. '/src/hb-null.hh',
harfbuzz .. '/src/hb-number-parser.hh',
harfbuzz .. '/src/hb-number.cc',
harfbuzz .. '/src/hb-number.hh',
harfbuzz .. '/src/hb-object.hh',
harfbuzz .. '/src/hb-open-file.hh',
harfbuzz .. '/src/hb-open-type.hh',
harfbuzz .. '/src/hb-ot-cff-common.hh',
harfbuzz .. '/src/hb-ot-cff1-std-str.hh',
harfbuzz .. '/src/hb-ot-cff1-table.cc',
harfbuzz .. '/src/hb-ot-cff1-table.hh',
harfbuzz .. '/src/hb-ot-cff2-table.cc',
harfbuzz .. '/src/hb-ot-cff2-table.hh',
harfbuzz .. '/src/hb-ot-cmap-table.hh',
harfbuzz .. '/src/hb-ot-color-cbdt-table.hh',
harfbuzz .. '/src/hb-ot-color-colr-table.hh',
harfbuzz .. '/src/hb-ot-color-colrv1-closure.hh',
harfbuzz .. '/src/hb-ot-color-cpal-table.hh',
harfbuzz .. '/src/hb-ot-color-sbix-table.hh',
harfbuzz .. '/src/hb-ot-color-svg-table.hh',
harfbuzz .. '/src/hb-ot-color.cc',
harfbuzz .. '/src/hb-ot-color.h',
harfbuzz .. '/src/hb-ot-deprecated.h',
harfbuzz .. '/src/hb-ot-face-table-list.hh',
harfbuzz .. '/src/hb-ot-face.cc',
harfbuzz .. '/src/hb-ot-face.hh',
harfbuzz .. '/src/hb-ot-font.cc',
harfbuzz .. '/src/hb-ot-gasp-table.hh',
harfbuzz .. '/src/hb-ot-glyf-table.hh',
harfbuzz .. '/src/hb-ot-hdmx-table.hh',
harfbuzz .. '/src/hb-ot-head-table.hh',
harfbuzz .. '/src/hb-ot-hhea-table.hh',
harfbuzz .. '/src/hb-ot-hmtx-table.hh',
harfbuzz .. '/src/hb-ot-kern-table.hh',
harfbuzz .. '/src/hb-ot-layout-base-table.hh',
harfbuzz .. '/src/hb-ot-layout-common.hh',
harfbuzz .. '/src/hb-ot-layout-gdef-table.hh',
harfbuzz .. '/src/hb-ot-layout-gpos-table.hh',
harfbuzz .. '/src/hb-ot-layout-gsub-table.hh',
harfbuzz .. '/src/hb-ot-layout-gsubgpos.hh',
harfbuzz .. '/src/hb-ot-layout-jstf-table.hh',
harfbuzz .. '/src/hb-ot-layout.cc',
harfbuzz .. '/src/hb-ot-layout.hh',
harfbuzz .. '/src/hb-ot-map.cc',
harfbuzz .. '/src/hb-ot-map.hh',
harfbuzz .. '/src/hb-ot-math-table.hh',
harfbuzz .. '/src/hb-ot-math.cc',
harfbuzz .. '/src/hb-ot-maxp-table.hh',
harfbuzz .. '/src/hb-ot-meta-table.hh',
harfbuzz .. '/src/hb-ot-meta.cc',
harfbuzz .. '/src/hb-ot-meta.h',
harfbuzz .. '/src/hb-ot-metrics.cc',
harfbuzz .. '/src/hb-ot-metrics.hh',
harfbuzz .. '/src/hb-ot-name-language-static.hh',
harfbuzz .. '/src/hb-ot-name-language.hh',
harfbuzz .. '/src/hb-ot-name-table.hh',
harfbuzz .. '/src/hb-ot-name.cc',
harfbuzz .. '/src/hb-ot-name.h',
harfbuzz .. '/src/hb-ot-os2-table.hh',
harfbuzz .. '/src/hb-ot-os2-unicode-ranges.hh',
harfbuzz .. '/src/hb-ot-post-macroman.hh',
harfbuzz .. '/src/hb-ot-post-table-v2subset.hh',
harfbuzz .. '/src/hb-ot-post-table.hh',
harfbuzz .. '/src/hb-ot-shaper-arabic-fallback.hh',
harfbuzz .. '/src/hb-ot-shaper-arabic-joining-list.hh',
harfbuzz .. '/src/hb-ot-shaper-arabic-pua.hh',
harfbuzz .. '/src/hb-ot-shaper-arabic-table.hh',
harfbuzz .. '/src/hb-ot-shaper-arabic-win1256.hh',
harfbuzz .. '/src/hb-ot-shaper-arabic.cc',
harfbuzz .. '/src/hb-ot-shaper-arabic.hh',
harfbuzz .. '/src/hb-ot-shaper-default.cc',
harfbuzz .. '/src/hb-ot-shaper-hangul.cc',
harfbuzz .. '/src/hb-ot-shaper-hebrew.cc',
harfbuzz .. '/src/hb-ot-shaper-indic-table.cc',
harfbuzz .. '/src/hb-ot-shaper-indic.cc',
harfbuzz .. '/src/hb-ot-shaper-indic.hh',
harfbuzz .. '/src/hb-ot-shaper-khmer.cc',
harfbuzz .. '/src/hb-ot-shaper-myanmar.cc',
harfbuzz .. '/src/hb-ot-shaper-syllabic.cc',
harfbuzz .. '/src/hb-ot-shaper-syllabic.hh',
harfbuzz .. '/src/hb-ot-shaper-thai.cc',
harfbuzz .. '/src/hb-ot-shaper-use-table.hh',
harfbuzz .. '/src/hb-ot-shaper-use.cc',
harfbuzz .. '/src/hb-ot-shaper-vowel-constraints.cc',
harfbuzz .. '/src/hb-ot-shaper-vowel-constraints.hh',
harfbuzz .. '/src/hb-ot-shaper.hh',
harfbuzz .. '/src/hb-ot-shaper-indic-machine.hh',
harfbuzz .. '/src/hb-ot-shaper-khmer-machine.hh',
harfbuzz .. '/src/hb-ot-shaper-myanmar-machine.hh',
harfbuzz .. '/src/hb-ot-shaper-use-machine.hh',
harfbuzz .. '/src/hb-ot-shape-fallback.cc',
harfbuzz .. '/src/hb-ot-shape-fallback.hh',
harfbuzz .. '/src/hb-ot-shape-normalize.cc',
harfbuzz .. '/src/hb-ot-shape-normalize.hh',
harfbuzz .. '/src/hb-ot-shape.cc',
harfbuzz .. '/src/hb-ot-shape.hh',
harfbuzz .. '/src/hb-ot-stat-table.hh',
harfbuzz .. '/src/hb-ot-tag-table.hh',
harfbuzz .. '/src/hb-ot-tag.cc',
harfbuzz .. '/src/hb-ot-var-avar-table.hh',
harfbuzz .. '/src/hb-ot-var-common.hh',
harfbuzz .. '/src/hb-ot-var-fvar-table.hh',
harfbuzz .. '/src/hb-ot-var-gvar-table.hh',
harfbuzz .. '/src/hb-ot-var-hvar-table.hh',
harfbuzz .. '/src/hb-ot-var-mvar-table.hh',
harfbuzz .. '/src/hb-ot-var.cc',
harfbuzz .. '/src/hb-ot-vorg-table.hh',
harfbuzz .. '/src/hb-pool.hh',
harfbuzz .. '/src/hb-priority-queue.hh',
harfbuzz .. '/src/hb-repacker.hh',
harfbuzz .. '/src/hb-sanitize.hh',
harfbuzz .. '/src/hb-serialize.hh',
harfbuzz .. '/src/hb-set-digest.hh',
harfbuzz .. '/src/hb-set.cc',
harfbuzz .. '/src/hb-set.hh',
harfbuzz .. '/src/hb-shape-plan.cc',
harfbuzz .. '/src/hb-shape-plan.hh',
harfbuzz .. '/src/hb-shape.cc',
harfbuzz .. '/src/hb-shaper-impl.hh',
harfbuzz .. '/src/hb-shaper-list.hh',
harfbuzz .. '/src/hb-shaper.cc',
harfbuzz .. '/src/hb-shaper.hh',
harfbuzz .. '/src/hb-static.cc',
harfbuzz .. '/src/hb-string-array.hh',
harfbuzz .. '/src/hb-subset-cff-common.cc',
harfbuzz .. '/src/hb-subset-cff-common.hh',
harfbuzz .. '/src/hb-subset-cff1.cc',
harfbuzz .. '/src/hb-subset-cff1.hh',
harfbuzz .. '/src/hb-subset-cff2.cc',
harfbuzz .. '/src/hb-subset-cff2.hh',
harfbuzz .. '/src/hb-subset-input.cc',
harfbuzz .. '/src/hb-subset-input.hh',
harfbuzz .. '/src/hb-subset-plan.cc',
harfbuzz .. '/src/hb-subset-plan.hh',
harfbuzz .. '/src/hb-subset-repacker.cc',
harfbuzz .. '/src/hb-subset-repacker.h',
harfbuzz .. '/src/hb-subset.cc',
harfbuzz .. '/src/hb-subset.hh',
harfbuzz .. '/src/hb-ucd-table.hh',
harfbuzz .. '/src/hb-ucd.cc',
harfbuzz .. '/src/hb-unicode-emoji-table.hh',
harfbuzz .. '/src/hb-unicode.cc',
harfbuzz .. '/src/hb-unicode.hh',
harfbuzz .. '/src/hb-utf.hh',
harfbuzz .. '/src/hb-vector.hh',
harfbuzz .. '/src/hb.hh',
harfbuzz .. '/src/graph/gsubgpos-context.cc'
}
warnings 'Off'
defines {
'HAVE_OT',
'HB_NO_FALLBACK_SHAPE',
'HB_NO_WIN1256'
}
filter 'system:emscripten'
do
buildoptions {'-pthread'}
end
filter 'toolset:clang'
do
flags {'FatalWarnings'}
buildoptions {
'-Werror=format',
'-Wimplicit-int-conversion',
'-Werror=vla'
}
end
filter 'options:config=release'
do
optimize 'Size'
end
end

72
dependencies/premake5_libpng_v2.lua vendored Normal file
View File

@@ -0,0 +1,72 @@
dofile 'rive_build_config.lua'
local dependency = require 'dependency'
libpng = dependency.github('glennrp/libpng', 'libpng16')
zlib = dependency.github('madler/zlib', '04f42ceca40f73e2978b50e93806c2a18c1281fc')
project 'libpng'
do
kind 'StaticLib'
os.copyfile(libpng .. '/scripts/pnglibconf.h.prebuilt', libpng .. '/pnglibconf.h')
includedirs {
'./',
libpng,
zlib,
}
files {
libpng .. '/png.c',
libpng .. '/pngerror.c',
libpng .. '/pngget.c',
libpng .. '/pngmem.c',
libpng .. '/pngpread.c',
libpng .. '/pngread.c',
libpng .. '/pngrio.c',
libpng .. '/pngrtran.c',
libpng .. '/pngrutil.c',
libpng .. '/pngset.c',
libpng .. '/pngtrans.c',
libpng .. '/pngwio.c',
libpng .. '/pngwrite.c',
libpng .. '/pngwtran.c',
libpng .. '/pngwutil.c'
}
do
files {
libpng .. '/arm/arm_init.c',
libpng .. '/arm/filter_neon_intrinsics.c',
libpng .. '/arm/palette_neon_intrinsics.c'
}
end
end
project 'zlib'
do
kind 'StaticLib'
defines {'ZLIB_IMPLEMENTATION'}
includedirs {
zlib
}
files {
zlib .. '/adler32.c',
zlib .. '/compress.c',
zlib .. '/crc32.c',
zlib .. '/deflate.c',
zlib .. '/gzclose.c',
zlib .. '/gzlib.c',
zlib .. '/gzread.c',
zlib .. '/gzwrite.c',
zlib .. '/infback.c',
zlib .. '/inffast.c',
zlib .. '/inftrees.c',
zlib .. '/trees.c',
zlib .. '/uncompr.c',
zlib .. '/zutil.c',
zlib .. '/inflate.c'
}
filter 'system:not windows'
do
defines {'HAVE_UNISTD_H'}
end
end

View File

@@ -0,0 +1,3 @@
dofile 'rive_build_config.lua'
local dependency = require 'dependency'
miniaudio = dependency.github('rive-app/miniaudio', 'rive')

65
dependencies/premake5_sheenbidi_v2.lua vendored Normal file
View File

@@ -0,0 +1,65 @@
dofile "rive_build_config.lua"
local dependency = require 'dependency'
sheenbidi = dependency.github('Tehreer/SheenBidi', 'v2.6')
project 'rive_sheenbidi'
do
kind 'StaticLib'
language 'C'
warnings 'Off'
includedirs {
sheenbidi .. '/Headers'
}
buildoptions {
'-Wall',
'-ansi',
'-pedantic'
}
linkoptions {'-r'}
filter 'system:emscripten'
do
buildoptions {'-pthread'}
end
filter 'options:config=debug'
do
files {
sheenbidi .. '/Source/BidiChain.c',
sheenbidi .. '/Source/BidiTypeLookup.c',
sheenbidi .. '/Source/BracketQueue.c',
sheenbidi .. '/Source/GeneralCategoryLookup.c',
sheenbidi .. '/Source/IsolatingRun.c',
sheenbidi .. '/Source/LevelRun.c',
sheenbidi .. '/Source/PairingLookup.c',
sheenbidi .. '/Source/RunQueue.c',
sheenbidi .. '/Source/SBAlgorithm.c',
sheenbidi .. '/Source/SBBase.c',
sheenbidi .. '/Source/SBCodepointSequence.c',
sheenbidi .. '/Source/SBLine.c',
sheenbidi .. '/Source/SBLog.c',
sheenbidi .. '/Source/SBMirrorLocator.c',
sheenbidi .. '/Source/SBParagraph.c',
sheenbidi .. '/Source/SBScriptLocator.c',
sheenbidi .. '/Source/ScriptLookup.c',
sheenbidi .. '/Source/ScriptStack.c',
sheenbidi .. '/Source/StatusStack.c'
}
end
filter 'options:config=release'
do
files {
sheenbidi .. '/Source/SheenBidi.c'
}
end
filter 'options:config=release'
do
defines {'SB_CONFIG_UNITY'}
optimize 'Size'
end
end

135
premake5_v2.lua Normal file
View File

@@ -0,0 +1,135 @@
dofile 'rive_build_config.lua'
filter {'options:with_rive_tools'}
do
defines {'WITH_RIVE_TOOLS'}
end
filter {'options:with_rive_text'}
do
defines {'WITH_RIVE_TEXT'}
end
filter {}
filter {'options:with_rive_audio=system'}
do
defines {'WITH_RIVE_AUDIO'}
end
filter {'options:with_rive_audio=external'}
do
defines {'WITH_RIVE_AUDIO', 'EXTERNAL_RIVE_AUDIO_ENGINE', 'MA_NO_DEVICE_IO'}
end
filter {}
dofile(path.join(path.getabsolute('dependencies/'), 'premake5_harfbuzz_v2.lua'))
dofile(path.join(path.getabsolute('dependencies/'), 'premake5_sheenbidi_v2.lua'))
dofile(path.join(path.getabsolute('dependencies/'), 'premake5_miniaudio_v2.lua'))
project 'rive'
do
kind 'StaticLib'
cppdialect 'C++11'
includedirs {
'include',
harfbuzz .. '/src',
sheenbidi .. '/Headers',
miniaudio
}
files {'src/**.cpp'}
flags {
'FatalCompileWarnings'
}
filter {'system:macosx'}
do
buildoptions {
-- this triggers too much on linux, so just enable here for now
'-Wimplicit-float-conversion'
}
end
-- filter {'toolset:not msc', 'files:src/audio/audio_engine.cpp'}
filter {'system:not windows', 'files:src/audio/audio_engine.cpp'}
do
buildoptions {
'-Wno-implicit-int-conversion'
}
end
filter {'system:windows', 'files:src/audio/audio_engine.cpp'}
do
-- Too many warnings from miniaudio.h
removeflags {'FatalCompileWarnings'}
end
-- filter 'files:src/audio/audio_engine.cpp'
-- do
-- buildoptions {
-- '-Wno-implicit-int-conversion'
-- }
-- end
filter {'system:macosx', 'options:variant=runtime'}
do
buildoptions {
'-Wimplicit-float-conversion -fembed-bitcode -arch arm64 -arch x86_64 -isysroot ' ..
(os.getenv('MACOS_SYSROOT') or '')
}
end
filter {'system:ios'}
do
buildoptions {'-flto=full', '-Wno-implicit-int-conversion'}
files {'src/audio/audio_engine.m'}
end
filter 'system:windows'
do
architecture 'x64'
defines {'_USE_MATH_DEFINES'}
end
filter 'system:emscripten'
do
buildoptions {'-pthread'}
end
end
newoption {
trigger = 'variant',
value = 'type',
description = 'Choose a particular variant to build',
allowed = {
{'system', 'Builds the static library for the provided system'},
{'emulator', 'Builds for an emulator/simulator for the provided system'},
{'runtime', 'Build the static library specifically targeting our runtimes'}
},
default = 'system'
}
newoption {
trigger = 'with_rive_tools',
description = 'Enables tools usually not necessary for runtime.'
}
newoption {
trigger = 'with_rive_text',
description = 'Compiles in text features.'
}
newoption {
trigger = 'with_rive_audio',
value = 'disabled',
description = 'The audio mode to use.',
allowed = {
{
'disabled'
},
{
'system'
},
{
'external'
}
}
}

View File

@@ -1,59 +0,0 @@
#!/bin/sh
set -e
source ../../../../dependencies/macosx/config_directories.sh
CONFIG=debug
GRAPHICS=gl
OTHER_OPTIONS=
for var in "$@"; do
if [[ $var = "release" ]]; then
CONFIG=release
fi
if [[ $var = "gl" ]]; then
GRAPHICS=gl
fi
if [[ $var = "d3d" ]]; then
GRAPHICS=d3d
fi
if [[ $var = "metal" ]]; then
GRAPHICS=metal
fi
if [[ $var = "text" ]]; then
OTHER_OPTIONS+=--with_rive_text
fi
done
if [[ ! -f "$DEPENDENCIES/bin/premake5" ]]; then
pushd $DEPENDENCIES_SCRIPTS
./get_premake5.sh
popd
fi
if [[ ! -d "$DEPENDENCIES/sokol" ]]; then
pushd $DEPENDENCIES_SCRIPTS
./get_sokol.sh
popd
fi
if [[ ! -f "$DEPENDENCIES/skia/out/$GRAPHICS/$CONFIG/libskia.a" ]]; then
pushd $DEPENDENCIES_SCRIPTS
./make_viewer_skia.sh $GRAPHICS $CONFIG
popd
fi
export PREMAKE=$DEPENDENCIES/bin/premake5
pushd ..
$PREMAKE --scripts=../../../build --file=./premake5.lua gmake2 $OTHER_OPTIONS
for var in "$@"; do
if [[ $var = "clean" ]]; then
make clean
make config=release clean
fi
done
make config=$CONFIG -j$(($(sysctl -n hw.physicalcpu) + 1))
popd

View File

@@ -0,0 +1,99 @@
dofile 'rive_build_config.lua'
SKIA_DIR = os.getenv('SKIA_DIR')
dependencies = os.getenv('DEPENDENCIES')
if SKIA_DIR == nil and dependencies ~= nil then
SKIA_DIR = dependencies .. '/skia'
else
if SKIA_DIR == nil then
SKIA_DIR = 'skia'
end
SKIA_DIR = '../dependencies/' .. SKIA_DIR
end
project 'rive_skia_renderer'
do
kind 'StaticLib'
includedirs {
'include',
'../../cg_renderer/include',
'../../include'
}
libdirs {'../../build/%{cfg.system}/bin/' .. RIVE_BUILD_CONFIG}
files {
'src/**.cpp'
}
flags {
'FatalCompileWarnings'
}
filter {'system:macosx or linux or windows or ios'}
do
includedirs {SKIA_DIR}
libdirs {SKIA_DIR .. '/out/static'}
end
filter {'system:android'}
do
includedirs {SKIA_DIR}
filter {'system:android', 'options:arch=x86'}
do
libdirs {SKIA_DIR .. '/out/x86'}
end
filter {'system:android', 'options:arch=x64'}
do
libdirs {SKIA_DIR .. '/out/x64'}
end
filter {'system:android', 'options:arch=arm'}
do
libdirs {SKIA_DIR .. '/out/arm'}
end
filter {'system:android', 'options:arch=arm64'}
do
libdirs {SKIA_DIR .. '/out/arm64'}
end
end
filter {'options:with_rive_text'}
do
defines {'WITH_RIVE_TEXT'}
end
filter {'options:with_rive_audio=system'}
do
defines {'WITH_RIVE_AUDIO'}
end
filter {'options:with_rive_audio=external'}
do
defines {'WITH_RIVE_AUDIO', 'EXTERNAL_RIVE_AUDIO_ENGINE', 'MA_NO_DEVICE_IO'}
end
end
newoption {
trigger = 'with_rive_text',
description = 'Enables text experiments'
}
newoption {
trigger = 'with_rive_audio',
value = 'disabled',
description = 'The audio mode to use.',
allowed = {
{
'disabled'
},
{
'system'
},
{
'external'
}
}
}