[skip ci] More Meson Stuff

This commit is contained in:
Michael J. Manley
2022-02-18 18:24:03 -08:00
parent e2919dedea
commit f220efc3a4
10 changed files with 133 additions and 121 deletions

View File

@@ -16,53 +16,50 @@ You will need the following libraries and buildtools (and their dependencies):
- SDL2 - SDL2
- wxWidgets 3.x - wxWidgets 3.x
- OpenAL - OpenAL
- CMake - Meson
- Ninja (Recommended, but you can use a Makefile generator if you prefer) - Ninja
Open a terminal window, navigate to the PCem directory then enter: Open a terminal window, navigate to the PCem directory then enter:
### Linux/BSD
``` ```
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release . meson --buildtype release build
cd build
ninja ninja
meson install --destdir=install
``` ```
### Windows (MSYS2) then `./install/bin/pcem` to run.
The Linux/BSD versions store BIOS ROM images, configuration files, and other data in `~/.pcem`.
Meson configure options are :
``` ```
cmake -G "Ninja" -DMSYS=TRUE -DCMAKE_BUILD_TYPE=Release . --buildtype release : Generate release build. Recommended for regular use.
ninja --buildtype debug : Compile with debugging enabled.
-Duse-networking=true : Build with networking support.
-Duse-pcap-networking=true : Build with pcap networking support. (On by default needs USE_NETWORKING to compile) Requires libpcap
-Duse-alsa=true : Build with support for MIDI output through ALSA. Requires libasound.
-Duse-plugin-engine=true : Build with plugin support. Builds libpcem-plugin-api and links PCem with it.
``` ```
then `./src/pcem` to run. If you are using --buildtype debug, there are some more debug options you can enable if needed
The Linux/BSD versions store BIOS ROM images, configuration files, and other data in `~/.pcem`
configure options are :
``` ```
-DCMAKE_BUILD_TYPE=Release : Generate release build. Recommended for regular use. -Dslirp-debug=true : Build PCem with SLIRP_DEBUG debug output
-DCMAKE_BUILD_TYPE=Debug : Compile with debugging enabled. -Drecompiler-debug=true : Build PCem with RECOMPILER_DEBUG debug output
-DUSE_NETWORKING=ON : Build with networking support. -Dne2000-debug=true : Build PCem with NE2000_DEBUG debug output
-DUSE_PCAP_NETWORKING=ON : Build with pcap networking support. (On by default needs USE_NETWORKING to compile) Requires libpcap -Demu8k-debug-registers=true : Build PCem with EMU8K_DEBUG_REGISTERS debug output
-DUSE_ALSA=ON : Build with support for MIDI output through ALSA. Requires libasound. -Dsb-dsp-record-debug=true : Build PCem with SB_DSP_RECORD_DEBUG debug output
-DPLUGIN_ENGINE=ON : Build with plugin support. Builds libpcem-plugin-api and links PCem with it. -Dmach64-debug=true : Build PCem with MACH64_DEBUG debug output
-Dplugin-debug=true : Build PCem with PLUGIN_DEBUG debug output
-Dextra-debug=true : Build PCem with DEBUG_EXTRA debug output
-Dprinter-debug=true : Build PCem with PRINTER_DEBUG debug output
``` ```
If you are using -DCMAKE_BUILD_TYPE=Debug, there are some more debug options you can enable if needed They are some extra modules you can add if you build with `-Dallow-experimental-code=true`. These modules are untested.
```
-DPCEM_SLIRP_DEBUG=ON : Build PCem with SLIRP_DEBUG debug output
-DPCEM_RECOMPILER_DEBUG=ON : Build PCem with RECOMPILER_DEBUG debug output
-DPCEM_NE2000_DEBUG=ON : Build PCem with NE2000_DEBUG debug output
-DPCEM_EMU8K_DEBUG_REGISTERS=ON : Build PCem with EMU8K_DEBUG_REGISTERS debug output
-DPCEM_SB_DSP_RECORD_DEBUG=ON : Build PCem with SB_DSP_RECORD_DEBUG debug output
-DPCEM_MACH64_DEBUG=ON : Build PCem with MACH64_DEBUG debug output
-DPCEM_DEBUG_EXTRA=ON : Build PCem with DEBUG_EXTRA debug output
```
They are some extra modules you can add if you build with `-DUSE_EXPERIMENTAL=ON`. These modules are untested.
incomplete, and may or may not be in a future build of PCem. We do not provide builds with these enabled as incomplete, and may or may not be in a future build of PCem. We do not provide builds with these enabled as
well. well.
``` ```
-DUSE_EXPERIMENTAL_PGC=ON : Build PCem with Professional Graphics Controller support. -Duse-experimental-pdc=true : Build PCem with Professional Graphics Controller support.
-DUSE_EXPERIMENTAL_PRINTER=ON : Build PCem with Printer support. Requires freetype. -Duse-experimental-printer=true : Build PCem with Printer support. Requires freetype.
``` ```
The menu is a pop-up menu in the Linux/BSD port. Right-click on the main window when mouse is not The menu is a pop-up menu in the Linux/BSD port. Right-click on the main window when mouse is not
captured. captured.

View File

@@ -1,51 +1,48 @@
#install(TARGETS pcem RUNTIME DESTINATION bin) install_data('roms.txt', install_dir: get_option('datadir') / 'roms/430vx')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/acer386')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ami286')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ami386')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ami386dx')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ami486')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/amixt')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/cbm_pc10')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/cmdpc30')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/dells200')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/deskpro386')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/dtk')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/dtk386')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/endeavor')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/europc')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/genxt')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/hot-433')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/huyndaixt')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/huyndaixte')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ibmat')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ibmpc')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ibmpcjr')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ibmps1es')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ibmxt')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/jukopc')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/ltxt')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/lxt3')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/mach64gx')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/megapc')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/mr386dx')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/olivetti_m24')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/oti067')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/pc1512')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/pc1640')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/pc200')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/pc2086')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/pc3086')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/px386')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/pxxt')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/revenge')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/sis496')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/tandy')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/tandy1000hx')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/tandy1000sl2')
install_data('roms.txt', install_dir: get_option('datadir') / 'roms/win486')
install_data('configs.txt', install_dir: get_option('datadir') / 'configs')
install_man('pcem.man.1')
#install(DIRECTORY ${CMAKE_SOURCE_DIR}/nvr/ DESTINATION share/pcem/nvr/default)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/430vx)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/acer386)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ami286)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ami386)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ami386dx)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ami486)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/amixt)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/cbm_pc10)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/cmdpc30)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/dells200)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/deskpro386)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/dtk)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/dtk386)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/endeavor)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/europc)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/genxt)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/hot-433)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/huyndaixt)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/huyndaixte)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ibmat)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ibmpc)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ibmpcjr)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ibmps1es)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ibmxt)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/jukopc)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/ltxt)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/lxt3)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/mach64gx)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/megapc)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/mr386dx)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/olivetti_m24)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/oti067)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/pc1512)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/pc1640)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/pc200)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/pc2086)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/pc3086)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/px386)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/pxxt)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/revenge)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/sis496)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/tandy)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/tandy1000hx)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/tandy1000sl2)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION share/pcem/roms/win486)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/configs.txt DESTINATION share/pcem/configs)
#install(FILES ${CMAKE_SOURCE_DIR}/docs/pcem.man DESTINATION share/man/man1)
#install(DIRECTORY ${CMAKE_SOURCE_DIR}/includes/public/ DESTINATION include FILES_MATCHING PATTERN *.h)

View File

@@ -46,4 +46,6 @@ pcem_include_dirs = include_directories(
'private/video', 'private/video',
'private/wx-ui', 'private/wx-ui',
'public' 'public'
) )
install_subdir('public', install_dir: get_option('includedir') / 'pcem', strip_directory : true)

View File

@@ -5,13 +5,14 @@ add_project_arguments('-DPCEM_VERSION_STRING="' + meson.project_version() + '"',
pcem_private_api = [] pcem_private_api = []
pcem_public_api = [] pcem_public_api = []
pcem_src = [] pcem_src = []
pcem_project_libraries = []
subdir('includes') subdir('includes')
compiler = meson.get_compiler('c') compiler = meson.get_compiler('c')
sdl2 = dependency('sdl2') sdl2 = dependency('sdl2')
openal = dependency('openal') openal = dependency('openal')
opengl = dependency('opengl') opengl = dependency('gl')
wxwidgets = dependency('wxwidgets') wxwidgets = dependency('wxwidgets')
pcem_dependencies = [sdl2, openal, opengl, wxwidgets] pcem_dependencies = [sdl2, openal, opengl, wxwidgets]
@@ -23,4 +24,6 @@ endif
add_project_arguments('-fcommon', language: ['c', 'cpp']) add_project_arguments('-fcommon', language: ['c', 'cpp'])
subdir('docs') subdir('docs')
subdir('src') subdir('src')
install_subdir('nvr', install_dir: get_option('datadir') / 'nvr/default', strip_directory : true)

View File

@@ -5,3 +5,13 @@ option('use-alsa', type: 'boolean', value: false, description: 'Build PCem with
option('allow-experimental-code', type: 'boolean', value: false, description: 'Build PCem with experimental code.') option('allow-experimental-code', type: 'boolean', value: false, description: 'Build PCem with experimental code.')
option('use-experimental-pdc', type: 'boolean', value: false, description: 'Build Professional Graphics Controller Support. Need to allow experimental code for this option to work.') option('use-experimental-pdc', type: 'boolean', value: false, description: 'Build Professional Graphics Controller Support. Need to allow experimental code for this option to work.')
option('use-experimental-printer', type: 'boolean', value: false, description: 'Build Printer Support. Need to allow experimental code for this option to work.') option('use-experimental-printer', type: 'boolean', value: false, description: 'Build Printer Support. Need to allow experimental code for this option to work.')
option('slirp-debug', type: 'boolean', value: false, description: 'Build PCem with SLIRP_DEBUG debug output. Needs to be a debug build to do anything.')
option('recompiler-debug', type: 'boolean', value: false, description: 'Build PCem with RECOMPILER_DEBUG debug output. Needs to be a debug build to do anything.')
option('ne2000-debug', type: 'boolean', value: false, description: 'Build PCem with NE2000_DEBUG debug output. Needs to be a debug build to do anything.')
option('emu8k-debug-registers', type: 'boolean', value: false, description: 'Build PCem with EMU8K_DEBUG_REGISTERS debug output. Needs to be a debug build to do anything.')
option('sb-dsp-record-debug', type: 'boolean', value: false, description: 'Build PCem with SB_DSP_RECORD_DEBUG debug output. Needs to be a debug build to do anything.')
option('mach64-debug', type: 'boolean', value: false, description: 'Build PCem with MACH64_DEBUG debug output. Needs to be a debug build to do anything.')
option('plugin-debug', type: 'boolean', value: false, description: 'Build PCem with PLUGIN_DEBUG debug output. Needs to be a debug build to do anything.')
option('extra-debug', type: 'boolean', value: false, description: 'Build PCem with DEBUG_EXTRA debug output. Needs to be a debug build to do anything.')
option('printer-debug', type: 'boolean', value: false, description: 'Build PCem with PRINTER_DEBUG debug output. Needs to be a debug build to do anything.')

View File

@@ -1,33 +1,31 @@
#if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") if get_option('buildtype').startswith('debug')
# set(PCEM_DEFINES ${PCEM_DEFINES} DEBUG) if get_option('slirp-debug')
# add_project_arguments('-DSLIRP_DEBUG', language: ['c', 'cpp'])
# if(PCEM_SLIRP_DEBUG) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} SLIRP_DEBUG) if get_option('recompiler-debug')
# endif() add_project_arguments('-DRECOMPILER_DEBUG', language: ['c', 'cpp'])
# if(PCEM_RECOMPILER_DEBUG) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} RECOMPILER_DEBUG) if get_option('ne2000-debug')
# endif() add_project_arguments('-DNE2000_DEBUG', language: ['c', 'cpp'])
# if(PCEM_NE2000_DEBUG) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} NE2000_DEBUG) if get_option('emu8k-debug-registers')
# endif() add_project_arguments('-DEMU8K_DEBUG_REGISTERS', language: ['c', 'cpp'])
# if(PCEM_EMU8K_DEBUG_REGISTERS) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} EMU8K_DEBUG_REGISTERS) if get_option('sb-dsp-record-debug')
# endif() add_project_arguments('-DSB_DSP_RECORD_DEBUG', language: ['c', 'cpp'])
# if(PCEM_SB_DSP_RECORD_DEBUG) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} SB_DSP_RECORD_DEBUG) if get_option('mach64-debug')
# endif() add_project_arguments('-DMACH64_DEBUG', language: ['c', 'cpp'])
# if(PCEM_MACH64_DEBUG) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} MACH64_DEBUG) if get_option('plugin-debug')
# endif() add_project_arguments('-DPLUGIN_DEBUG', language: ['c', 'cpp'])
# if(PCEM_NE2000_DEBUG) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} NE2000_DEBUG) if get_option('extra-debug')
# endif() add_project_arguments('-DDEBUG_EXTRA', language: ['c', 'cpp'])
# if(PCEM_DEBUG_EXTRA) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} DEBUG_EXTRA) if get_option('printer-debug')
# endif() add_project_arguments('-DPRINTER_DEBUG', language: ['c', 'cpp'])
# if(PCEM_PRINTER_DEBUG) endif
# set(PCEM_DEFINES ${PCEM_DEFINES} PRINTER_DEBUG) else
# endif() add_project_arguments('-DRELEASE_BUILD', language: ['c', 'cpp'])
#else() endif
# set(PCEM_DEFINES ${PCEM_DEFINES} RELEASE_BUILD)
#endif()

View File

@@ -42,4 +42,4 @@ pcem_src += files(
subdir('plugin-api') subdir('plugin-api')
executable('pcem', pcem_src, dependencies: pcem_dependencies, include_directories: pcem_include_dirs) executable('pcem', pcem_src, dependencies: pcem_dependencies, link_with: pcem_project_libraries, include_directories: pcem_include_dirs, install: true, win_subsystem: 'windows')

View File

@@ -26,7 +26,8 @@ pcem_pluginapi_src = files(
) )
if get_option('use-plugin-engine') if get_option('use-plugin-engine')
# Create Library Here and link to main EXE pcem_plugin_api = shared_library('pcem', sources: pcem_pluginapi_src, dependencies: pcem_dependencies, include_directories: pcem_include_dirs, install: true)
pcem_project_libraries += pcem_plugin_api
else else
pcem_src += pcem_pluginapi_src pcem_src += pcem_pluginapi_src
endif endif

View File

@@ -40,7 +40,11 @@ void load_plugins()
tinydir_file file; tinydir_file file;
tinydir_readfile(&dir, &file); tinydir_readfile(&dir, &file);
if (!strcmp(file.extension, "pcem")) #if defined(linux)
if (!strcmp(file.extension, "so"))
#elif defined(WIN32)
if (!strcmp(file.extension, "dll"))
#endif
{ {
pclog("plugin loading: %s\n", file.name); pclog("plugin loading: %s\n", file.name);
void (* initialize_loaded_plugin)(); void (* initialize_loaded_plugin)();