3 Commits

Author SHA1 Message Date
7409abf54a readme 2025-07-25 14:58:38 -07:00
af8873d0ef build 2025-07-25 14:49:59 -07:00
3d55a8da05 clone and build rosettax87 2025-07-25 14:17:25 -07:00
7 changed files with 32 additions and 30 deletions

View File

@@ -2,5 +2,5 @@
Icon = "Icon.png"
Name = "EpochSilicon"
ID = "com.burkey.epochsilicon"
Version = "1.0.9"
Build = 31
Version = "1.0.3"
Build = 29

View File

@@ -19,7 +19,11 @@ build: build-dev
build-release:
@rm -rf ./EpochSilicon.app
@echo "Building optimized release version..."
CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -trimpath -tags=release -o epochsilicon .
CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build \
-ldflags="-s -w -X main.appVersion=$$(grep Version FyneApp.toml | cut -d'"' -f2)" \
-trimpath \
-tags=release \
-o epochsilicon .
@echo "Packaging with fyne..."
GOOS=darwin GOARCH=arm64 fyne package --release --executable epochsilicon
@echo "Copying additional resources to app bundle..."

View File

@@ -4,8 +4,6 @@
A user-friendly launcher for Project Epoch on Apple Silicon Macs, with one-click patching of winerosetta, rosettax87 and d9vk.
**This software is currently in active development, there WILL be bugs and constant updates as Epoch rolls out**
## Features
* **Apple Silicon Compatibility:** Runs 32-bit DirectX9 World of Warcraft (v3.3.5a) on M1/M2/M3/M4 Macs without "illegal instruction" errors.
@@ -50,16 +48,16 @@ Before you begin, ensure you have the following:
* Click "Patch Epoch".
* Click "Patch CrossOver".
* Status indicators will turn green once patching is successful for each.
5. **Start RosettaX87 Service**:
6. **Start RosettaX87 Service**:
* Click "Start Service" and enter your sudo password when prompted.
* This will run the RosettaX87 service in the background and is required for launching the game.
* The service will automatically stop when you close the launcher.
6. **Configure Options (Optional)**:
7. **Configure Options (Optional)**:
* **Enable Metal Hud**: Shows FPS counter in-game.
* **Advanced Logging**: Enables debugging logs, located in `$HOME/Library/Application Support/EpochSilicon`. Enable this setting if you are generating logs for troubleshooting
7. **Launch Game**:
8. **Launch Game**:
* Once both paths are set, both components are patched, and the RosettaX87 service is running, the "Launch Game" button will become active. Click it.
8. **Enjoy**: Experience a VM free, smoother Project Epoch on your Apple Silicon Mac!
9. **Enjoy**: Experience a VM free, smoother Project Epoch on your Apple Silicon Mac!
## Troubleshooting / FAQ
@@ -76,8 +74,9 @@ The initial patch download is quite large and can take a while if your internet
This appears to be a problem with using a built-in version of `rosettax87`. In order to fix this, you must compile it yourself.
1. Install Xcode command line tools by opening a terminal and typing `xcode-select --install` and following the prompts
2. Setup [Homebrew](https://brew.sh/) if you don't have it already
3. Install Cmake by opening a terminal and enter `brew install cmake`. Cmake must be installed through Homebrew
2. Install Cmake
a. Setup [Homebrew](https://brew.sh/) if you don't have it already
b. Open a terminal and enter `brew install cmake`
3. Run EpochSilicon and click the `Troubleshooting` button
4. Find the line that says `Build Rosettax87 locally` and click the `Build` button, following the prompts
@@ -124,7 +123,9 @@ TBD
## Bundled Binaries
The `rosettax87` and `winerosetta` components included in this application are precompiled for convenience. You can compile them yourself by following the instructions provided above in the Troubleshooting section
The `rosettax87` and `winerosetta` components included in this application are precompiled for convenience. If you prefer, you can compile them yourself by following the instructions provided by Lifeisawful on the official repositories:
[https://github.com/Lifeisawful/winerosetta](https://github.com/Lifeisawful/winerosetta)
[https://github.com/Lifeisawful/rosettax87](https://github.com/Lifeisawful/rosettax87)
## License
@@ -138,5 +139,5 @@ All credit for the core translation layer `winerosetta` and `rosettax87` goes to
[https://github.com/Lifeisawful/rosettax87](https://github.com/Lifeisawful/rosettax87)
EpochSilicon is a fork of [https://turtlesilicon.github.io/](TurtleSilicon), credit for the base of the application goes to [**@tairasu**](https://github.com/tairasu)
EpochSilicon is a fork of [https://turtlesilicon.github.io/](TurtleSilicon), credit for the base of the application goes to tairasu.

View File

@@ -11,7 +11,7 @@ import (
"strings"
)
const appVersion = "1.0.9"
const appVersion = "1.0.3"
func main() {
log.SetupLogging()

View File

@@ -21,11 +21,6 @@ import (
"fyne.io/fyne/v2/dialog"
)
const (
CmakePath = "/opt/homebrew/bin/cmake"
ClangPath = "/usr/bin/clang"
)
func PatchEpoch(myWindow fyne.Window, updateAllStatuses func()) {
log.Debug("Patch Epoch clicked")
if paths.EpochPath == "" {
@@ -491,14 +486,14 @@ func BuildRosetta() (string, string, error) {
return "", "", fmt.Errorf("failed to clone repository: %v", err)
}
cmd := exec.Command(CmakePath, "-B", "build")
cmd := exec.Command("cmake", "-B", "build")
cmd.Dir = clonedDir
err = cmd.Run()
if err != nil {
return "", "", fmt.Errorf("failed to create build files: %v", err)
}
cmd = exec.Command(CmakePath, "--build", "build")
cmd = exec.Command("cmake", "--build", "build")
cmd.Dir = clonedDir
err = cmd.Run()
if err != nil {

View File

@@ -208,14 +208,14 @@ func showTroubleshootingPopup() {
dialog.NewConfirm("Build rosettax87", msg, func(confirm bool) {
if confirm {
// Check for dependencies
if err := exec.Command(patching.ClangPath, "--version").Run(); err != nil {
m := fmt.Errorf("xcode command line tools are not installed on your computer. Click the Website button in the app and read the instructions on building rosettax87 before trying again. Error: %v", err)
if _, err := exec.LookPath("clang"); err != nil {
m := fmt.Errorf("xcode command line tools are not installed on your computer. Click the Website button in the app and read the instructions on building rosettax87 before trying again")
log.Error(m.Error())
dialog.ShowError(m, currentWindow)
return
}
if err := exec.Command(patching.CmakePath, "--version").Run(); err != nil {
m := fmt.Errorf("Cmake is not installed on your computer. Click the Website button in the app and read the instructions on building rosettax87 before trying again. Error: %v", err)
if _, err := exec.LookPath("cmake"); err != nil {
m := fmt.Errorf("Cmake is not installed on your computer. Click the Website button in the app and read the instructions on building rosettax87 before trying again")
log.Error(m.Error())
dialog.ShowError(m, currentWindow)
return

View File

@@ -120,12 +120,14 @@ func updateEpochStatus() {
// Check if patched files have the correct size (matches bundled versions)
winerosettaDllCorrectSize := utils.CompareFileWithBundledResource(winerosettaDllPath, "winerosetta/winerosetta.dll")
d3d9DllCorrectSize := utils.CompareFileWithBundledResource(d3d9DllPath, "winerosetta/d3d9.dll")
rosettaX87CorrectSize := utils.CompareFileWithBundledResource(rosettaX87ExePath, "rosettax87/rosettax87")
libRuntimeRosettaX87CorrectSize := utils.CompareFileWithBundledResource(libRuntimeRosettaX87Path, "rosettax87/libRuntimeRosettax87")
if utils.PathExists(winerosettaDllPath) && utils.PathExists(d3d9DllPath) &&
utils.DirExists(rosettaX87DirPath) && utils.PathExists(rosettaX87ExePath) &&
utils.PathExists(libRuntimeRosettaX87Path) && dllsFileValid &&
winerosettaDllCorrectSize && d3d9DllCorrectSize &&
epochPatchesApplied {
rosettaX87CorrectSize && libRuntimeRosettaX87CorrectSize && epochPatchesApplied {
paths.PatchesAppliedEpoch = true
}