require "ninja"

-- workspace

workspace "project"
    configurations { "devel", "debug", "release" }
    location "../_project"
    targetdir "../_%{cfg.buildcfg}"
    configuration "windows"
        platforms { "x64" }
        buildoptions "/W1"
--        entrypoint "main"
        -- buildoptions { "/utf-8" } "/W3", "/wd4996", "/wd4244", "/wd4305", "/wd4267"} -- "/EHsc-"}
        -- links { "user32", "gdi32" }
        -- flags { "/MT" }
    configuration "linux"
        links { "pthread", "X11", "m", "dl" }
    filter "configurations:debug"
        symbols "On"
        optimize "Off"
    filter "configurations:devel"
        symbols "On"
        optimize "On"
    filter "configurations:release"
        defines {"NDEBUG"}
        symbols "Off"
        optimize "On"

-- dlls

project "engine"
    language "C"
    kind "SharedLib"
    files {"../engine/v4k.c"}
    includedirs {"../engine/"}
    defines {"API=EXPORT"}

-- exes

project "editor"
    language "C"
    kind "ConsoleApp" -- "WindowedApp"
    links {"engine"} defines {"API=IMPORT"}
    files {
    "../tools/editor/**.",
    "../tools/editor/**.h*",
    "../tools/editor/editor.c",
    }
    includedirs {
    "../tools/editor/",
    "../engine/",
    }

project "editor2"
    language "C"
    kind "ConsoleApp"
    files {
    "../tools/editor/**.",
    "../tools/editor/**.h*",
    "../tools/editor/editor2.c",
    }
    includedirs {
    "../tools/editor/",
    "../engine/",
    }

-- demos

function demos(...)
    for _, name in ipairs({...}) do
        project (name)
            -- defaults()
            uuid (os.uuid(name))
            language "C"
            kind "consoleApp" -- "WindowedApp"
            includedirs {"../engine/"}
            links {"engine"} defines {"API=IMPORT"} -- kind "SharedLib" links {"engine"}
            includedirs {"../engine/", "../tools/editor/"}
            files {
                "../demos/*"..name.."*.h*",
                "../demos/*"..name.."*.c*",
                "../demos/*"..name.."*.inl",
            }
    end
end

demos(
    "00-hello","01-sprite","02-ddraw","03-character","04-control",
    "04-scene","05-network","06-pbr"
)

-- games

function games(...)
    for _, name in ipairs({...}) do
        project ("game-" .. name)
            uuid (os.uuid("game-" .. name))
            language "C++"
            kind "consoleApp"
            includedirs {"../engine/"}
            links {"engine"} defines {"API=IMPORT"} -- kind "SharedLib" links {"engine"}
            includedirs {"../engine/", "../tools/editor/"}
            files {
                "../games/"..name.."/**.h*",
                "../games/"..name.."/**.c*",
                "../games/"..name.."/**.inl",
            }
        -- defaults()
    end
end

-- games("untitled")