Mercurial > games > semicongine
comparison config.nims @ 213:b5d9410a8184
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 | 81fab407a479 |
| children | f1f35e9f5335 |
comparison
equal
deleted
inserted
replaced
| 212:77755701bf49 | 213:b5d9410a8184 |
|---|---|
| 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 |
