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'
        }
    }
}
