workspace 'rive'
configurations {'debug', 'release'}

require 'setup_compiler'

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'
    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',
    }
    exceptionhandling 'off'
    rtti 'off'

    filter "system:windows"
    do
        architecture 'x64'
        defines {'_USE_MATH_DEFINES'}
    end

    filter {'system:macosx'}
    do
        includedirs {SKIA_DIR}
        libdirs {SKIA_DIR .. '/out/static'}
        links {'Cocoa.framework', 'rive', 'skia'}
    end

    filter {'system:macosx', 'options:variant=runtime'}
    do
        links {}
        buildoptions {
            '-fembed-bitcode -arch arm64 -arch x86_64 -isysroot ' ..
                (os.getenv('MACOS_SYSROOT') or '')
        }
    end

    filter {'system:linux or windows'}
    do
        includedirs {SKIA_DIR}
        libdirs {SKIA_DIR .. '/out/static'}
        links {'rive', 'skia'}
    end

    filter {'system:ios'}
    do
        includedirs {SKIA_DIR}
        libdirs {SKIA_DIR .. '/out/static'}
    end

    filter {'system:ios', 'options:variant=system'}
    do
        buildoptions {
            '-mios-version-min=10.0 -fembed-bitcode -arch armv7 -arch arm64 -arch arm64e -isysroot ' ..
                (os.getenv('IOS_SYSROOT') or '')
        }
    end

    filter {'system:ios', 'options:variant=emulator'}
    do
        buildoptions {
            '--target=arm64-apple-ios12.0.0-simulator -mios-version-min=12.0 -arch x86_64 -arch arm64 -isysroot ' ..
                (os.getenv('IOS_SYSROOT') or '')
        }
        targetdir '%{cfg.system}_sim/bin/%{cfg.buildcfg}'
        objdir '%{cfg.system}_sim/obj/%{cfg.buildcfg}'
    end

    -- Is there a way to pass 'arch' as a variable here?
    filter {'system:android'}
    do
        includedirs {SKIA_DIR}

        filter {'system:android', 'options:arch=x86'}
        do
            targetdir '%{cfg.system}/x86/bin/%{cfg.buildcfg}'
            objdir '%{cfg.system}/x86/obj/%{cfg.buildcfg}'
            libdirs {SKIA_DIR .. '/out/x86'}
        end

        filter {'system:android', 'options:arch=x64'}
        do
            targetdir '%{cfg.system}/x64/bin/%{cfg.buildcfg}'
            objdir '%{cfg.system}/x64/obj/%{cfg.buildcfg}'
            libdirs {SKIA_DIR .. '/out/x64'}
        end

        filter {'system:android', 'options:arch=arm'}
        do
            targetdir '%{cfg.system}/arm/bin/%{cfg.buildcfg}'
            objdir '%{cfg.system}/arm/obj/%{cfg.buildcfg}'
            libdirs {SKIA_DIR .. '/out/arm'}
        end

        filter {'system:android', 'options:arch=arm64'}
        do
            targetdir '%{cfg.system}/arm64/bin/%{cfg.buildcfg}'
            objdir '%{cfg.system}/arm64/obj/%{cfg.buildcfg}'
            libdirs {SKIA_DIR .. '/out/arm64'}
        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'}
    }
}
