Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
718eace492 | |||
ca77c609cd | |||
502ca7a4f2 | |||
7397fae6f4 | |||
a07958563a | |||
c80204579f | |||
11909e8502 |
@@ -2,5 +2,5 @@
|
|||||||
Icon = "Icon.png"
|
Icon = "Icon.png"
|
||||||
Name = "EpochSilicon"
|
Name = "EpochSilicon"
|
||||||
ID = "com.burkey.epochsilicon"
|
ID = "com.burkey.epochsilicon"
|
||||||
Version = "1.0.3"
|
Version = "1.0.9"
|
||||||
Build = 29
|
Build = 31
|
||||||
|
6
Makefile
6
Makefile
@@ -19,11 +19,7 @@ build: build-dev
|
|||||||
build-release:
|
build-release:
|
||||||
@rm -rf ./EpochSilicon.app
|
@rm -rf ./EpochSilicon.app
|
||||||
@echo "Building optimized release version..."
|
@echo "Building optimized release version..."
|
||||||
CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build \
|
CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -trimpath -tags=release -o epochsilicon .
|
||||||
-ldflags="-s -w -X main.appVersion=$$(grep Version FyneApp.toml | cut -d'"' -f2)" \
|
|
||||||
-trimpath \
|
|
||||||
-tags=release \
|
|
||||||
-o epochsilicon .
|
|
||||||
@echo "Packaging with fyne..."
|
@echo "Packaging with fyne..."
|
||||||
GOOS=darwin GOARCH=arm64 fyne package --release --executable epochsilicon
|
GOOS=darwin GOARCH=arm64 fyne package --release --executable epochsilicon
|
||||||
@echo "Copying additional resources to app bundle..."
|
@echo "Copying additional resources to app bundle..."
|
||||||
|
10
README.md
10
README.md
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
A user-friendly launcher for Project Epoch on Apple Silicon Macs, with one-click patching of winerosetta, rosettax87 and d9vk.
|
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
|
## Features
|
||||||
|
|
||||||
* **Apple Silicon Compatibility:** Runs 32-bit DirectX9 World of Warcraft (v3.3.5a) on M1/M2/M3/M4 Macs without "illegal instruction" errors.
|
* **Apple Silicon Compatibility:** Runs 32-bit DirectX9 World of Warcraft (v3.3.5a) on M1/M2/M3/M4 Macs without "illegal instruction" errors.
|
||||||
@@ -75,7 +77,7 @@ This appears to be a problem with using a built-in version of `rosettax87`. In o
|
|||||||
|
|
||||||
1. Install Xcode command line tools by opening a terminal and typing `xcode-select --install` and following the prompts
|
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
|
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`
|
3. Install Cmake by opening a terminal and enter `brew install cmake`. Cmake must be installed through Homebrew
|
||||||
3. Run EpochSilicon and click the `Troubleshooting` button
|
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
|
4. Find the line that says `Build Rosettax87 locally` and click the `Build` button, following the prompts
|
||||||
|
|
||||||
@@ -122,9 +124,7 @@ TBD
|
|||||||
|
|
||||||
## Bundled Binaries
|
## Bundled Binaries
|
||||||
|
|
||||||
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:
|
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
|
||||||
[https://github.com/Lifeisawful/winerosetta](https://github.com/Lifeisawful/winerosetta)
|
|
||||||
[https://github.com/Lifeisawful/rosettax87](https://github.com/Lifeisawful/rosettax87)
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
@@ -138,5 +138,5 @@ All credit for the core translation layer `winerosetta` and `rosettax87` goes to
|
|||||||
|
|
||||||
[https://github.com/Lifeisawful/rosettax87](https://github.com/Lifeisawful/rosettax87)
|
[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.
|
EpochSilicon is a fork of [https://turtlesilicon.github.io/](TurtleSilicon), credit for the base of the application goes to [**@tairasu**](https://github.com/tairasu)
|
||||||
|
|
||||||
|
2
main.go
2
main.go
@@ -11,7 +11,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const appVersion = "1.0.3"
|
const appVersion = "1.0.9"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.SetupLogging()
|
log.SetupLogging()
|
||||||
|
@@ -21,6 +21,11 @@ import (
|
|||||||
"fyne.io/fyne/v2/dialog"
|
"fyne.io/fyne/v2/dialog"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
CmakePath = "/opt/homebrew/bin/cmake"
|
||||||
|
ClangPath = "/usr/bin/clang"
|
||||||
|
)
|
||||||
|
|
||||||
func PatchEpoch(myWindow fyne.Window, updateAllStatuses func()) {
|
func PatchEpoch(myWindow fyne.Window, updateAllStatuses func()) {
|
||||||
log.Debug("Patch Epoch clicked")
|
log.Debug("Patch Epoch clicked")
|
||||||
if paths.EpochPath == "" {
|
if paths.EpochPath == "" {
|
||||||
@@ -486,14 +491,14 @@ func BuildRosetta() (string, string, error) {
|
|||||||
return "", "", fmt.Errorf("failed to clone repository: %v", err)
|
return "", "", fmt.Errorf("failed to clone repository: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command("cmake", "-B", "build")
|
cmd := exec.Command(CmakePath, "-B", "build")
|
||||||
cmd.Dir = clonedDir
|
cmd.Dir = clonedDir
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", fmt.Errorf("failed to create build files: %v", err)
|
return "", "", fmt.Errorf("failed to create build files: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd = exec.Command("cmake", "--build", "build")
|
cmd = exec.Command(CmakePath, "--build", "build")
|
||||||
cmd.Dir = clonedDir
|
cmd.Dir = clonedDir
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -208,14 +208,14 @@ func showTroubleshootingPopup() {
|
|||||||
dialog.NewConfirm("Build rosettax87", msg, func(confirm bool) {
|
dialog.NewConfirm("Build rosettax87", msg, func(confirm bool) {
|
||||||
if confirm {
|
if confirm {
|
||||||
// Check for dependencies
|
// Check for dependencies
|
||||||
if _, err := exec.LookPath("clang"); err != nil {
|
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")
|
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)
|
||||||
log.Error(m.Error())
|
log.Error(m.Error())
|
||||||
dialog.ShowError(m, currentWindow)
|
dialog.ShowError(m, currentWindow)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, err := exec.LookPath("cmake"); err != nil {
|
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")
|
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)
|
||||||
log.Error(m.Error())
|
log.Error(m.Error())
|
||||||
dialog.ShowError(m, currentWindow)
|
dialog.ShowError(m, currentWindow)
|
||||||
return
|
return
|
||||||
|
@@ -120,14 +120,12 @@ func updateEpochStatus() {
|
|||||||
// Check if patched files have the correct size (matches bundled versions)
|
// Check if patched files have the correct size (matches bundled versions)
|
||||||
winerosettaDllCorrectSize := utils.CompareFileWithBundledResource(winerosettaDllPath, "winerosetta/winerosetta.dll")
|
winerosettaDllCorrectSize := utils.CompareFileWithBundledResource(winerosettaDllPath, "winerosetta/winerosetta.dll")
|
||||||
d3d9DllCorrectSize := utils.CompareFileWithBundledResource(d3d9DllPath, "winerosetta/d3d9.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) &&
|
if utils.PathExists(winerosettaDllPath) && utils.PathExists(d3d9DllPath) &&
|
||||||
utils.DirExists(rosettaX87DirPath) && utils.PathExists(rosettaX87ExePath) &&
|
utils.DirExists(rosettaX87DirPath) && utils.PathExists(rosettaX87ExePath) &&
|
||||||
utils.PathExists(libRuntimeRosettaX87Path) && dllsFileValid &&
|
utils.PathExists(libRuntimeRosettaX87Path) && dllsFileValid &&
|
||||||
winerosettaDllCorrectSize && d3d9DllCorrectSize &&
|
winerosettaDllCorrectSize && d3d9DllCorrectSize &&
|
||||||
rosettaX87CorrectSize && libRuntimeRosettaX87CorrectSize && epochPatchesApplied {
|
epochPatchesApplied {
|
||||||
paths.PatchesAppliedEpoch = true
|
paths.PatchesAppliedEpoch = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user