Compare commits

..

No commits in common. "32dfba178ac7e881f719cffbd0391cda393c9671" and "d3e6340b28e5c37db5c9109419784ce1c699ba34" have entirely different histories.

6 changed files with 69 additions and 33 deletions

1
.gitignore vendored
View file

@ -36,6 +36,7 @@ key.properties
# Generated Files # Generated Files
*.g.dart *.g.dart
*.freezed.dart *.freezed.dart
src/
# Devel Password # Devel Password
password.txt password.txt

4
.gitmodules vendored
View file

@ -1,4 +0,0 @@
[submodule "gomuks"]
path = gomuks
url = https://github.com/zachatrocity/gomuks
branch = init-root-dir

View file

@ -130,7 +130,7 @@ A simple and user-friendly Matrix client made with Flutter and a Gomuks backend.
First, clone and open the repo: First, clone and open the repo:
```sh ```sh
git clone --recurse-submodules https://git.federated.nexus/Henry-Hiles/nexus git clone https://git.federated.nexus/Henry-Hiles/nexus
cd nexus cd nexus
``` ```
@ -138,12 +138,12 @@ cd nexus
#### Linux #### Linux
- With Nix: Either use direnv and `direnv allow`, or `nix flake develop` - With Nix: Either use direnv, or `nix flake develop`
- Without Nix: Install Flutter, Go, Olm, Git, Clang, and GLibc. - Without Nix: Install Flutter, Go, Olm, Git, Clang, and GLibc.
#### Windows / MacOS #### Windows / MacOS
I don't really know. You will need Flutter, Git, Go, and Visual Studio tools, and otherwise I guess just keep installing stuff until there aren't any errors. I will look into this sometimeTM. I don't really know. You will need Flutter, Git, Olm, Go, and Visual Studio tools, and otherwise I guess just keep installing stuff until there aren't any errors. I will look into this sometimeTM.
### Set up Flutter ### Set up Flutter
@ -153,7 +153,13 @@ Get dependencies:
flutter pub get flutter pub get
``` ```
Generate Gomuks bindings: Get dependencies:
```sh
flutter pub get
```
Clone Gomuks and generate bindings:
```sh ```sh
scripts/generate.sh scripts/generate.sh

1
gomuks

@ -1 +0,0 @@
Subproject commit daa0ba028e7d89ba9fc7580fc8099348e6145cb3

View file

@ -3,7 +3,7 @@ import "package:hooks/hooks.dart";
import "package:code_assets/code_assets.dart"; import "package:code_assets/code_assets.dart";
Future<void> main(List<String> args) => build(args, (input, output) async { Future<void> main(List<String> args) => build(args, (input, output) async {
final buildDir = input.packageRoot.resolve("build/"); final buildDir = input.packageRoot.resolve("src/");
if (await File(buildDir.resolve("lock").toFilePath()).exists()) return; if (await File(buildDir.resolve("lock").toFilePath()).exists()) return;
final codeConfig = input.config.code; final codeConfig = input.config.code;
@ -27,11 +27,10 @@ Future<void> main(List<String> args) => build(args, (input, output) async {
final targetNdkApi = codeConfig.android.targetNdkApi; final targetNdkApi = codeConfig.android.targetNdkApi;
final ndkHome = final ndkHome = Platform.environment["ANDROID_NDK_HOME"]
Platform.environment["ANDROID_NDK_HOME"] ?? ?? Platform.environment["ANDROID_NDK_ROOT"]
Platform.environment["ANDROID_NDK_ROOT"] ?? ?? Platform.environment["NDK_HOME"]
Platform.environment["NDK_HOME"] ?? ?? await _findNdkFromSdk();
await _findNdkFromSdk();
if (ndkHome == null) { if (ndkHome == null) {
throw Exception( throw Exception(
"Could not find Android NDK. Set ANDROID_NDK_HOME or install via sdkmanager.", "Could not find Android NDK. Set ANDROID_NDK_HOME or install via sdkmanager.",
@ -40,30 +39,34 @@ Future<void> main(List<String> args) => build(args, (input, output) async {
final hostTag = _ndkHostTag(); final hostTag = _ndkHostTag();
final (goArch, ccTriple) = _androidArch(targetArch); final (goArch, ccTriple) = _androidArch(targetArch);
final cc = final cc = "$ndkHome/toolchains/llvm/prebuilt/$hostTag/bin/$ccTriple$targetNdkApi-clang";
"$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; break;
default: default:
throw UnsupportedError("Unsupported OS: $targetOS"); throw UnsupportedError("Unsupported OS: $targetOS");
} }
final gomuksBuildDir = input.packageRoot.resolve("gomuks/"); final gomuksBuildDir = buildDir.resolve("gomuks/");
final libFile = buildDir.resolve("${targetArch.name}/$libFileName"); final libFile = gomuksBuildDir.resolve("${targetArch.name}/$libFileName");
// goheif/dav1d supported on Android would need to fix upstream // goheif/dav1d supported on Android would need to fix upstream
final tags = targetOS == OS.android ? "goolm,noheic" : "goolm"; final tags = targetOS == OS.android ? "goolm,noheic" : "goolm";
print( print("Building Gomuks shared library $libFileName (${targetOS.name}/${targetArch.name}) from source...");
"Building Gomuks shared library $libFileName (${targetOS.name}/${targetArch.name}) from source...", final result = await Process.run("go", [
); "build",
final result = await Process.run( "-tags", tags,
"go", "-o",
["build", "-tags", tags, "-o", libFile.path, "-buildmode=c-shared"], libFile.path,
workingDirectory: gomuksBuildDir.resolve("pkg/ffi/").toFilePath(), "-buildmode=c-shared",
environment: env.isNotEmpty ? env : null, ], workingDirectory: gomuksBuildDir.resolve("source/pkg/ffi/").toFilePath(),
); environment: env.isNotEmpty ? env : null);
if (result.exitCode != 0) { if (result.exitCode != 0) {
throw Exception("Failed to build Gomuks shared library\n${result.stderr}"); throw Exception("Failed to build Gomuks shared library\n${result.stderr}");
@ -87,9 +90,8 @@ Future<void> main(List<String> args) => build(args, (input, output) async {
Future<String?> _findNdkFromSdk() async { Future<String?> _findNdkFromSdk() async {
// pretty sure this wont be needed with nix, i'll get this removed // pretty sure this wont be needed with nix, i'll get this removed
final androidHome = final androidHome = Platform.environment["ANDROID_HOME"]
Platform.environment["ANDROID_HOME"] ?? ?? Platform.environment["ANDROID_SDK_ROOT"];
Platform.environment["ANDROID_SDK_ROOT"];
if (androidHome == null) return null; if (androidHome == null) return null;
final ndkDir = Directory("$androidHome/ndk"); final ndkDir = Directory("$androidHome/ndk");
if (!await ndkDir.exists()) return null; if (!await ndkDir.exists()) return null;

View file

@ -3,7 +3,39 @@ import "package:ffigen/ffigen.dart";
import "package:path/path.dart"; import "package:path/path.dart";
void main(List<String> args) async { void main(List<String> args) async {
final repoDir = Directory.fromUri(Platform.script.resolve("../gomuks")); 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}",
);
}
print("Generating FFI Bindings..."); print("Generating FFI Bindings...");