PCemOnMac / PCemV17macOS

Port of the PCem PC emulator for macOS. Comes with OpenGL 3.0 support built-in
GNU General Public License v3.0
68 stars 14 forks source link

Please include all the linked libraries in the build in the Frameworks directory #28

Open d3vi1 opened 2 years ago

d3vi1 commented 2 years ago

Hi,

I've written a small shell script that will correct the linked libraries in order for them to be included in PCem.app/Content/Frameworks and the application to run completely independently of homebrew dependencies. You also need to include libtiff.dylib, libjpeg.dylib, libpng.dylib, as they are referenced by WX. I've also excluded the private copies of libSystem and libc++.

If you build PCem with an older macOS SDK, it should work with older releases as well. Should time permit it, I'll do my best to make a direct XCode build of it that solves everything, but I am having some doubts.

The script can be found below.

Thanks, R.

mkdir ../Frameworks
mv libwx_baseu-3.0.dylib ../Frameworks/libwx_baseu.dylib
mv libwx_baseu_net-3.0.dylib ../Frameworks/libwx_baseu_net.dylib
mv libwx_baseu_xml-3.0.dylib ../Frameworks/libwx_baseu_xml.dylib
mv libwx_osx_cocoau_html-3.0.dylib ../Frameworks/libwx_osx_cocoau_html
mv libwx_osx_cocoau_qa-3.0.dylib ../Frameworks/libwx_osx_cocoau_qa.dylib
mv libwx_osx_cocoau_xrc-3.0.dylib ../Frameworks/libwx_osx_cocoau_xrc.dylib
mv libwx_osx_cocoau_adv-3.0.dylib ../Frameworks/libwx_osx_cocoau_adv.dylib
mv libwx_osx_cocoau_core-3.0.dylib ../Frameworks/libwx_osx_cocoau_core.dylib
mv libSDL2-2.0.0.dylib ../Frameworks/libSDL2.dylib
mv /usr/local/opt/jpeg/lib/libjpeg.9.dylib ../Frameworks/libjpeg.dylib
mv /usr/local/opt/libpng/lib/libpng16.16.dylib ../Frameworks/libpng.dylib
mv /usr/local/opt/libtiff/lib/libtiff.5.dylib ../Frameworks/libtiff.dylib

install_name_tool -change "@executable_path/libSystem.b.dylib" "/usr/lib/libSystem.B.dylib" pcem
install_name_tool -change "@executable_path/libc++.1.dylib" "/usr/lib/libc++.1.dylib" pcem
install_name_tool -change "@executable_path/libwx_osx_cocoau_xrc-3.0.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_xrc.dylib" pcem
install_name_tool -change "@executable_path/libwx_osx_cocoau_qa-3.0.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_qa.dylib" pcem
install_name_tool -change "@executable_path/libwx_osx_cocoau_adv-3.0.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_adv.dylib" pcem
install_name_tool -change "@executable_path/libwx_osx_cocoau_core-3.0.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_core.dylib" pcem
install_name_tool -change "@executable_path/libwx_osx_cocoau_html-3.0.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_html.dylib" pcem
install_name_tool -change "@executable_path/libwx_baseu_xml-3.0.dylib" "@loader_path/../Frameworks/libwx_baseu_xml.dylib" pcem
install_name_tool -change "@executable_path/libwx_baseu_net-3.0.dylib" "@loader_path/../Frameworks/libwx_baseu_net.dylib" pcem
install_name_tool -change "@executable_path/libwx_baseu-3.0.dylib" "@loader_path/../Frameworks/libwx_baseu.dylib" pcem
install_name_tool -change "@executable_path/libSDL2-2.0.0.dylib" "@loader_path/../Frameworks/libSDL2.dylib" pcem

cd ../Frameworks
install_name_tool -id libwx_osx_cocoau_html.dylib libwx_osx_cocoau_html.dylib
install_name_tool -id "libwx_osx_cocoau_html.dylib" libwx_osx_cocoau_html.dylib
install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib" "@loader_path/../Frameworks/libpng.dylib" libwx_osx_cocoau_html.dylib
install_name_tool -change "/usr/local/opt/jpeg/lib/libjpeg.9.dylib" "@loader_path/../Frameworks/libjpeg.dylib" libwx_osx_cocoau_html.dylib
install_name_tool -change "/usr/local/opt/libtiff/lib/libtiff.5.dylib" "@loader_path/../Frameworks/libtiff.dylib" libwx_osx_cocoau_html.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_osx_cocoau_core-3.0.0.5.0.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_core.dylib" libwx_osx_cocoau_html.dylib
install_name_tool -change  "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu-3.0.0.5.0.dylib" "@loader_path/../Frameworks/libwx_baseu.dylib" libwx_osx_cocoau_html.dylib

install_name_tool -id libwx_osx_cocoau_xrc.dylib libwx_osx_cocoau_xrc.dylib
install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib" "@loader_path/../Frameworks/libpng.dylib" libwx_osx_cocoau_xrc.dylib
install_name_tool -change "/usr/local/opt/jpeg/lib/libjpeg.9.dylib" "@loader_path/../Frameworks/libjpeg.dylib" libwx_osx_cocoau_xrc.dylib
install_name_tool -change "/usr/local/opt/libtiff/lib/libtiff.5.dylib" "@loader_path/../Frameworks/libtiff.dylib" libwx_osx_cocoau_xrc.dylib
install_name_tool -change "@loader_path/../libwx_osx_cocoau_html.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_html.dylib" libwx_osx_cocoau_xrc.dylib
install_name_tool -change "@loader_path/../libwx_osx_cocoau_adv.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_adv.dylib" libwx_osx_cocoau_xrc.dylib
install_name_tool -change "@loader_path/../libwx_osx_cocoau_core.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_core.dylib" libwx_osx_cocoau_xrc.dylib
install_name_tool -change "@loader_path/../libwx_baseu_xml.dylib" "@loader_path/../Frameworks/libwx_baseu_xml.dylib" libwx_osx_cocoau_xrc.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu-3.0.0.5.0.dylib"  "@loader_path/../Frameworks/libwx_baseu.dylib" libwx_osx_cocoau_xrc.dylib

install_name_tool -id libwx_osx_cocoau_qa.dylib libwx_osx_cocoau_qa.dylib
install_name_tool -change "/usr/local/opt/wxmac/lib/libwx_osx_cocoau_qa-3.0.dylib"  "@loader_path/../Frameworks/libwx_osx_cocoau_qa.dylib" libwx_osx_cocoau_qa.dylib
install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib"  "@loader_path/../Frameworks/libpng.dylib" libwx_osx_cocoau_qa.dylib
install_name_tool -change "/usr/local/opt/jpeg/lib/libjpeg.9.dylib"  "@loader_path/../Frameworks/libjpeg.dylib" libwx_osx_cocoau_qa.dylib
install_name_tool -change "/usr/local/opt/libtiff/lib/libtiff.5.dylib"  "@loader_path/../Frameworks/libtiff.dylib" libwx_osx_cocoau_qa.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_osx_cocoau_core-3.0.0.5.0.dylib"  "@loader_path/../Frameworks/libwx_osx_cocoau_core.dylib" libwx_osx_cocoau_qa.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu-3.0.0.5.0.dylib"  "@loader_path/../Frameworks/libwx_baseu.dylib" libwx_osx_cocoau_qa.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu_xml-3.0.0.5.0.dylib"  "@loader_path/../Frameworks/libwx_baseu_xml.dylib" libwx_osx_cocoau_qa.dylib

install_name_tool -id libwx_osx_cocoau_core.dylib libwx_osx_cocoau_core.dylib
install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib" "@loader_path/../Frameworks/libpng.dylib" libwx_osx_cocoau_core.dylib
install_name_tool -change "/usr/local/opt/jpeg/lib/libjpeg.9.dylib" "@loader_path/../Frameworks/libjpeg.dylib" libwx_osx_cocoau_core.dylib
install_name_tool -change "/usr/local/opt/libtiff/lib/libtiff.5.dylib" "@loader_path/../Frameworks/libtiff.dylib" libwx_osx_cocoau_core.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu-3.0.0.5.0.dylib" "@loader_path/../Frameworks/libwx_baseu.dylib" libwx_osx_cocoau_core.dylib

install_name_tool -id libwx_osx_cocoau_adv.dylib libwx_osx_cocoau_adv.dylib
install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib" "@loader_path/../Frameworks/libpng.dylib" libwx_osx_cocoau_adv.dylib
install_name_tool -change "/usr/local/opt/jpeg/lib/libjpeg.9.dylib" "@loader_path/../Frameworks/libjpeg.dylib" libwx_osx_cocoau_adv.dylib
install_name_tool -change "/usr/local/opt/libtiff/lib/libtiff.5.dylib" "@loader_path/../Frameworks/libtiff.dylib" libwx_osx_cocoau_adv.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_osx_cocoau_core-3.0.0.5.0.dylib" "@loader_path/../Frameworks/libwx_osx_cocoau_core.dylib" libwx_osx_cocoau_adv.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu-3.0.0.5.0.dylib" "@loader_path/../Frameworks/libwx_baseu.dylib" libwx_osx_cocoau_adv.dylib

install_name_tool -id libwx_baseu.dylib libwx_baseu.dylib

install_name_tool -id libwx_baseu_net.dylib libwx_baseu_net.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu-3.0.0.5.0.dylib" "@loader_path/../Frameworks/libwx_baseu.dylib" libwx_baseu_net.dylib

install_name_tool -id libwx_baseu_xml.dylib libwx_baseu_xml.dylib
install_name_tool -change "/usr/local/Cellar/wxmac/3.0.5.1_1/lib/libwx_baseu-3.0.0.5.0.dylib" "@loader_path/../Frameworks/libwx_baseu.dylib" libwx_baseu_xml.dylib

install_name_tool -change "/usr/local/opt/jpeg/lib/libjpeg.9.dylib" "@loader_path/../Frameworks/libjpeg.dylib" libtiff.dylib
install_name_tool -id libSDL2.dylib libSDL2.dylib
install_name_tool -id libtiff.dylib libtiff.dylib
install_name_tool -id libpng.dylib libpng.dylib
install_name_tool -id libjpeg.dylib libjpeg.dylib
d3vi1 commented 2 years ago

Since we're not overriding the system libraries anymore, this should also fix bugs #8, #22 and maybe also #24.

almeath commented 2 years ago

Thanks, I was looking into this as well. I have created by own application bundle (based off my DOSBox wrapper bundle) called "PCem" and then used the tool Dylib Bundler, to achieve the same result as follows:

dylibbundler -od -b -x ./PCem.app/contents/MacOS/pcem -d ./PCem.app/contents/resources/lib -p @executable_path/../Resources/lib

This results in a lib folder inside the application bundle containing the following:

libjpeg.9.dylib libpng16.16.dylib libSDL2-2.0.0.dylib libtiff.5.dylib libwx_baseu_net-3.1.5.0.0.dylib libwx_baseu_xml-3.1.5.0.0.dylib libwx_baseu-3.1.5.0.0.dylib libwx_osx_cocoau_core-3.1.5.0.0.dylib libwx_osx_cocoau_html-3.1.5.0.0.dylib libwx_osx_cocoau_qa-3.1.5.0.0.dylib libwx_osx_cocoau_xrc-3.1.5.0.0.dylib

When I run the app, it automatically creates the PCem folder in Library/Application support. I then add the ROM files and PCem loads up normally. This at least works in my dev system which is Mojave 10.14.6.

I used Activity Monitor to confirm that when the application is running, the dylibs are being accessed within the app bundle and are not being drawn from the macOS system directly.

I need to see if I can get this to work in Monteray, and then see what happens when I move the app bundles between systems.

almeath commented 2 years ago

Can you please test this application bundle:

https://www.dropbox.com/s/y372f4jqj327y65/PCem17.zip?dl=0

I built it in Mojave 10.14.6 and it appears to work properly on a separate system running Monteray 12.1.

By working properly, I mean everything appears to function normally. Of course, the Segmentation fault upon quitting the app is still present, as it has been for the duration of v17.

Can you also test this one:

https://www.dropbox.com/s/mclyjyack9882i2/PCem_old.zip?dl=0

This one needs the roms put inside the application bundle, but it was built against an earlier SDK and therefore I wanted to know if it runs properly (i.e. at full speed with newer BIOS / Pentium systems) on Big Sur or Monterey. It appears to do so on my systems.

elseways commented 2 years ago

I'm running Monterey here. The first one seems to be working fine (and thank you very much for getting it to build; I couldn't get it to). It does segfault on exit, though, and trying to close a running machine makes its display window appear to freeze for a while. Your second one segfaults when I try to save a new machine's settings, so I can't actually test to see if it runs properly.

almeath commented 2 years ago

That's good to hear. The second one was unlikely to work anyway because I had built it in Mojave. If the first one works, perhaps you can let me know if any speed or compatibility issues arise when emulating certain BIOS/chips. I know there are issues with Apple Silicon machines, but it should be working normally on Intel Macs.

kyr0 commented 2 years ago

@almeath Hi, also.. "19th December 2021 Michael Manley is taking over as project maintainer, and will be responsible for development and future direction of the project. The forums have also been reopened." - https://pcem-emulator.co.uk/

I heard that somebody might have already merged stuff from our branches to mainline. Maybe things can be handled without forking and branching now.. Maybe it's a good time to talk to Michael

Have a nice new year :)

BrandonChang89 commented 2 years ago

Can you please test this application bundle:

https://www.dropbox.com/s/y372f4jqj327y65/PCem17.zip?dl=0

I built it in Mojave 10.14.6 and it appears to work properly on a separate system running Monteray 12.1.

By working properly, I mean everything appears to function normally. Of course, the Segmentation fault upon quitting the app is still present, as it has been for the duration of v17.

Can you also test this one:

https://www.dropbox.com/s/mclyjyack9882i2/PCem_old.zip?dl=0

This one needs the roms put inside the application bundle, but it was built against an earlier SDK and therefore I wanted to know if it runs properly (i.e. at full speed with newer BIOS / Pentium systems) on Big Sur or Monterey. It appears to do so on my systems.

I was actually only able to get the second one run properly on my M1 MacBook Pro with Monterey 12.1. The first one all I got was a narrow black window after I started the machine. As for the second one I had to start pcem by going to the MacOS folder and run ./pcem, but it ran fine.