vpinball / pinmame

PinMAME - Pinball Multiple Arcade Machine Emulator
https://www.vpforums.org
Other
184 stars 50 forks source link

Shared library questions #118

Open droscoe opened 1 year ago

droscoe commented 1 year ago

In the installation for VPinMAME there are several shared libraries:

My questions:

  1. What is the relationship between VPinMAME.dll, VPinMAME64.dll and libpinmame.dll?
  2. Does PinMAME or PinMAME32 use these libraries?
  3. Does anything else use VPinMAME.dll or VPinMAME64.dll?
  4. What is libpinmame used for?

The reason I ask is because I see a lot of apparent duplication in the code that is compiled for these libraries, suggesting common dependencies that are being handled via compilation rather than linking.

  1. Is there a reason for this?
  2. Would anyone be opposed to me trying to clean it up?

If the common dependencies can be moved to static libs and linked by the dependent projects, it will have several benefits:

There are more, but I think you get the idea. This is not a trivial change and it will have the following impacts:

The above can be tested and validated prior to incorporation into Master. A feature branch off master can be created with a build process created to create and test the new approach. Once it's good, it can be merged up to the master branch

I am willing to do the project refactoring, and create the necessary CMake files to facilitate this. I will need help from the maintainers to set up the feature branch and automated build, as I do not have that access. We will need testers for the non-Windows projects to ensure that we don't adversely impact them.

jsm174 commented 1 year ago

What is libpinmame used for?

libpinmame is a standalone library used to provide PinMAME emulation to other applications.

It is primarily used by:

I'm sure there are probably others using it that I don't know about.

Anyway, these projects run on everything - Win, MacOS, iOS, tvOS, Android, and Linux.

I realize many of the cmake files could be combined into one master file, but my goal at the time was that a person could easily compare them to see what was different between platforms.

droscoe commented 1 year ago

What is libpinmame used for?

libpinmame is a standalone library used to provide PinMAME emulation to other applications.

It is primarily used by:

I'm sure there are probably others using it that I don't know about.

Anyway, these projects run on everything - Win, MacOS, iOS, tvOS, Android, and Linux.

I realize many of the cmake files could be combined into one master file, but my goal at the time was that a person could easily compare them to see what was different between platforms.

Thanks for that information. I’m not very interested in combining cmake files either. I’m more interested in separating dependencies so they don’t have to be compiled into each project. I’m trying to get a feel for the ecosystem to better understand the scope and concerns that need to be considered.

droscoe commented 1 year ago

@jsm174 Just took a look at the projects you linked. WOW.! I had no idea some of these existed. I have one comment regarding the CMAKE scripts. I see a lot of stuff like this:

add_custom_command(TARGET vpinball POST_BUILD
   COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_SOURCE_DIR}/scripts" "$<TARGET_FILE_DIR:vpinball>/scripts"
   COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_SOURCE_DIR}/tables" "$<TARGET_FILE_DIR:vpinball>/tables"
   COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_SOURCE_DIR}/txt" "$<TARGET_FILE_DIR:vpinball>/docs"

There is support for an install target in CMake which could simplify a lot of this. You may already know this, and had good reason to do it as an explicit custom target.

BTW.. I am writing this stuff here because I don't know any better place/method to discuss. If there is a better option, like a Discord, etc. Please let me know. I do not want to annoy the devs if this is not the best place for this, Please shoot me a message via email: twistgrav@yahoo.com, or discord @MrGrynch#1235. Cheers!

droscoe commented 1 year ago

After speaking with @jsm174 , to do this right, the non-Windows build scripts would need to be modified to reflect the resulting project layout. This could be made simpler by using CMake. If there are any volunteers, please DM me on Discord (@MrGrynch#1235). I really think this is a worthwhile change, but need to be cautious.

droscoe commented 1 year ago

I'm going to close this for now, to reduce clutter in the issue list. I may re-create a formal issue at a later time.

toxieainc commented 1 year ago

No need to close things. We only have ~20 issues.

droscoe commented 1 year ago

No need to close things. We only have ~20 issues.

Ok, that's fine. I do this for a living (as perhaps you do?), so it's habit to groom backlog issues. I apologize if I presume too much.

toxieainc commented 1 year ago

All good! Its just that i don't think that 20 is already much. I'm used to at least 3digit counts. ;) (only the P0s/Showstoppers ;))

This way, potential new devs could hopefully also easier find something interesting for them, too.

Smoker1 commented 1 year ago

How can PinMAME - Visual Pinball be run on Android?

jsm174 commented 1 year ago

How can PinMAME - Visual Pinball be run on Android?

I'm currently working on putting a video together on how to use it.

You can grab the latest android version from Visual Pinball repo actions.

https://github.com/vpinball/vpinball/actions/runs/5106936746