Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
d3vi1 opened this issue Dec 22, 2021 · 7 comments

Comments

@d3vi1
Copy link

d3vi1 commented Dec 22, 2021

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
Copy link
Author

d3vi1 commented Dec 22, 2021

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

@almeath
Copy link
Member

almeath commented Dec 22, 2021

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
Copy link
Member

almeath commented Dec 22, 2021

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
Copy link

elseways commented Dec 31, 2021

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
Copy link
Member

almeath commented Jan 1, 2022

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
Copy link
Member

kyr0 commented Jan 1, 2022

@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
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants