diff --git a/.gitignore b/.gitignore index d6616e1..dfaf03d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,6 @@ key.properties # Generated Files *.g.dart *.freezed.dart -src/ # Devel Password password.txt \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..17d64ba --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "gomuks"] + path = gomuks + url = https://github.com/zachatrocity/gomuks + branch = init-root-dir diff --git a/README.md b/README.md index cf652af..fce7651 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ A simple and user-friendly Matrix client made with Flutter and a Gomuks backend. First, clone and open the repo: ```sh -git clone https://git.federated.nexus/Henry-Hiles/nexus +git clone --recurse-submodules https://git.federated.nexus/Henry-Hiles/nexus cd nexus ``` @@ -153,13 +153,7 @@ Get dependencies: flutter pub get ``` -Get dependencies: - -```sh -flutter pub get -``` - -Clone Gomuks and generate bindings: +Generate Gomuks bindings: ```sh scripts/generate.sh diff --git a/gomuks b/gomuks new file mode 160000 index 0000000..daa0ba0 --- /dev/null +++ b/gomuks @@ -0,0 +1 @@ +Subproject commit daa0ba028e7d89ba9fc7580fc8099348e6145cb3 diff --git a/hook/build.dart b/hook/build.dart index fca2270..52df9c4 100644 --- a/hook/build.dart +++ b/hook/build.dart @@ -3,7 +3,7 @@ import "package:hooks/hooks.dart"; import "package:code_assets/code_assets.dart"; Future main(List args) => build(args, (input, output) async { - final buildDir = input.packageRoot.resolve("src/"); + final buildDir = input.packageRoot.resolve("build/"); if (await File(buildDir.resolve("lock").toFilePath()).exists()) return; final codeConfig = input.config.code; @@ -27,10 +27,11 @@ Future main(List args) => build(args, (input, output) async { final targetNdkApi = codeConfig.android.targetNdkApi; - final ndkHome = Platform.environment["ANDROID_NDK_HOME"] - ?? Platform.environment["ANDROID_NDK_ROOT"] - ?? Platform.environment["NDK_HOME"] - ?? await _findNdkFromSdk(); + final ndkHome = + Platform.environment["ANDROID_NDK_HOME"] ?? + Platform.environment["ANDROID_NDK_ROOT"] ?? + Platform.environment["NDK_HOME"] ?? + await _findNdkFromSdk(); if (ndkHome == null) { throw Exception( "Could not find Android NDK. Set ANDROID_NDK_HOME or install via sdkmanager.", @@ -39,34 +40,30 @@ Future main(List args) => build(args, (input, output) async { final hostTag = _ndkHostTag(); final (goArch, ccTriple) = _androidArch(targetArch); - final cc = "$ndkHome/toolchains/llvm/prebuilt/$hostTag/bin/$ccTriple$targetNdkApi-clang"; + final cc = + "$ndkHome/toolchains/llvm/prebuilt/$hostTag/bin/$ccTriple$targetNdkApi-clang"; - env = { - "CGO_ENABLED": "1", - "GOOS": "android", - "GOARCH": goArch, - "CC": cc, - }; + env = {"CGO_ENABLED": "1", "GOOS": "android", "GOARCH": goArch, "CC": cc}; break; default: throw UnsupportedError("Unsupported OS: $targetOS"); } - final gomuksBuildDir = buildDir.resolve("gomuks/"); - final libFile = gomuksBuildDir.resolve("${targetArch.name}/$libFileName"); + final gomuksBuildDir = input.packageRoot.resolve("gomuks/"); + final libFile = buildDir.resolve("${targetArch.name}/$libFileName"); // goheif/dav1d supported on Android would need to fix upstream final tags = targetOS == OS.android ? "goolm,noheic" : "goolm"; - print("Building Gomuks shared library $libFileName (${targetOS.name}/${targetArch.name}) from source..."); - final result = await Process.run("go", [ - "build", - "-tags", tags, - "-o", - libFile.path, - "-buildmode=c-shared", - ], workingDirectory: gomuksBuildDir.resolve("source/pkg/ffi/").toFilePath(), - environment: env.isNotEmpty ? env : null); + print( + "Building Gomuks shared library $libFileName (${targetOS.name}/${targetArch.name}) from source...", + ); + final result = await Process.run( + "go", + ["build", "-tags", tags, "-o", libFile.path, "-buildmode=c-shared"], + workingDirectory: gomuksBuildDir.resolve("pkg/ffi/").toFilePath(), + environment: env.isNotEmpty ? env : null, + ); if (result.exitCode != 0) { throw Exception("Failed to build Gomuks shared library\n${result.stderr}"); @@ -90,8 +87,9 @@ Future main(List args) => build(args, (input, output) async { Future _findNdkFromSdk() async { // pretty sure this wont be needed with nix, i'll get this removed - final androidHome = Platform.environment["ANDROID_HOME"] - ?? Platform.environment["ANDROID_SDK_ROOT"]; + final androidHome = + Platform.environment["ANDROID_HOME"] ?? + Platform.environment["ANDROID_SDK_ROOT"]; if (androidHome == null) return null; final ndkDir = Directory("$androidHome/ndk"); if (!await ndkDir.exists()) return null; diff --git a/scripts/generate.dart b/scripts/generate.dart index b6b5453..446a469 100644 --- a/scripts/generate.dart +++ b/scripts/generate.dart @@ -3,39 +3,7 @@ import "package:ffigen/ffigen.dart"; import "package:path/path.dart"; void main(List args) async { - final repoDir = Directory.fromUri( - Platform.script.resolve("../src/gomuks/source"), - ); - if (await repoDir.exists()) await repoDir.delete(recursive: true); - await repoDir.create(recursive: true); - - print("Cloning Gomuks repository..."); - final cloneResult = await Process.run("git", [ - "clone", - "https://github.com/zachatrocity/gomuks", - repoDir.path, - ]); - - if (cloneResult.exitCode != 0) { - throw Exception( - "Failed to clone Gomuks repository: \n${cloneResult.stderr}", - ); - } - - final commit = await File.fromUri( - Platform.script.resolve("../gomuks.lock"), - ).readAsString(); - - final checkoutResult = await Process.run("git", [ - "checkout", - commit, - ], workingDirectory: repoDir.path); - - if (checkoutResult.exitCode != 0) { - throw Exception( - "Failed to check out locked commit: \n${checkoutResult.stderr}", - ); - } + final repoDir = Directory.fromUri(Platform.script.resolve("../gomuks")); print("Generating FFI Bindings...");