diff config.nims @ 33:94c38e4b5782

did: refactoring, move more from make to nimscript
author Sam <sam@basx.dev>
date Sun, 15 Jan 2023 23:23:54 +0700
parents 71bbe11d8de8
children 7f99b21a8777
line wrap: on
line diff
--- a/config.nims	Sat Jan 14 23:34:50 2023 +0700
+++ b/config.nims	Sun Jan 15 23:23:54 2023 +0700
@@ -1,6 +1,12 @@
-import os
+import std/strformat
+import std/strutils
+import std/os
 
-const buildbase = "build"
+const BUILDBASE = "build"
+const DEBUG = "debug"
+const RELEASE = "release"
+const LINUX = "linux"
+const WINDOWS = "windows"
 
 proc compilerFlags() =
   switch("path", "src")
@@ -19,30 +25,85 @@
   switch("checks", "off")
   switch("assertions", "off")
 
-task build_linux_debug, "build linux debug":
+task single_linux_debug, "build linux debug":
   compilerFlags()
   compilerFlagsDebug()
-  buildbase.joinPath("debug/linux").mkDir()
+  switch("outdir", BUILDBASE / DEBUG / LINUX)
+  setCommand "c"
+  mkDir(BUILDBASE / DEBUG / LINUX)
+
+task single_linux_release, "build linux release":
+  compilerFlags()
+  compilerFlagsRelease()
+  switch("outdir", BUILDBASE / RELEASE / LINUX)
   setCommand "c"
+  mkDir(BUILDBASE / RELEASE / LINUX)
 
-task build_linux_release, "build linux release":
+task single_windows_debug, "build windows debug":
+  compilerFlags()
+  compilerFlagsDebug()
+  # for some the --define:mingw does not work from inside here...
+  # so we need to set it when calling the task and use "/" to prevent
+  # the use of backslash while crosscompiling
+  switch("define", "mingw")
+  switch("outdir", BUILDBASE & "/" & DEBUG & "/" & WINDOWS)
+  setCommand "c"
+  mkDir(BUILDBASE & "/" & DEBUG & "/" & WINDOWS)
+
+task single_windows_release, "build windows release":
   compilerFlags()
   compilerFlagsRelease()
-  buildbase.joinPath("release/linux").mkDir()
-  setCommand "c"
-
-task build_windows_debug, "build windows debug":
-  compilerFlags()
-  compilerFlagsDebug()
+  switch("outdir", BUILDBASE & "/" & RELEASE & "/" & WINDOWS)
   switch("define", "mingw")
-  buildbase.joinPath("debug/windows").mkDir()
   setCommand "c"
+  mkDir(BUILDBASE & "/" & RELEASE & "/" & WINDOWS)
 
-task build_windows_release, "build windows release":
+task build_all_linux_debug, "build all examples with linux/debug":
+  for file in listFiles("examples"):
+    if file.endsWith(".nim"):
+      selfExec(&"single_linux_debug {file}")
+
+task build_all_linux_release, "build all examples with linux/release":
+  for file in listFiles("examples"):
+    if file.endsWith(".nim"):
+      selfExec(&"single_linux_release {file}")
+
+task build_all_windows_debug, "build all examples with windows/debug":
+  for file in listFiles("examples"):
+    if file.endsWith(".nim"):
+      exec(&"nim single_windows_debug --define:mingw {file}")
+
+task build_all_windows_release, "build all examples with windows/release":
+  for file in listFiles("examples"):
+    if file.endsWith(".nim"):
+      exec(&"nim single_windows_release --define:mingw {file}")
+
+task build_all_debug, "build all examples with */debug":
+  build_all_linux_debugTask()
+  build_all_windows_debugTask()
+
+task build_all_release, "build all examples with */release":
+  build_all_linux_releaseTask()
+  build_all_windows_releaseTask()
+
+task build_all_linux, "build all examples with linux/*":
+  build_all_linux_debugTask()
+  build_all_linux_releaseTask()
+
+task build_all_windows, "build all examples with windows/*":
+  build_all_windows_debugTask()
+  build_all_windows_releaseTask()
+
+task build_all, "build all examples":
+  build_all_linuxTask()
+  build_all_windowsTask()
+
+task clean, "remove all build files":
+  exec(&"rm -rf {BUILDBASE}")
+
+task publish, "publish all build":
+  exec("rsync -rv build/ basx.dev:/var/www/public.basx.dev/zamikongine")
+
+
+if getCommand() == "c":
   compilerFlags()
-  compilerFlagsRelease()
-  switch("define", "mingw")
-  buildbase.joinPath("release/windows").mkDir()
-  setCommand "c"
-
-compilerFlags()