comparison config.nims @ 674:496b328faa43

add: resource packaging and loading for different resource types, simplify build commands, update readme
author Sam <sam@basx.dev>
date Wed, 10 May 2023 22:36:59 +0700
parents a02d503ffa53
children f1f35e9f5335
comparison
equal deleted inserted replaced
673:9cfd59c93ae8 674:496b328faa43
6 const DEBUG = "debug" 6 const DEBUG = "debug"
7 const RELEASE = "release" 7 const RELEASE = "release"
8 const LINUX = "linux" 8 const LINUX = "linux"
9 const WINDOWS = "windows" 9 const WINDOWS = "windows"
10 10
11 proc compilerFlags() = 11 const BUNDLETYPE* {.strdefine.}: string = "dir" # dir, zip, exe
12 const RESOURCEROOT* {.strdefine.}: string = "resources"
13
14 task build, "build":
12 switch("path", "src") 15 switch("path", "src")
13 switch("mm", "orc") 16 switch("mm", "orc")
14 switch("experimental", "strictEffects") 17 switch("experimental", "strictEffects")
15 switch("threads", "on") 18 switch("threads", "on")
19 var buildType = DEBUG
20 var platformDir = ""
16 if defined(linux): 21 if defined(linux):
17 switch("define", "VK_USE_PLATFORM_XLIB_KHR") 22 switch("define", "VK_USE_PLATFORM_XLIB_KHR")
23 platformDir = LINUX
18 if defined(windows): 24 if defined(windows):
19 switch("define", "VK_USE_PLATFORM_WIN32_KHR") 25 switch("define", "VK_USE_PLATFORM_WIN32_KHR")
26 platformDir = WINDOWS
27 if defined(release):
28 switch("app", "gui")
29 buildType = RELEASE
30 else:
31 switch("debugger", "native")
20 32
33 var outdir = getCurrentDir() / BUILDBASE / buildType / platformDir / projectName()
34 switch("outdir", outdir)
35 setCommand "c"
36 rmDir(outdir)
37 mkDir(outdir)
38 let resourcedir = joinPath(projectDir(), RESOURCEROOT)
39 if existsDir(resourcedir):
40 let outdir_resources = joinPath(outdir, RESOURCEROOT)
41 if BUNDLETYPE == "dir":
42 cpDir(resourcedir, outdir_resources)
43 elif BUNDLETYPE == "zip":
44 mkDir(outdir_resources)
45 for resource in listDirs(resourcedir):
46 let
47 oldcwd = getCurrentDir()
48 outputfile = joinPath(outdir_resources, resource.splitPath().tail & ".zip")
49 inputfile = resource.splitPath().tail
50 cd(resource)
51 if defined(linux):
52 exec &"zip -r {outputfile} ."
53 elif defined(windows):
54 # TODO: test this
55 exec &"powershell Compress-Archive {inputfile} {outputfile}"
56 cd(oldcwd)
21 57
22 proc compilerFlagsDebug() = 58 task build_all_debug, "build all examples for debug":
23 switch("debugger", "native")
24
25 proc compilerFlagsRelease() =
26 switch("define", "release")
27 switch("app", "gui")
28
29 task single_linux_debug, "build linux debug":
30 compilerFlags()
31 compilerFlagsDebug()
32 switch("outdir", BUILDBASE / DEBUG / LINUX)
33 setCommand "c"
34 mkDir(BUILDBASE / DEBUG / LINUX)
35
36 task single_linux_release, "build linux release":
37 compilerFlags()
38 compilerFlagsRelease()
39 switch("outdir", BUILDBASE / RELEASE / LINUX)
40 setCommand "c"
41 mkDir(BUILDBASE / RELEASE / LINUX)
42
43 task single_windows_debug, "build windows debug":
44 compilerFlags()
45 compilerFlagsDebug()
46 switch("outdir", BUILDBASE & "/" & DEBUG & "/" & WINDOWS)
47 setCommand "c"
48 mkDir(BUILDBASE & "/" & DEBUG & "/" & WINDOWS)
49
50 task single_windows_release, "build windows release":
51 compilerFlags()
52 compilerFlagsRelease()
53 switch("outdir", BUILDBASE & "/" & RELEASE & "/" & WINDOWS)
54 setCommand "c"
55 mkDir(BUILDBASE & "/" & RELEASE & "/" & WINDOWS)
56
57 task build_all_linux_debug, "build all examples with linux/debug":
58 for file in listFiles("examples"): 59 for file in listFiles("examples"):
59 if file.endsWith(".nim"): 60 if file.endsWith(".nim"):
60 selfExec(&"single_linux_debug {file}") 61 exec(&"nim build {file}")
61 62
62 task build_all_linux_release, "build all examples with linux/release": 63 task build_all_release, "build all examples for release":
63 for file in listFiles("examples"): 64 for file in listFiles("examples"):
64 if file.endsWith(".nim"): 65 if file.endsWith(".nim"):
65 selfExec(&"single_linux_release {file}") 66 exec(&"nim build -d:release {file}")
66
67 task build_all_windows_debug, "build all examples with windows/debug":
68 for file in listFiles("examples"):
69 if file.endsWith(".nim"):
70 exec(&"nim single_windows_debug --define:mingw {file}")
71
72 task build_all_windows_release, "build all examples with windows/release":
73 for file in listFiles("examples"):
74 if file.endsWith(".nim"):
75 exec(&"nim single_windows_release --define:mingw {file}")
76
77 task build_all_debug, "build all examples with */debug":
78 build_all_linux_debugTask()
79 build_all_windows_debugTask()
80
81 task build_all_release, "build all examples with */release":
82 build_all_linux_releaseTask()
83 build_all_windows_releaseTask()
84
85 task build_all_linux, "build all examples with linux/*":
86 build_all_linux_debugTask()
87 build_all_linux_releaseTask()
88
89 task build_all_windows, "build all examples with windows/*":
90 build_all_windows_debugTask()
91 build_all_windows_releaseTask()
92
93 task build_all, "build all examples":
94 build_all_linuxTask()
95 build_all_windowsTask()
96 67
97 task clean, "remove all build files": 68 task clean, "remove all build files":
98 exec(&"rm -rf {BUILDBASE}") 69 exec(&"rm -rf {BUILDBASE}")
99 70
100 task publish, "publish all build": 71 task publish, "publish all build":
114 exec &"cd {dirname} && unzip *.zip" 85 exec &"cd {dirname} && unzip *.zip"
115 exec &"mv {dirname}/bin/glslangValidator examples/" 86 exec &"mv {dirname}/bin/glslangValidator examples/"
116 exec &"rm -rf {dirname}" 87 exec &"rm -rf {dirname}"
117 88
118 task glslangValidator_exe, "Download glslangValidator.exe (required for windows compilation)": 89 task glslangValidator_exe, "Download glslangValidator.exe (required for windows compilation)":
90 # TODO: make this work on windows
119 let dirname = "/tmp/glslang_download" 91 let dirname = "/tmp/glslang_download"
120 exec &"mkdir -p {dirname}" 92 exec &"mkdir -p {dirname}"
121 exec &"cd {dirname} && wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-windows-x64-Release.zip" 93 exec &"cd {dirname} && wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-windows-x64-Release.zip"
122 exec &"cd {dirname} && unzip *.zip" 94 exec &"cd {dirname} && unzip *.zip"
123 exec &"mv {dirname}/bin/glslangValidator.exe examples/" 95 exec &"mv {dirname}/bin/glslangValidator.exe examples/"
142 mkDir "src/semicongine/core/" 114 mkDir "src/semicongine/core/"
143 cpFile "src/vulkan_api/output/api.nim", "src/semicongine/core/api.nim" 115 cpFile "src/vulkan_api/output/api.nim", "src/semicongine/core/api.nim"
144 cpDir "src/vulkan_api/output/platform", "src/semicongine/vulkan/platform" 116 cpDir "src/vulkan_api/output/platform", "src/semicongine/vulkan/platform"
145 117
146 if getCommand() in ["c", "compile", "r", "dump", "check", "idetools"]: 118 if getCommand() in ["c", "compile", "r", "dump", "check", "idetools"]:
147 compilerFlags() 119 --path:src
120 --mm:orc
121 --threads:on
122 if defined(linux):
123 --d:VK_USE_PLATFORM_XLIB_KHR
124 if defined(windows):
125 --d:VK_USE_PLATFORM_WIN32_KHR