-- set_project("celeritas") -- set_version("0.1.0") -- set_config("cc", "clang") -- add_rules("mode.debug", "mode.release") -- we have two modes: debug & release -- -- -Wall : base set of warnings -- -- -Wextra : additional warnings not covered by -Wall -- -- -Wundef : undefined macros -- -- -Wdouble-promotion : catch implicit converion of float to double -- add_cflags("-Wall", "-Wextra", "-Wundef", "-Wdouble-promotion") -- if is_mode("debug") then -- add_cflags("-g") -- Add debug symbols in debug mode -- add_defines("CDEBUG") -- elseif is_mode("release") then -- add_defines("CRELEASE") -- end -- -- Platform defines and system packages -- if is_plat("linux") then -- add_defines("CEL_PLATFORM_LINUX") -- add_syslinks("dl", "X11", "pthread") --, "vulkan") -- elseif is_plat("windows") then -- add_defines("CEL_PLATFORM_WINDOWS") -- add_syslinks("user32", "gdi32", "kernel32", "shell32") -- -- add_requires("vulkansdk", { system = true }) -- -- add_links("pthreadVC2-w64") -- elseif is_plat("macosx") then -- add_defines("CEL_PLATFORM_MAC") -- add_frameworks("Cocoa", "IOKit", "CoreVideo", "OpenGL") -- add_frameworks("Foundation", "Metal", "QuartzCore") -- set_runenv("MTL_DEBUG_LAYER", "1") -- add_requires("vulkansdk", { system = true }) -- -- add_syslinks("GL") -- end -- -- Compile GLFW from source -- package("local_glfw") -- add_deps("cmake") -- set_sourcedir(path.join(os.scriptdir(), "deps/glfw-3.3.8")) -- on_install(function(package) -- local configs = {} -- -- NOTE(omni): Keeping these around as comments in case we need to modify glfw flags -- -- table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) -- -- table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) -- import("package.tools.cmake").install(package, configs) -- end) -- on_test(function(package) -- -- assert(package:has_cfuncs("add", {includes = "foo.h"})) -- end) -- package_end() -- add_requires("local_glfw") -- local core_sources = { -- "deps/glad/src/glad.c", -- "src/*.c", -- "src/core/*.c", -- "src/logos/*.c", -- "src/maths/*.c", -- "src/platform/*.c", -- "src/ral/*.c", -- "src/ral/backends/opengl/*.c", -- "src/render/*.c", -- "src/resources/*.c", -- "src/std/*.c", -- "src/std/containers/*.c", -- "src/systems/*.c", -- } -- local unity_sources = { -- "deps/Unity/src/unity.c", -- "deps/Unity/extras/fixture/src/unity_fixture.c", -- "deps/Unity/extras/memory/src/unity_memory.c", -- } -- rule("compile_glsl_vert_shaders") -- set_extensions(".vert") -- on_buildcmd_file(function(target, batchcmds, sourcefile, opt) -- local targetfile = path.join(target:targetdir(), path.basename(sourcefile) .. ".vert.spv") -- print("Compiling shader: %s to %s", sourcefile, targetfile) -- batchcmds:vrunv('glslc', { sourcefile, "-o", targetfile }) -- -- batchcmds:add_depfiles(sourcefile) -- end) -- rule("compile_glsl_frag_shaders") -- set_extensions(".frag") -- on_buildcmd_file(function(target, batchcmds, sourcefile, opt) -- local targetfile = path.join(target:targetdir(), path.basename(sourcefile) .. ".frag.spv") -- print("Compiling shader: %s to %s", sourcefile, targetfile) -- batchcmds:vrunv('glslc', { sourcefile, "-o", targetfile }) -- -- batchcmds:add_depfiles(sourcefile) -- end) -- -- TODO: Metal shaders compilation -- -- common configuration for both static and shared libraries -- target("core_config") -- set_kind("static") -- kind is required but you can ignore it since it's just for common settings -- add_packages("local_glfw") -- add_defines("CEL_REND_BACKEND_OPENGL") -- add_includedirs("deps/cgltf", { public = true }) -- add_includedirs("deps/glfw-3.3.8/include/GLFW", { public = true }) -- add_includedirs("deps/glad/include", { public = true }) -- add_includedirs("deps/stb_image", { public = true }) -- add_includedirs("deps/stb_image_write", { public = true }) -- add_includedirs("deps/stb_truetype", { public = true }) -- add_includedirs("include/", { public = true }) -- add_includedirs("src/", { public = true }) -- add_includedirs("src/core", { public = true }) -- add_includedirs("src/logos/", { public = true }) -- add_includedirs("src/maths/", { public = true }) -- add_includedirs("src/platform/", { public = true }) -- add_includedirs("src/ral", { public = true }) -- add_includedirs("src/ral/backends/opengl", { public = true }) -- add_includedirs("src/render", { public = true }) -- add_includedirs("src/ral/backends/vulkan", { public = true }) -- add_includedirs("src/resources/", { public = true }) -- add_includedirs("src/std/", { public = true }) -- add_includedirs("src/std/containers", { public = true }) -- add_includedirs("src/systems/", { public = true }) -- add_files("src/empty.c") -- for some reason we need this on Mac so it doesnt call 'ar' with no files and error -- -- add_rules("compile_glsl_vert_shaders") -- -- add_rules("compile_glsl_frag_shaders") -- -- add_files("assets/shaders/*.frag") -- if is_plat("windows") then -- -- add_includedirs("$(env VULKAN_SDK)/Include", { public = true }) -- -- add_linkdirs("$(env VULKAN_SDK)/Lib", { public = true }) -- -- add_links("vulkan-1") -- end -- if is_plat("macosx") then -- -- add_files("src/renderer/backends/metal/*.m") -- -- add_files("src/ral/backends/vulkan/*.c") -- end -- set_default(false) -- prevents standalone building of this target -- target("core_static") -- set_kind("static") -- add_deps("core_config") -- inherit common configurations -- set_policy("build.merge_archive", true) -- add_files(core_sources) -- -- Link against static CRT -- if is_plat("windows") then -- add_links("libcmt", "legacy_stdio_definitions") -- for release builds -- add_links("libcmtd", "legacy_stdio_definitions") -- for debug builds -- end -- target("core_shared") -- set_kind("shared") -- add_deps("core_config") -- inherit common configurations -- add_files(core_sources) -- -- Link against dynamic CRT -- if is_plat("windows") then -- add_links("msvcrt", "legacy_stdio_definitions") -- for release builds -- add_links("msvcrtd", "legacy_stdio_definitions") -- for debug builds -- end -- -- target("main_loop") -- -- set_kind("binary") -- -- set_group("examples") -- -- add_deps("core_static") -- -- add_files("examples/main_loop/ex_main_loop.c") -- -- set_rundir("$(projectdir)") -- -- target("tri") -- -- set_kind("binary") -- -- set_group("examples") -- -- add_deps("core_static") -- -- add_files("examples/triangle/ex_triangle.c") -- -- set_rundir("$(projectdir)") -- -- if is_plat("macosx") then -- -- before_build(function (target) -- -- print("build metal shaders lib") -- -- os.exec("mkdir -p build/shaders") -- -- os.exec("xcrun -sdk macosx metal -c assets/shaders/triangle.metal -o build/shaders/gfx.air") -- -- os.exec("xcrun -sdk macosx metallib build/shaders/gfx.air -o build/gfx.metallib") -- -- end) -- -- end -- target("skinned") -- set_kind("binary") -- set_group("examples") -- add_deps("core_shared") -- add_files("examples/skinned_animation/ex_skinned_animation.c") -- set_rundir("$(projectdir)") -- target("game") -- set_kind("binary") -- set_group("examples") -- add_deps("core_static") -- add_files("examples/game_demo/game_demo.c") -- set_rundir("$(projectdir)") -- target("pool_tests") -- set_kind("binary") -- set_group("tests") -- add_deps("core_static") -- add_files(unity_sources) -- add_includedirs("deps/Unity/src", {public = true}) -- add_includedirs("deps/Unity/extras/fixture/src", {public = true}) -- add_includedirs("deps/Unity/extras/memory/src", {public = true}) -- add_files("tests/pool_tests.c") -- add_files("tests/pool_test_runner.c")