summaryrefslogtreecommitdiff
path: root/xmake.lua
blob: 1b2683fd52c6b0781ed62c3ae0121a89ee2c5038 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
set_project("celeritas")
set_version("0.1.0")
set_config("cc", "gcc")

add_rules("mode.debug", "mode.release") -- we have two modes: debug & release

add_syslinks("m") -- these are must have when compiling

-- -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
end

-- Platform defines and system packages
if is_plat("linux") then
    add_defines("CEL_PLATFORM_LINUX")
    add_syslinks("dl", "X11")
elseif is_plat("windows") then
    add_defines("CEL_PLATFORM_WINDOWS")
elseif is_plat("macosx") then
    add_defines("CEL_PLATFORM_MAC")
    add_frameworks("Cocoa", "IOKit", "CoreVideo", "OpenGL")
    set_runenv("MTL_DEBUG_LAYER", "1")
    -- 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/logos/*.c",
    "src/platform/*.c",
    "src/renderer/*.c",
    "src/renderer/backends/*.c",
    "src/resources/*.c",
    "src/std/*.c",
    "src/std/containers/*.c",
    "src/systems/*.c",
}

-- 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_syslinks("dl")
    add_packages("local_glfw")
    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("src/", {public = true})
    add_includedirs("src/logos/", {public = true})
    add_includedirs("src/maths/", {public = true})
    add_includedirs("src/platform/", {public = true})
    add_includedirs("src/renderer/", {public = true})
    add_includedirs("src/renderer/backends/", {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
    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)

target("core_shared")
    set_kind("shared")
    add_deps("core_config") -- inherit common configurations
    add_files(core_sources)

target("main_loop")
    set_kind("binary")
    set_group("examples")
    add_deps("core_shared")
    add_files("examples/main_loop/ex_main_loop.c")
    set_rundir("$(projectdir)")

target("std")
    set_kind("binary")
    set_group("examples")
    add_deps("core_static")
    add_files("examples/standard_lib/ex_std.c")
    set_rundir("$(projectdir)")

target("obj")
    set_kind("binary")
    set_group("examples")
    add_deps("core_static")
    add_files("examples/obj_loading/ex_obj_loading.c")
    set_rundir("$(projectdir)")

target("demo")
    set_kind("binary")
    set_group("examples")
    add_deps("core_static")
    add_files("examples/demo/demo.c")
    set_rundir("$(projectdir)")