bounce/premake5.lua
2019-05-13 19:03:23 -03:00

381 lines
9.9 KiB
Lua

-- Irlan Robson
-- Bounce premake script
-- http://industriousone.com/premake
-- variable paths for the case files are moved
solution_name = "bounce"
working_dir = "."
solution_dir = "build/"
external_dir = "external/"
bounce_inc_dir = "include/"
bounce_src_dir = "src/"
examples_inc_dir = "examples/"
examples_src_dir = "examples/"
tests_inc_dir = "test/"
tests_src_dir = "test/"
obj_dir = "/obj/"
bin_dir = "/bin/"
-- or "" to make --help work
action = _ACTION or ""
-- list of graphics APIs
newoption
{
trigger = "gfxapi",
value = "API",
description = "Choose a graphics API",
allowed =
{
{ "opengl_2", "OpenGL 2" },
{ "opengl_4", "OpenGL 4" }
}
}
-- defaults to OpenGL 4
if not _OPTIONS["gfxapi"] then
_OPTIONS["gfxapi"] = "opengl_4"
end
-- premake main
workspace(solution_name)
configurations { "debug", "release" }
location(solution_dir .. "/" .. action)
symbols "On"
warnings 'Extra'
filter "system:windows"
platforms { "x86", "x86_x64" }
defaultplatform "x86_64"
defines { "_CRT_SECURE_NO_WARNINGS", "_WIN32", "WIN32", "_WINDOWS" }
filter "system:linux"
platforms { "x86_64" }
cppdialect "C++11"
filter {}
filter "configurations:debug"
defines { "DEBUG" }
optimize "Off"
targetdir ( solution_dir .. action .. bin_dir .. "%{cfg.platform}/%{cfg.buildcfg}/%{prj.name}" )
objdir ( "!" .. solution_dir .. action .. obj_dir .. "%{cfg.platform}/%{cfg.buildcfg}/%{prj.name}" )
filter "configurations:release"
defines { "NDEBUG" }
optimize "On"
targetdir ( solution_dir .. action .. bin_dir .. "%{cfg.platform}/%{cfg.buildcfg}/%{prj.name}" )
objdir ( "!" .. solution_dir .. action .. obj_dir .. "%{cfg.platform}/%{cfg.buildcfg}/%{prj.name}" )
filter {}
filter "options:gfxapi=opengl_2"
defines { "U_OPENGL_2" }
filter "options:gfxapi=opengl_4"
defines { "U_OPENGL_4" }
filter {}
project "bounce"
kind "StaticLib"
location ( solution_dir .. action )
includedirs { bounce_inc_dir, external_dir }
vpaths { [""] = "bounce" }
files
{
bounce_inc_dir .. "/bounce/**.h",
bounce_inc_dir .. "/bounce/**.inl",
bounce_src_dir .. "/bounce/**.cpp"
}
project "glad"
kind "StaticLib"
language "C"
location ( solution_dir .. action )
includedirs { external_dir }
vpaths { ["Headers"] = "**.h", ["Sources"] = "**.c" }
filter { "system:windows", "options:gfxapi=opengl_2" }
files
{
external_dir .. "/glad_2/khrplatform.h",
external_dir .. "/glad_2/glad.h",
external_dir .. "/glad_2/glad.c",
}
filter { "system:windows", "options:gfxapi=opengl_4" }
files
{
external_dir .. "/glad_4/khrplatform.h",
external_dir .. "/glad_4/glad.h",
external_dir .. "/glad_4/glad.c",
}
filter { "system:linux", "options:gfxapi=opengl_2" }
files
{
external_dir .. "/glad_2/khrplatform.h",
external_dir .. "/glad_2/glad_glx.h",
external_dir .. "/glad_2/glad_glx.c",
}
filter { "system:linux", "options:gfxapi=opengl_4" }
files
{
external_dir .. "/glad_4/khrplatform.h",
external_dir .. "/glad_4/glad_glx.h",
external_dir .. "/glad_4/glad_glx.c",
}
project "glfw"
kind "StaticLib"
language "C"
location ( solution_dir .. action )
includedirs { external_dir .. "/glfw" }
defines { "_GLFW_USE_CONFIG_H" } -- see glfw_config.h
vpaths { ["Headers"] = "**.h", ["Sources"] = "**.c" }
files
{
external_dir .. "/glfw/glfw_config.h",
external_dir .. "/glfw/glfw3.h",
external_dir .. "/glfw/glfw3native.h",
external_dir .. "/glfw/context.c",
external_dir .. "/glfw/init.c",
external_dir .. "/glfw/input.c",
external_dir .. "/glfw/monitor.c",
external_dir .. "/glfw/vulkan.c",
external_dir .. "/glfw/window.c",
}
filter "system:windows"
files
{
external_dir .. "/glfw/win32_platform.h",
external_dir .. "/glfw/win32_joystick.h",
external_dir .. "/glfw/wgl_context.h",
external_dir .. "/glfw/egl_context.h",
external_dir .. "/glfw/win32_init.c",
external_dir .. "/glfw/win32_joystick.c",
external_dir .. "/glfw/win32_monitor.c",
external_dir .. "/glfw/win32_time.c",
external_dir .. "/glfw/win32_tls.c",
external_dir .. "/glfw/win32_window.c",
external_dir .. "/glfw/wgl_context.c",
external_dir .. "/glfw/egl_context.c",
}
filter "system:linux"
buildoptions { "-pthread" }
files
{
external_dir .. "/glfw/x11_platform.h",
external_dir .. "/glfw/xkb_unicode.h",
external_dir .. "/glfw/linux_joystick.h",
external_dir .. "/glfw/posix_time.h",
external_dir .. "/glfw/posix_tls.h",
external_dir .. "/glfw/glx_context.h",
external_dir .. "/glfw/egl_context.h",
external_dir .. "/glfw/x11_init.c",
external_dir .. "/glfw/x11_monitor.c",
external_dir .. "/glfw/x11_window.c",
external_dir .. "/glfw/xkb_unicode.c",
external_dir .. "/glfw/linux_joystick.c",
external_dir .. "/glfw/posix_time.c",
external_dir .. "/glfw/posix_tls.c",
external_dir .. "/glfw/egl_context.c",
external_dir .. "/glfw/glx_context.c",
}
project "imgui"
kind "StaticLib"
language "C++"
location ( solution_dir .. action )
includedirs { external_dir }
vpaths { ["Headers"] = "**.h", ["Sources"] = "**.cpp" }
files
{
external_dir .. "/imgui/imconfig.h",
external_dir .. "/imgui/imgui.h",
external_dir .. "/imgui/imgui_internal.h",
external_dir .. "/imgui/stb_rect_pack.h",
external_dir .. "/imgui/stb_textedit.h",
external_dir .. "/imgui/stb_truetype.h",
external_dir .. "/imgui/imgui.cpp",
external_dir .. "/imgui/imgui_demo.cpp",
external_dir .. "/imgui/imgui_draw.cpp"
}
filter "options:gfxapi=opengl_2"
files
{
external_dir .. "/imgui/imgui_impl_glfw_gl2.h",
external_dir .. "/imgui/imgui_impl_glfw_gl2.cpp"
}
filter "options:gfxapi=opengl_4"
files
{
external_dir .. "/imgui/imgui_impl_glfw_gl3.h",
external_dir .. "/imgui/imgui_impl_glfw_gl3.cpp"
}
project "rapidjson"
kind "StaticLib"
language "C++"
location ( solution_dir .. action )
includedirs { external_dir }
vpaths { ["Headers"] = "**.h", ["Sources"] = "**.cpp" }
files
{
external_dir .. "/rapidjson/**.h",
external_dir .. "/rapidjson/**.cpp"
}
project "triangle"
kind "StaticLib"
language "C"
location ( solution_dir .. action )
includedirs { external_dir }
vpaths { ["Headers"] = "**.h", ["Sources"] = "**.c" }
files
{
external_dir .. "/triangle/**.h",
external_dir .. "/triangle/**.c"
}
project "testbed"
kind "ConsoleApp"
language "C++"
location ( solution_dir .. action )
includedirs { external_dir, bounce_inc_dir, examples_inc_dir }
vpaths { [""] = "testbed" }
files
{
examples_inc_dir .. "/testbed/framework/draw.h",
examples_inc_dir .. "/testbed/framework/profiler.h",
examples_inc_dir .. "/testbed/framework/profiler_st.h",
examples_inc_dir .. "/testbed/framework/json_profiler.h",
examples_inc_dir .. "/testbed/framework/model.h",
examples_inc_dir .. "/testbed/framework/view.h",
examples_inc_dir .. "/testbed/framework/view_model.h",
examples_src_dir .. "/testbed/framework/test.h",
examples_src_dir .. "/testbed/framework/body_dragger.h",
examples_src_dir .. "/testbed/framework/cloth_dragger.h",
examples_src_dir .. "/testbed/framework/softbody_dragger.h",
examples_src_dir .. "/testbed/framework/body_dragger.cpp",
examples_src_dir .. "/testbed/framework/cloth_dragger.cpp",
examples_src_dir .. "/testbed/framework/softbody_dragger.cpp",
examples_inc_dir .. "/testbed/tests/**.h",
examples_src_dir .. "/testbed/framework/draw.cpp",
examples_src_dir .. "/testbed/framework/profiler.cpp",
examples_src_dir .. "/testbed/framework/profiler_st.cpp",
examples_src_dir .. "/testbed/framework/json_profiler.cpp",
examples_inc_dir .. "/testbed/framework/model.cpp",
examples_inc_dir .. "/testbed/framework/view.cpp",
examples_inc_dir .. "/testbed/framework/view_model.cpp",
examples_src_dir .. "/testbed/framework/test.cpp",
examples_src_dir .. "/testbed/framework/test_entries.cpp",
examples_src_dir .. "/testbed/framework/main.cpp"
}
filter "options:gfxapi=opengl_2"
files
{
examples_src_dir .. "/testbed/framework/draw_gl2.h"
}
filter "options:gfxapi=opengl_4"
files
{
examples_src_dir .. "/testbed/framework/draw_gl4.h"
}
filter "system:windows"
links { "opengl32", "winmm" }
filter "system:linux"
links { "GL", "X11", "Xrandr", "Xinerama", "Xcursor", "pthread", "dl" }
filter {}
links { "glfw", "glad", "imgui", "bounce", "triangle" }
project "hello_world"
kind "ConsoleApp"
language "C++"
location ( solution_dir .. action )
includedirs { bounce_inc_dir, examples_inc_dir }
vpaths { ["Headers"] = "**.h", ["Sources"] = "**.cpp" }
files
{
examples_inc_dir .. "/hello_world/**.h",
examples_src_dir .. "/hello_world/**.cpp"
}
links { "bounce" }
-- build
if os.istarget("windows") then
newaction
{
trigger = "solution_vs2015",
description = "Generate solution",
execute = function ()
os.execute ( "premake5 clean" )
os.execute ( "premake5 vs2015" )
end
}
newaction
{
trigger = "solution_vs2017",
description = "Generate solution",
execute = function ()
os.execute ( "premake5 clean" )
os.execute ( "premake5 vs2017" )
end
}
newaction
{
trigger = "doc",
description = "Generate documentation",
execute = function ()
os.execute ( "doxygen doxyfile" )
os.execute ( "start doc\\api\\html\\index.html" )
end
}
end
-- clean
newaction
{
trigger = "clean",
description = "Clean solution",
execute = function ()
os.rmdir( "doc" )
os.rmdir( solution_dir )
end
}