aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nimpb.nimble2
-rw-r--r--nimpb/compiler/compiler.nim92
-rw-r--r--nimpb/compiler/generator.nim (renamed from nimpb/compiler/plugin.nim)0
3 files changed, 45 insertions, 49 deletions
diff --git a/nimpb.nimble b/nimpb.nimble
index 7f55df3..28247db 100644
--- a/nimpb.nimble
+++ b/nimpb.nimble
@@ -5,4 +5,6 @@ license = "MIT"
skipDirs = @["examples", "tests"]
+bin = @["nimpb/compiler/compiler"]
+
requires "nim >= 0.18.0"
diff --git a/nimpb/compiler/compiler.nim b/nimpb/compiler/compiler.nim
index b93d158..fe0a5e4 100644
--- a/nimpb/compiler/compiler.nim
+++ b/nimpb/compiler/compiler.nim
@@ -1,64 +1,58 @@
+import macros
import os
import osproc
-import streams
import strformat
-import strtabs
import strutils
-from plugin import processFileDescriptorSet, ServiceGenerator, Service, ServiceMethod
-
+from generator import processFileDescriptorSet, ServiceGenerator, Service, ServiceMethod
export Service, ServiceMethod
-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 = ""
-
-proc findCompiler(): string =
- let
- compilerName = &"protoc-{compilerId}{exeSuffix}"
- paths = @[
- getAppDir() / "src" / "nimpb_buildpkg" / "protobuf",
- getAppDir() / "nimpb_buildpkg" / "protobuf",
- parentDir(currentSourcePath()) / "nimpb_buildpkg" / "protobuf",
- ]
-
- for path in paths:
- if fileExists(path / compilerName):
- return path / compilerName
-
- raise newException(Exception, &"{compilerName} not found!")
+const
+ nimpbBuildInfo = gorgeEx("nimble dump nimpb_protoc")
+ isNimpbBuildAvailable = nimpbBuildInfo[1] == 0
+
+when isNimpbBuildAvailable:
+ import nimpb_protoc/nimpb_protoc
+
+proc findCompiler*(): string =
+ result = ""
+
+ if existsEnv("NIMPB_PROTOC"):
+ result = getEnv("NIMPB_PROTOC")
+ if not fileExists(result):
+ result = ""
+
+ if result == "":
+ result = findExe("protoc")
+
+ when isNimpbBuildAvailable:
+ if result == "":
+ result = nimpb_protoc.getCompilerPath()
+
+ if result == "":
+ let msg = """
+error: protoc compiler not found
+
+Now you have three options to make this work:
+
+1. Tell me the full path to the protoc executable by using NIMPB_PROTOC
+ environment variable
+
+2. You can also make sure that protoc is in PATH, which will make me find it
+
+3. Install nimpb_protoc with nimble, which includes the protoc compiler for the
+ most common platforms (Windows, Linux, macOS) and I should be able to pick
+ it up after a recompile
+
+"""
+
+ raise newException(Exception, msg)
proc builtinIncludeDir(compilerPath: string): string =
parentDir(compilerPath) / "include"
-template verboseEcho(x: untyped): untyped =
- if verbose:
- echo(x)
-
proc myTempDir(): string =
- result = getTempDir() / "nimpb_build_tmp"
+ result = getTempDir() / "nimpb_protoc_tmp"
proc compileProtos*(protos: openArray[string],
includes: openArray[string],
diff --git a/nimpb/compiler/plugin.nim b/nimpb/compiler/generator.nim
index abdad07..abdad07 100644
--- a/nimpb/compiler/plugin.nim
+++ b/nimpb/compiler/generator.nim