Initial project scaffold for Dimma
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
# 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]
|
||||
Reference in New Issue
Block a user