202 lines
4.6 KiB
Markdown
202 lines
4.6 KiB
Markdown
# Dimma
|
|
|
|
A cross-platform desktop application built with Odin (raylib + raygui) and Go (auto-updater).
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
dimma/
|
|
├── odin/ # Odin source code (GUI application)
|
|
│ ├── main.odin # Main application entry point
|
|
│ ├── raylib.odin # raylib C interop bindings
|
|
│ ├── raygui.odin # raygui C interop bindings
|
|
│ ├── build.odin # Odin build script
|
|
│ └── odin.json # Odin project configuration
|
|
├── go/ # Go source code (auto-updater)
|
|
│ ├── main.go # Auto-updater CLI
|
|
│ ├── go.mod # Go module definition
|
|
│ ├── build.sh # Unix build script
|
|
│ └── build.ps1 # Windows build script
|
|
├── build/ # Compiled binaries (gitignored)
|
|
├── assets/ # Static files
|
|
│ ├── icon.png # Application icon
|
|
│ └── version.txt # Current version file
|
|
├── scripts/ # Build/utility scripts
|
|
│ ├── build-all.sh # Build all platforms (Unix)
|
|
│ ├── build-all.ps1 # Build all platforms (Windows)
|
|
│ ├── run.sh # Run script (Unix)
|
|
│ └── run.ps1 # Run script (Windows)
|
|
├── .gitignore
|
|
└── README.md
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
### Odin
|
|
- [Odin compiler](https://odin-lang.org/) (latest stable, e.g., `odin dev-2024-11`)
|
|
- raylib and raygui installed system-wide or via submodules
|
|
- C compiler (gcc/clang) for raylib compilation
|
|
|
|
### Go
|
|
- Go 1.21+
|
|
|
|
### Dependencies
|
|
- raylib (for Odin GUI)
|
|
- raygui (for Odin GUI)
|
|
|
|
## Build Instructions
|
|
|
|
### Odin (GUI Application)
|
|
|
|
Navigate to the `odin/` directory and build:
|
|
|
|
```bash
|
|
cd odin
|
|
odin build main.odin -build-mode:exe -target:. -out:../build/dimma
|
|
```
|
|
|
|
**With raylib/raygui:**
|
|
|
|
```bash
|
|
odin build main.odin \
|
|
-build-mode:exe \
|
|
-target:. \
|
|
-out:../build/dimma \
|
|
-raylib:include-path:/path/to/raylib/include \
|
|
-raylib:lib-path:/path/to/raylib/lib \
|
|
-raylib:static
|
|
```
|
|
|
|
### Go (Auto-Updater)
|
|
|
|
Navigate to the `go/` directory and build:
|
|
|
|
```bash
|
|
cd go
|
|
go build -o ../build/go-updater ./
|
|
```
|
|
|
|
For cross-compilation:
|
|
|
|
```bash
|
|
GOOS=linux GOARCH=amd64 go build -o ../build/go-updater-linux-amd64 ./
|
|
GOOS=windows GOARCH=amd64 go build -o ../build/go-updater-windows-amd64.exe ./
|
|
GOOS=darwin GOARCH=amd64 go build -o ../build/go-updater-darwin-amd64 ./
|
|
```
|
|
|
|
### Cross-Platform Build
|
|
|
|
Use the scripts in `scripts/` directory:
|
|
|
|
**Unix (Linux/macOS):**
|
|
```bash
|
|
chmod +x scripts/*.sh
|
|
./scripts/build-all.sh
|
|
```
|
|
|
|
**Windows (PowerShell):**
|
|
```powershell
|
|
.\scripts\build-all.ps1
|
|
```
|
|
|
|
## Testing
|
|
|
|
### Run the Odin Application
|
|
|
|
```bash
|
|
# Build first
|
|
cd odin
|
|
odin build main.odin -build-mode:exe -out:../build/dimma
|
|
|
|
# Then run
|
|
./scripts/run.sh
|
|
```
|
|
|
|
### Test the Auto-Updater
|
|
|
|
```bash
|
|
cd go
|
|
go run main.go --check
|
|
```
|
|
|
|
This will:
|
|
1. Fetch the latest version from `https://gitea.sanplex.xyz/Sansan/dimma/releases/latest`
|
|
2. Compare it to the hardcoded version `v0.1.0`
|
|
3. Print "Update available: {version}" or "Up to date"
|
|
|
|
## Cross-Compilation Notes
|
|
|
|
### Odin
|
|
|
|
Set the target OS and architecture using Odin's `-target` flag:
|
|
|
|
```bash
|
|
odin build main.odin -target:linux_amd64 -build-mode:exe
|
|
odin build main.odin -target:windows_amd64 -build-mode:exe
|
|
odin build main.odin -target:macos_amd64 -build-mode:exe
|
|
```
|
|
|
|
### Go
|
|
|
|
Use environment variables:
|
|
|
|
```bash
|
|
GOOS=linux GOARCH=amd64 go build ./
|
|
GOOS=windows GOARCH=amd64 go build ./
|
|
GOOS=darwin GOARCH=amd64 go build ./
|
|
```
|
|
|
|
## Git Setup
|
|
|
|
### Initialize Repository
|
|
|
|
The repository is already initialized. For a fresh clone:
|
|
|
|
```bash
|
|
git init
|
|
git add .
|
|
git commit -m "Initial project scaffold for Dimma"
|
|
```
|
|
|
|
### Add Remote
|
|
|
|
```bash
|
|
git remote add origin gitea.sanplex.xyz:Sansan/dimma.git
|
|
```
|
|
|
|
Or with HTTPS:
|
|
|
|
```bash
|
|
git remote add origin https://gitea.sanplex.xyz/Sansan/dimma.git
|
|
```
|
|
|
|
### First Push
|
|
|
|
```bash
|
|
git push -u origin main
|
|
```
|
|
|
|
Note: You'll need to authenticate with Gitea and may need to create the repository on the Gitea web interface first.
|
|
|
|
## Version Management
|
|
|
|
The current version is defined in:
|
|
- `assets/version.txt` - Plain text version file
|
|
- `odin/main.odin` - `CURRENT_VERSION` constant
|
|
- `go/main.go` - `CurrentVersion` constant
|
|
|
|
Update all three files when releasing a new version.
|
|
|
|
## Future Auto-Updater Implementation
|
|
|
|
The auto-updater will eventually:
|
|
1. Download the new binary from Gitea release assets
|
|
2. Replace the old binary (with appropriate permissions)
|
|
3. Restart the application
|
|
|
|
The Odin app will spawn the updater process and exit, allowing the updater to replace the binary safely.
|
|
|
|
## License
|
|
|
|
[License information to be added]
|