aboutsummaryrefslogtreecommitdiff
path: root/src/nimpb_protoc.nim
diff options
context:
space:
mode:
Diffstat (limited to 'src/nimpb_protoc.nim')
-rw-r--r--src/nimpb_protoc.nim50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/nimpb_protoc.nim b/src/nimpb_protoc.nim
new file mode 100644
index 0000000..951849a
--- /dev/null
+++ b/src/nimpb_protoc.nim
@@ -0,0 +1,50 @@
+import os
+import strformat
+
+when defined(windows):
+ const compilerId = "win32"
+elif defined(linux):
+ when defined(i386):
+ const arch = "x86_32"
+ elif defined(amd64):
+ const arch = "x86_64"
+ elif defined(arm64):
+ const arch = "aarch_64"
+ else:
+ {.fatal:"unsupported architecture".}
+ const compilerId = "linux-" & arch
+elif defined(macosx):
+ when defined(amd64):
+ const arch = "x86_64"
+ else:
+ {.fatal:"unsupported architecture".}
+ const compilerId = "osx-" & arch
+else:
+ {.fatal:"unsupported platform".}
+
+when defined(windows):
+ const exeSuffix = ".exe"
+else:
+ const exeSuffix = ""
+
+let
+ paths = @[
+ # getAppDir() / "src" / "nimpb_protocpkg" / "protobuf",
+ # getAppDir() / "nimpb_protocpkg" / "protobuf",
+ parentDir(currentSourcePath()) / "nimpb_protocpkg" / "protobuf",
+ ]
+
+proc getCompilerPath*(): string =
+ let
+ compilerName = &"protoc-{compilerId}{exeSuffix}"
+
+ for path in paths:
+ if fileExists(path / compilerName):
+ return path / compilerName
+
+ raise newException(Exception, &"{compilerName} not found!")
+
+proc getProtoIncludeDir*(): string =
+ for path in paths:
+ if fileExists(path / "include"):
+ return path / "include"