Refactor cmakelists (#1467)

* refactor: break out CMakeLists.txt

Make things more manageable by breaking out sections of the monolithic CMakeLists.txt into separate files
This commit is contained in:
Dimitris Panokostas 2024-10-10 10:37:14 +02:00 committed by GitHub
parent 940c046ad2
commit 0c5d05255e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
27 changed files with 719 additions and 677 deletions

View File

@ -1,9 +1,19 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
message(FATAL_ERROR "Prevented in-tree build. Please create a build directory outside of the amiberry source code and run \"cmake -S ${CMAKE_SOURCE_DIR} -B .\" from there")
endif ()
# Use libgpiod to control GPIO LEDs?
option(USE_GPIOD "Use GPIOD" OFF)
# Use DBUS to control the emulator?
option(USE_DBUS "Use DBus" OFF)
# Use OpenGL for rendering?
option(USE_OPENGL "Use OpenGL" OFF)
# Enable Link Time Optimization?
option(WITH_LTO "Enable Link Time Optimization" OFF)
## Determine proper semantic version
set(VERSION_MAJOR "7")
set(VERSION_MINOR "0")
@ -23,681 +33,13 @@ project(${PROJECT_NAME}
DESCRIPTION "Optimized Amiga emulator for various platforms"
HOMEPAGE_URL "https://amiberry.com"
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe")
set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-Og -g -funwind-tables -DDEBUG ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
if (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-undefined -Wl,-z,combreloc")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -Wl,--gc-sections -Wl,--strip-all")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} -g")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -Wl,--gc-sections -Wl,--strip-all")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} -g")
else ()
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-Wl,-dead_strip")
endif()
# Use libgpiod to control GPIO LEDs?
option(USE_GPIOD "Use GPIOD" OFF)
# Use DBUS to control the emulator?
option(USE_DBUS "Use DBus" OFF)
# Use OpenGL for rendering?
option(USE_OPENGL "Use OpenGL" OFF)
# Enable Link Time Optimization?
option(WITH_LTO "Enable Link Time Optimization" OFF)
# Set build type to "Release" if user did not specify any build type yet
# Other possible values: Debug, Release, RelWithDebInfo and MinSizeRel
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif (NOT CMAKE_BUILD_TYPE)
if (WITH_LTO)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
endif ()
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
include_directories("/opt/homebrew/include")
set(CMAKE_EXE_LINKER_FLAGS "-L/opt/homebrew/lib -framework IOKit -framework Foundation -liconv")
else ()
include_directories("/usr/local/include")
set(CMAKE_EXE_LINKER_FLAGS "-L/usr/local/lib -framework IOKit -framework Foundation -liconv")
endif ()
endif ()
include(FindHelper)
# Define the list of source files
set(SOURCE_FILES
src/a2065.cpp
src/a2091.cpp
src/akiko.cpp
src/amax.cpp
src/ar.cpp
src/arcadia.cpp
src/audio.cpp
src/autoconf.cpp
src/blitfunc.cpp
src/blittable.cpp
src/blitter.cpp
src/blkdev.cpp
src/blkdev_cdimage.cpp
src/bsdsocket.cpp
src/calc.cpp
src/catweasel.cpp
src/cd32_fmv.cpp
src/cd32_fmv_genlock.cpp
src/cdrom.cpp
src/cdtv.cpp
src/cdtvcr.cpp
src/cfgfile.cpp
src/cia.cpp
src/consolehook.cpp
src/cpuboard.cpp
src/crc32.cpp
src/custom.cpp
src/debug.cpp
src/debugmem.cpp
src/def_icons.cpp
src/devices.cpp
src/disasm.cpp
src/disk.cpp
src/diskutil.cpp
src/dlopen.cpp
src/dongle.cpp
src/draco.cpp
src/drawing.cpp
src/driveclick.cpp
src/enforcer.cpp
src/ethernet.cpp
src/events.cpp
src/expansion.cpp
src/fdi2raw.cpp
src/filesys.cpp
src/flashrom.cpp
src/fpp.cpp
src/fpp_native.cpp
src/framebufferboards.cpp
src/fsdb.cpp
src/fsusage.cpp
src/gayle.cpp
src/gfxboard.cpp
src/gfxlib.cpp
src/gfxutil.cpp
src/hardfile.cpp
src/hrtmon.rom.cpp
src/ide.cpp
src/idecontrollers.cpp
src/identify.cpp
src/ini.cpp
src/inputdevice.cpp
src/inputrecord.cpp
src/isofs.cpp
src/keybuf.cpp
src/luascript.cpp
src/main.cpp
src/memory.cpp
src/midiemu.cpp
src/native2amiga.cpp
src/ncr9x_scsi.cpp
src/ncr_scsi.cpp
src/parser.cpp
src/pci.cpp
src/rommgr.cpp
src/rtc.cpp
src/sampler.cpp
src/sana2.cpp
src/savestate.cpp
src/scp.cpp
src/scsi.cpp
src/scsiemul.cpp
src/scsitape.cpp
src/slirp_uae.cpp
src/sndboard.cpp
src/specialmonitors.cpp
src/statusline.cpp
src/tabletlibrary.cpp
src/test_card.cpp
src/tinyxml2.cpp
src/traps.cpp
src/uaeexe.cpp
src/uaelib.cpp
src/uaenative.cpp
src/uaeresource.cpp
src/uaeserial.cpp
src/vm.cpp
src/x86.cpp
src/zfile.cpp
src/zfile_archive.cpp
src/archivers/7z/7zAlloc.c
src/archivers/7z/7zArcIn.c
src/archivers/7z/7zBuf.c
src/archivers/7z/7zBuf2.c
src/archivers/7z/7zCrc.c
src/archivers/7z/7zCrcOpt.c
src/archivers/7z/7zDec.c
src/archivers/7z/7zFile.c
src/archivers/7z/7zStream.c
src/archivers/7z/Aes.c
src/archivers/7z/AesOpt.c
src/archivers/7z/Alloc.c
src/archivers/7z/Bcj2.c
src/archivers/7z/Bra.c
src/archivers/7z/Bra86.c
src/archivers/7z/BraIA64.c
src/archivers/7z/CpuArch.c
src/archivers/7z/Delta.c
src/archivers/7z/LzFind.c
src/archivers/7z/Lzma2Dec.c
src/archivers/7z/Lzma2Enc.c
src/archivers/7z/Lzma86Dec.c
src/archivers/7z/Lzma86Enc.c
src/archivers/7z/LzmaDec.c
src/archivers/7z/LzmaEnc.c
src/archivers/7z/LzmaLib.c
src/archivers/7z/Ppmd7.c
src/archivers/7z/Ppmd7Dec.c
src/archivers/7z/Ppmd7Enc.c
src/archivers/7z/Sha256.c
src/archivers/7z/Sort.c
src/archivers/7z/Xz.c
src/archivers/7z/XzCrc64.c
src/archivers/7z/XzCrc64Opt.c
src/archivers/7z/XzDec.c
src/archivers/7z/XzEnc.c
src/archivers/7z/XzIn.c
src/archivers/chd/avhuff.cpp
src/archivers/chd/bitmap.cpp
src/archivers/chd/cdrom.cpp
src/archivers/chd/chd.cpp
src/archivers/chd/chdcd.cpp
src/archivers/chd/chdcodec.cpp
src/archivers/chd/corealloc.cpp
src/archivers/chd/corefile.cpp
src/archivers/chd/corestr.cpp
src/archivers/chd/flac.cpp
src/archivers/chd/harddisk.cpp
src/archivers/chd/hashing.cpp
src/archivers/chd/huffman.cpp
src/archivers/chd/md5.cpp
src/archivers/chd/osdcore.cpp
src/archivers/chd/osdlib_unix.cpp
src/archivers/chd/osdsync.cpp
src/archivers/chd/palette.cpp
src/archivers/chd/posixdir.cpp
src/archivers/chd/posixfile.cpp
src/archivers/chd/posixptty.cpp
src/archivers/chd/posixsocket.cpp
src/archivers/chd/strconv.cpp
src/archivers/chd/strformat.cpp
src/archivers/chd/unicode.cpp
src/archivers/chd/vecstream.cpp
src/archivers/chd/utf8proc.c
src/archivers/dms/crc_csum.cpp
src/archivers/dms/getbits.cpp
src/archivers/dms/maketbl.cpp
src/archivers/dms/pfile.cpp
src/archivers/dms/tables.cpp
src/archivers/dms/u_deep.cpp
src/archivers/dms/u_heavy.cpp
src/archivers/dms/u_init.cpp
src/archivers/dms/u_medium.cpp
src/archivers/dms/u_quick.cpp
src/archivers/dms/u_rle.cpp
src/archivers/lha/crcio.cpp
src/archivers/lha/dhuf.cpp
src/archivers/lha/header.cpp
src/archivers/lha/huf.cpp
src/archivers/lha/larc.cpp
src/archivers/lha/lhamaketbl.cpp
src/archivers/lha/lharc.cpp
src/archivers/lha/shuf.cpp
src/archivers/lha/shuf.cpp
src/archivers/lha/slide.cpp
src/archivers/lha/uae_lha.cpp
src/archivers/lha/util.cpp
src/archivers/lzx/unlzx.cpp
src/archivers/mp2/kjmp2.cpp
src/archivers/wrp/warp.cpp
src/archivers/zip/unzip.cpp
src/caps/caps_amiberry.cpp
src/dsp3210/dsp_glue.cpp
src/dsp3210/DSP3210_emulation.cpp
src/machdep/support.cpp
src/mame/a2410.cpp
src/mame/tm34010/tms34010.cpp
external/floppybridge/src/floppybridge_lib.cpp
src/osdep/ahi_v1.cpp
src/osdep/bsdsocket_host.cpp
src/osdep/cda_play.cpp
src/osdep/charset.cpp
src/osdep/fsdb_host.cpp
src/osdep/clipboard.cpp
src/osdep/amiberry_hardfile.cpp
src/osdep/keyboard.cpp
src/osdep/midi.cpp
src/osdep/mp3decoder.cpp
src/osdep/picasso96.cpp
src/osdep/writelog.cpp
src/osdep/amiberry.cpp
src/osdep/ahi_v2.cpp
src/osdep/amiberry_dbus.cpp
src/osdep/amiberry_filesys.cpp
src/osdep/amiberry_input.cpp
src/osdep/amiberry_gfx.cpp
src/osdep/amiberry_gui.cpp
src/osdep/amiberry_mem.cpp
src/osdep/amiberry_serial.cpp
src/osdep/amiberry_uaenet.cpp
src/osdep/amiberry_whdbooter.cpp
src/osdep/ioport.cpp
src/osdep/sigsegv_handler.cpp
src/osdep/socket.cpp
src/osdep/retroarch.cpp
src/osdep/vpar.cpp
src/pcem/386.cpp
src/pcem/386_common.cpp
src/pcem/386_dynarec.cpp
src/pcem/808x.cpp
src/pcem/cpu.cpp
src/pcem/dosbox/dbopl.cpp
src/pcem/dma.cpp
src/pcem/keyboard.cpp
src/pcem/keyboard_at.cpp
src/pcem/keyboard_at_draco.cpp
src/pcem/mem.cpp
src/pcem/mouse_ps2.cpp
src/pcem/mouse_serial.cpp
src/pcem/dosbox/nukedopl.cpp
src/pcem/nvr.cpp
src/pcem/pcemglue.cpp
src/pcem/pcemrtc.cpp
src/pcem/pic.cpp
src/pcem/pit.cpp
src/pcem/serial.cpp
src/pcem/sound_cms.cpp
src/pcem/sound_dbopl.cpp
src/pcem/sound_mpu401_uart.cpp
src/pcem/sound_opl.cpp
src/pcem/sound_sb.cpp
src/pcem/sound_sb_dsp.cpp
src/pcem/sound_speaker.cpp
src/pcem/timer.cpp
src/pcem/vid_bt482_ramdac.cpp
src/pcem/vid_cl5429.cpp
src/pcem/vid_et4000.cpp
src/pcem/vid_et4000w32.cpp
src/pcem/vid_inmos.cpp
src/pcem/vid_ncr.cpp
src/pcem/vid_permedia2.cpp
src/pcem/vid_s3.cpp
src/pcem/vid_s3_virge.cpp
src/pcem/vid_sc1502x_ramdac.cpp
src/pcem/vid_sdac_ramdac.cpp
src/pcem/vid_svga.cpp
src/pcem/vid_svga_render.cpp
src/pcem/vid_voodoo.cpp
src/pcem/vid_voodoo_banshee.cpp
src/pcem/vid_voodoo_banshee_blitter.cpp
src/pcem/vid_voodoo_blitter.cpp
src/pcem/vid_voodoo_display.cpp
src/pcem/vid_voodoo_fb.cpp
src/pcem/vid_voodoo_fifo.cpp
src/pcem/vid_voodoo_reg.cpp
src/pcem/vid_voodoo_render.cpp
src/pcem/vid_voodoo_setup.cpp
src/pcem/vid_voodoo_texture.cpp
src/pcem/x86seg.cpp
src/pcem/x87.cpp
src/pcem/x87_timings.cpp
src/ppc/ppc.cpp
src/ppc/ppcd.cpp
src/qemuvga/cirrus_vga.cpp
src/qemuvga/es1370.cpp
src/qemuvga/esp.cpp
src/qemuvga/lsi53c710.cpp
src/qemuvga/lsi53c895a.cpp
src/qemuvga/ne2000.cpp
src/qemuvga/qemu.cpp
src/qemuvga/qemuuaeglue.cpp
src/qemuvga/vga.cpp
src/sounddep/sound.cpp
src/threaddep/threading.cpp
src/osdep/gui/ControllerMap.cpp
src/osdep/gui/CreateFolder.cpp
src/osdep/gui/SelectorEntry.cpp
src/osdep/gui/ShowCustomFields.cpp
src/osdep/gui/ShowHelp.cpp
src/osdep/gui/ShowMessage.cpp
src/osdep/gui/ShowDiskInfo.cpp
src/osdep/gui/SelectFolder.cpp
src/osdep/gui/SelectFile.cpp
src/osdep/gui/CreateFilesysHardfile.cpp
src/osdep/gui/EditFilesysVirtual.cpp
src/osdep/gui/EditFilesysHardfile.cpp
src/osdep/gui/EditFilesysHardDrive.cpp
src/osdep/gui/EditTapeDrive.cpp
src/osdep/gui/PanelAbout.cpp
src/osdep/gui/PanelPaths.cpp
src/osdep/gui/PanelQuickstart.cpp
src/osdep/gui/PanelConfig.cpp
src/osdep/gui/PanelCPU.cpp
src/osdep/gui/PanelChipset.cpp
src/osdep/gui/PanelCustom.cpp
src/osdep/gui/PanelROM.cpp
src/osdep/gui/PanelRAM.cpp
src/osdep/gui/PanelFloppy.cpp
src/osdep/gui/PanelExpansions.cpp
src/osdep/gui/PanelHD.cpp
src/osdep/gui/PanelRTG.cpp
src/osdep/gui/PanelHWInfo.cpp
src/osdep/gui/PanelInput.cpp
src/osdep/gui/PanelIOPorts.cpp
src/osdep/gui/PanelDisplay.cpp
src/osdep/gui/PanelSound.cpp
src/osdep/gui/PanelDiskSwapper.cpp
src/osdep/gui/PanelMisc.cpp
src/osdep/gui/PanelPrio.cpp
src/osdep/gui/PanelSavestate.cpp
src/osdep/gui/PanelVirtualKeyboard.cpp
src/osdep/gui/PanelWHDLoad.cpp
src/osdep/gui/main_window.cpp
src/osdep/gui/Navigation.cpp
src/osdep/vkbd/vkbd.cpp
src/newcpu.cpp
src/newcpu_common.cpp
src/readcpu.cpp
src/cpudefs.cpp
src/cpustbl.cpp
src/cpummu.cpp
src/cpummu30.cpp
src/cpuemu_0.cpp
src/cpuemu_11.cpp
src/cpuemu_13.cpp
src/cpuemu_20.cpp
src/cpuemu_21.cpp
src/cpuemu_22.cpp
src/cpuemu_23.cpp
src/cpuemu_24.cpp
src/cpuemu_31.cpp
src/cpuemu_32.cpp
src/cpuemu_33.cpp
src/cpuemu_34.cpp
src/cpuemu_35.cpp
src/cpuemu_40.cpp
src/cpuemu_50.cpp
src/jit/compemu.cpp
src/jit/compstbl.cpp
src/jit/compemu_fpp.cpp
src/jit/compemu_support.cpp
)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${SOURCE_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_EXECUTABLE_NAME "Amiberry"
MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME} ${PROJECT_VERSION}"
MACOSX_BUNDLE_ICON_FILE "data/icon"
MACOSX_BUNDLE_GUI_IDENTIFIER "com.blitterstudio.amiberry"
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.blitterstudio.amiberry"
MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION}
MACOSX_BUNDLE_BUNDLE_NAME "Amiberry"
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_COPYRIGHT "(c) 2016-2024 Dimitris Panokostas"
)
target_compile_definitions(${PROJECT_NAME} PRIVATE _FILE_OFFSET_BITS=64 -DAMIBERRY_VERSION="${PROJECT_VERSION}")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
target_compile_definitions(${PROJECT_NAME} PRIVATE CPU_AARCH64)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
target_compile_definitions(${PROJECT_NAME} PRIVATE CPU_arm ARMV6_ASSEMBLY ARMV6T2 USE_ARMNEON ARM_HAS_DIV)
endif ()
if (USE_GPIOD)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_GPIOD)
find_library(LIBGPIOD_LIBRARIES gpiod REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBGPIOD_LIBRARIES})
endif ()
if (USE_DBUS)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DBUS)
find_package(PkgConfig REQUIRED)
pkg_check_modules(DBUS REQUIRED dbus-1)
target_include_directories(${PROJECT_NAME} PRIVATE ${DBUS_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${DBUS_LIBRARIES})
endif ()
find_package(SDL2 CONFIG REQUIRED)
find_package(SDL2_image MODULE REQUIRED)
find_package(SDL2_ttf MODULE REQUIRED)
include_directories(${SDL2_INCLUDE_DIR} ${SDL2_IMAGE_INCLUDE_DIR} ${SDL2_TTF_INCLUDE_DIR})
find_package(FLAC REQUIRED)
find_package(mpg123 REQUIRED)
find_package(PNG REQUIRED)
find_package(ZLIB REQUIRED)
find_helper(LIBSERIALPORT libserialport libserialport.h serialport)
find_helper(PORTMIDI portmidi portmidi.h portmidi)
find_helper(LIBMPEG2_CONVERT libmpeg2convert mpeg2convert.h mpeg2convert)
find_helper(LIBMPEG2 libmpeg2 mpeg2.h mpeg2)
set(libmt32emu_SHARED FALSE)
add_subdirectory(external/mt32emu)
add_subdirectory(external/floppybridge)
add_subdirectory(external/capsimage)
add_subdirectory(external/libguisan)
# Add dependencies to ensure external libraries are built
add_dependencies(${PROJECT_NAME} mt32emu floppybridge capsimage guisan)
target_compile_options(${PROJECT_NAME} PRIVATE -fno-pie)
target_include_directories(${PROJECT_NAME} PRIVATE src src/osdep src/include src/threaddep src/archivers src/ppc/pearpc external/libguisan/include external/mt32emu/src external/floppybridge/src)
target_link_libraries(${PROJECT_NAME} PRIVATE SDL2 SDL2_image SDL2_ttf guisan mt32emu ${DBUS_LIBRARIES} FLAC ${PORTMIDI_LIBRARIES} png MPG123::libmpg123 ${LIBMPEG2_LIBRARIES} ${LIBMPEG2_CONVERT_LIBRARIES} ${LIBSERIALPORT_LIBRARIES} z pthread dl)
target_link_options(${PROJECT_NAME} PRIVATE -no-pie)
if (USE_OPENGL)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_OPENGL)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE ${TARGET_LINK_LIBRARIES} GLEW OpenGL::GL)
endif ()
set(PROJECT_COMPANY_NAME "BlitterStudio")
set(PROJECT_COMPANY_NAMESPACE "com.blitterstudio") # Reverse domain name notation
include(GNUInstallDirs)
target_compile_definitions(${PROJECT_NAME} PRIVATE
-DAMIBERRY_DATADIR="${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}"
-DAMIBERRY_LIBDIR="${CMAKE_INSTALL_FULL_LIBDIR}/${PROJECT_NAME}"
)
# Install the executable
install(TARGETS ${PROJECT_NAME}
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/controllers
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/controllers)
include(cmake/StandardProjectSettings.cmake)
include(cmake/Dependencies.cmake)
include(cmake/SourceFiles.cmake)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/data
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/data)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/roms
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/roms)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/whdboot
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/whdboot)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:capsimage>
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/$<TARGET_FILE_NAME:capsimage>)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:floppybridge>
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/$<TARGET_FILE_NAME:floppybridge>)
# Gather all dependencies with dylibbundler
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND dylibbundler -od -b -x $<TARGET_FILE:${PROJECT_NAME}> -d $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/ -p @executable_path/../Frameworks/)
if (NOT "${CMAKE_GENERATOR}" MATCHES "Xcode")
install(FILES $<TARGET_FILE:capsimage>
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/)
install(FILES $<TARGET_FILE:floppybridge>
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/)
# This one contains the gamecontrollersdb.txt file
install(DIRECTORY ${CMAKE_SOURCE_DIR}/controllers
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
# This one contains the data files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/data
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
# This one contains the AROS kickstart files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/roms
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
# This one contains the whdboot files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/whdboot
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
endif ()
else()
# Copy dirs to the build directory so we can debug locally
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/controllers
$<TARGET_FILE_DIR:${PROJECT_NAME}>/controllers)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/data
$<TARGET_FILE_DIR:${PROJECT_NAME}>/data)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/roms
$<TARGET_FILE_DIR:${PROJECT_NAME}>/roms)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/whdboot
$<TARGET_FILE_DIR:${PROJECT_NAME}>/whdboot)
install(FILES $<TARGET_FILE:capsimage>
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})
install(FILES $<TARGET_FILE:floppybridge>
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})
# This one contains the gamecontrollersdb.txt file
install(DIRECTORY ${CMAKE_SOURCE_DIR}/controllers
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# This one contains the data files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/data
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# This one contains the AROS kickstart files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/roms
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# This one contains the whdboot files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/whdboot
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# Install desktop file
install(FILES ${CMAKE_SOURCE_DIR}/data/Amiberry.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
# Install icon
install(FILES ${CMAKE_SOURCE_DIR}/data/amiberry.svg
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
install(FILES ${CMAKE_SOURCE_DIR}/debian/changelog.gz
DESTINATION ${CMAKE_INSTALL_DOCDIR})
install(FILES ${CMAKE_SOURCE_DIR}/debian/copyright
DESTINATION ${CMAKE_INSTALL_DOCDIR})
install(FILES ${CMAKE_SOURCE_DIR}/docs/amiberry.1.gz
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
install(FILES ${CMAKE_SOURCE_DIR}/data/Amiberry.metainfo.xml
DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
endif()
# Base package settings
if (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
endif ()
set(CPACK_VERBATIM_VARIABLES YES)
set(CPACK_SOURCE_IGNORE_FILES .git/ .github/ .vscode/ _CPack_Packages/)
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_VENDOR "BlitterStudio")
set(CPACK_PACKAGE_CONTACT "Dimitris Panokostas <midwan@gmail.com>")
set(CPACK_PACKAGE_DESCRIPTION
"Optimized Amiga emulator for various ARM, ARM64, AMD64 and RISC-V platforms.
Amiberry is an optimized Amiga emulator for various platforms. It is based on
the latest WinUAE and supports various Amiga models, including the A4000T,
A4000D, A1200, A3000 and A600. Additionally, it includes several unique
features, such as support for WHDLoad titles, RetroArch integration, custom
Controller Mappings and more.")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/docs/Description.txt")
# macOS settings for DragNDrop generator
set(CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE OFF)
set(CPACK_DMG_VOLUME_NAME "${CMAKE_PROJECT_NAME}")
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/macos/AppDMGBackground.tiff")
set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_SOURCE_DIR}/macos/AppDMGSetup.scpt")
# Linux DEB settings
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6, libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-ttf-2.0-0, flac, libmpg123-0, libpng16-16, zlib1g, libserialport0, libportmidi0, libmpeg2-4") # Adjust dependencies as needed
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf")
else()
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
endif()
set(CPACK_DEBIAN_PACKAGE_SECTION "otherosfs")
# Linux RPM settings
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_REQUIRES "glibc, libstdc++, SDL2, SDL2_ttf SDL2_image, flac, mpg123, libpng, libserialport, portmidi, libmpeg2")
set(CPACK_RPM_PACKAGE_LICENSE "GPL-3.0-or-later")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
set(CPACK_RPM_PACKAGE_ARCHITECTURE "arm64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(CPACK_RPM_PACKAGE_ARCHITECTURE "armhf")
else()
set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
endif()
# Package resources
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/docs/README.md")
# Strip binaries
set(CPACK_STRIP_FILES "YES")
# Generator selection per platform
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CPACK_GENERATOR TGZ DragNDrop)
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
set(CPACK_GENERATOR TGZ DEB RPM)
else ()
set(CPACK_GENERATOR TGZ)
endif ()
include(CPack)
add_subdirectory(packaging)

43
cmake/Dependencies.cmake Normal file
View File

@ -0,0 +1,43 @@
include(FindHelper)
if (USE_GPIOD)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_GPIOD)
find_library(LIBGPIOD_LIBRARIES gpiod REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBGPIOD_LIBRARIES})
endif ()
if (USE_DBUS)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DBUS)
find_package(PkgConfig REQUIRED)
pkg_check_modules(DBUS REQUIRED dbus-1)
target_include_directories(${PROJECT_NAME} PRIVATE ${DBUS_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${DBUS_LIBRARIES})
endif ()
if (USE_OPENGL)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_OPENGL)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE ${TARGET_LINK_LIBRARIES} GLEW OpenGL::GL)
endif ()
find_package(SDL2 CONFIG REQUIRED)
find_package(SDL2_image MODULE REQUIRED)
find_package(SDL2_ttf MODULE REQUIRED)
include_directories(${SDL2_INCLUDE_DIR} ${SDL2_IMAGE_INCLUDE_DIR} ${SDL2_TTF_INCLUDE_DIR})
find_package(FLAC REQUIRED)
find_package(mpg123 REQUIRED)
find_package(PNG REQUIRED)
find_package(ZLIB REQUIRED)
find_helper(LIBSERIALPORT libserialport libserialport.h serialport)
find_helper(PORTMIDI portmidi portmidi.h portmidi)
find_helper(LIBMPEG2_CONVERT libmpeg2convert mpeg2convert.h mpeg2convert)
find_helper(LIBMPEG2 libmpeg2 mpeg2.h mpeg2)
set(libmt32emu_SHARED FALSE)
add_subdirectory(external/mt32emu)
add_subdirectory(external/floppybridge)
add_subdirectory(external/capsimage)
add_subdirectory(external/libguisan)

447
cmake/SourceFiles.cmake Normal file
View File

@ -0,0 +1,447 @@
# Define the list of source files
set(SOURCE_FILES
src/a2065.cpp
src/a2091.cpp
src/akiko.cpp
src/amax.cpp
src/ar.cpp
src/arcadia.cpp
src/audio.cpp
src/autoconf.cpp
src/blitfunc.cpp
src/blittable.cpp
src/blitter.cpp
src/blkdev.cpp
src/blkdev_cdimage.cpp
src/bsdsocket.cpp
src/calc.cpp
src/catweasel.cpp
src/cd32_fmv.cpp
src/cd32_fmv_genlock.cpp
src/cdrom.cpp
src/cdtv.cpp
src/cdtvcr.cpp
src/cfgfile.cpp
src/cia.cpp
src/consolehook.cpp
src/cpuboard.cpp
src/crc32.cpp
src/custom.cpp
src/debug.cpp
src/debugmem.cpp
src/def_icons.cpp
src/devices.cpp
src/disasm.cpp
src/disk.cpp
src/diskutil.cpp
src/dlopen.cpp
src/dongle.cpp
src/draco.cpp
src/drawing.cpp
src/driveclick.cpp
src/enforcer.cpp
src/ethernet.cpp
src/events.cpp
src/expansion.cpp
src/fdi2raw.cpp
src/filesys.cpp
src/flashrom.cpp
src/fpp.cpp
src/fpp_native.cpp
src/framebufferboards.cpp
src/fsdb.cpp
src/fsusage.cpp
src/gayle.cpp
src/gfxboard.cpp
src/gfxlib.cpp
src/gfxutil.cpp
src/hardfile.cpp
src/hrtmon.rom.cpp
src/ide.cpp
src/idecontrollers.cpp
src/identify.cpp
src/ini.cpp
src/inputdevice.cpp
src/inputrecord.cpp
src/isofs.cpp
src/keybuf.cpp
src/luascript.cpp
src/main.cpp
src/memory.cpp
src/midiemu.cpp
src/native2amiga.cpp
src/ncr9x_scsi.cpp
src/ncr_scsi.cpp
src/parser.cpp
src/pci.cpp
src/rommgr.cpp
src/rtc.cpp
src/sampler.cpp
src/sana2.cpp
src/savestate.cpp
src/scp.cpp
src/scsi.cpp
src/scsiemul.cpp
src/scsitape.cpp
src/slirp_uae.cpp
src/sndboard.cpp
src/specialmonitors.cpp
src/statusline.cpp
src/tabletlibrary.cpp
src/test_card.cpp
src/tinyxml2.cpp
src/traps.cpp
src/uaeexe.cpp
src/uaelib.cpp
src/uaenative.cpp
src/uaeresource.cpp
src/uaeserial.cpp
src/vm.cpp
src/x86.cpp
src/zfile.cpp
src/zfile_archive.cpp
src/archivers/7z/7zAlloc.c
src/archivers/7z/7zArcIn.c
src/archivers/7z/7zBuf.c
src/archivers/7z/7zBuf2.c
src/archivers/7z/7zCrc.c
src/archivers/7z/7zCrcOpt.c
src/archivers/7z/7zDec.c
src/archivers/7z/7zFile.c
src/archivers/7z/7zStream.c
src/archivers/7z/Aes.c
src/archivers/7z/AesOpt.c
src/archivers/7z/Alloc.c
src/archivers/7z/Bcj2.c
src/archivers/7z/Bra.c
src/archivers/7z/Bra86.c
src/archivers/7z/BraIA64.c
src/archivers/7z/CpuArch.c
src/archivers/7z/Delta.c
src/archivers/7z/LzFind.c
src/archivers/7z/Lzma2Dec.c
src/archivers/7z/Lzma2Enc.c
src/archivers/7z/Lzma86Dec.c
src/archivers/7z/Lzma86Enc.c
src/archivers/7z/LzmaDec.c
src/archivers/7z/LzmaEnc.c
src/archivers/7z/LzmaLib.c
src/archivers/7z/Ppmd7.c
src/archivers/7z/Ppmd7Dec.c
src/archivers/7z/Ppmd7Enc.c
src/archivers/7z/Sha256.c
src/archivers/7z/Sort.c
src/archivers/7z/Xz.c
src/archivers/7z/XzCrc64.c
src/archivers/7z/XzCrc64Opt.c
src/archivers/7z/XzDec.c
src/archivers/7z/XzEnc.c
src/archivers/7z/XzIn.c
src/archivers/chd/avhuff.cpp
src/archivers/chd/bitmap.cpp
src/archivers/chd/cdrom.cpp
src/archivers/chd/chd.cpp
src/archivers/chd/chdcd.cpp
src/archivers/chd/chdcodec.cpp
src/archivers/chd/corealloc.cpp
src/archivers/chd/corefile.cpp
src/archivers/chd/corestr.cpp
src/archivers/chd/flac.cpp
src/archivers/chd/harddisk.cpp
src/archivers/chd/hashing.cpp
src/archivers/chd/huffman.cpp
src/archivers/chd/md5.cpp
src/archivers/chd/osdcore.cpp
src/archivers/chd/osdlib_unix.cpp
src/archivers/chd/osdsync.cpp
src/archivers/chd/palette.cpp
src/archivers/chd/posixdir.cpp
src/archivers/chd/posixfile.cpp
src/archivers/chd/posixptty.cpp
src/archivers/chd/posixsocket.cpp
src/archivers/chd/strconv.cpp
src/archivers/chd/strformat.cpp
src/archivers/chd/unicode.cpp
src/archivers/chd/vecstream.cpp
src/archivers/chd/utf8proc.c
src/archivers/dms/crc_csum.cpp
src/archivers/dms/getbits.cpp
src/archivers/dms/maketbl.cpp
src/archivers/dms/pfile.cpp
src/archivers/dms/tables.cpp
src/archivers/dms/u_deep.cpp
src/archivers/dms/u_heavy.cpp
src/archivers/dms/u_init.cpp
src/archivers/dms/u_medium.cpp
src/archivers/dms/u_quick.cpp
src/archivers/dms/u_rle.cpp
src/archivers/lha/crcio.cpp
src/archivers/lha/dhuf.cpp
src/archivers/lha/header.cpp
src/archivers/lha/huf.cpp
src/archivers/lha/larc.cpp
src/archivers/lha/lhamaketbl.cpp
src/archivers/lha/lharc.cpp
src/archivers/lha/shuf.cpp
src/archivers/lha/shuf.cpp
src/archivers/lha/slide.cpp
src/archivers/lha/uae_lha.cpp
src/archivers/lha/util.cpp
src/archivers/lzx/unlzx.cpp
src/archivers/mp2/kjmp2.cpp
src/archivers/wrp/warp.cpp
src/archivers/zip/unzip.cpp
src/caps/caps_amiberry.cpp
src/dsp3210/dsp_glue.cpp
src/dsp3210/DSP3210_emulation.cpp
src/machdep/support.cpp
src/mame/a2410.cpp
src/mame/tm34010/tms34010.cpp
external/floppybridge/src/floppybridge_lib.cpp
src/osdep/ahi_v1.cpp
src/osdep/bsdsocket_host.cpp
src/osdep/cda_play.cpp
src/osdep/charset.cpp
src/osdep/fsdb_host.cpp
src/osdep/clipboard.cpp
src/osdep/amiberry_hardfile.cpp
src/osdep/keyboard.cpp
src/osdep/midi.cpp
src/osdep/mp3decoder.cpp
src/osdep/picasso96.cpp
src/osdep/writelog.cpp
src/osdep/amiberry.cpp
src/osdep/ahi_v2.cpp
src/osdep/amiberry_dbus.cpp
src/osdep/amiberry_filesys.cpp
src/osdep/amiberry_input.cpp
src/osdep/amiberry_gfx.cpp
src/osdep/amiberry_gui.cpp
src/osdep/amiberry_mem.cpp
src/osdep/amiberry_serial.cpp
src/osdep/amiberry_uaenet.cpp
src/osdep/amiberry_whdbooter.cpp
src/osdep/ioport.cpp
src/osdep/sigsegv_handler.cpp
src/osdep/socket.cpp
src/osdep/retroarch.cpp
src/osdep/vpar.cpp
src/pcem/386.cpp
src/pcem/386_common.cpp
src/pcem/386_dynarec.cpp
src/pcem/808x.cpp
src/pcem/cpu.cpp
src/pcem/dosbox/dbopl.cpp
src/pcem/dma.cpp
src/pcem/keyboard.cpp
src/pcem/keyboard_at.cpp
src/pcem/keyboard_at_draco.cpp
src/pcem/mem.cpp
src/pcem/mouse_ps2.cpp
src/pcem/mouse_serial.cpp
src/pcem/dosbox/nukedopl.cpp
src/pcem/nvr.cpp
src/pcem/pcemglue.cpp
src/pcem/pcemrtc.cpp
src/pcem/pic.cpp
src/pcem/pit.cpp
src/pcem/serial.cpp
src/pcem/sound_cms.cpp
src/pcem/sound_dbopl.cpp
src/pcem/sound_mpu401_uart.cpp
src/pcem/sound_opl.cpp
src/pcem/sound_sb.cpp
src/pcem/sound_sb_dsp.cpp
src/pcem/sound_speaker.cpp
src/pcem/timer.cpp
src/pcem/vid_bt482_ramdac.cpp
src/pcem/vid_cl5429.cpp
src/pcem/vid_et4000.cpp
src/pcem/vid_et4000w32.cpp
src/pcem/vid_inmos.cpp
src/pcem/vid_ncr.cpp
src/pcem/vid_permedia2.cpp
src/pcem/vid_s3.cpp
src/pcem/vid_s3_virge.cpp
src/pcem/vid_sc1502x_ramdac.cpp
src/pcem/vid_sdac_ramdac.cpp
src/pcem/vid_svga.cpp
src/pcem/vid_svga_render.cpp
src/pcem/vid_voodoo.cpp
src/pcem/vid_voodoo_banshee.cpp
src/pcem/vid_voodoo_banshee_blitter.cpp
src/pcem/vid_voodoo_blitter.cpp
src/pcem/vid_voodoo_display.cpp
src/pcem/vid_voodoo_fb.cpp
src/pcem/vid_voodoo_fifo.cpp
src/pcem/vid_voodoo_reg.cpp
src/pcem/vid_voodoo_render.cpp
src/pcem/vid_voodoo_setup.cpp
src/pcem/vid_voodoo_texture.cpp
src/pcem/x86seg.cpp
src/pcem/x87.cpp
src/pcem/x87_timings.cpp
src/ppc/ppc.cpp
src/ppc/ppcd.cpp
src/qemuvga/cirrus_vga.cpp
src/qemuvga/es1370.cpp
src/qemuvga/esp.cpp
src/qemuvga/lsi53c710.cpp
src/qemuvga/lsi53c895a.cpp
src/qemuvga/ne2000.cpp
src/qemuvga/qemu.cpp
src/qemuvga/qemuuaeglue.cpp
src/qemuvga/vga.cpp
src/sounddep/sound.cpp
src/threaddep/threading.cpp
src/osdep/gui/ControllerMap.cpp
src/osdep/gui/CreateFolder.cpp
src/osdep/gui/SelectorEntry.cpp
src/osdep/gui/ShowCustomFields.cpp
src/osdep/gui/ShowHelp.cpp
src/osdep/gui/ShowMessage.cpp
src/osdep/gui/ShowDiskInfo.cpp
src/osdep/gui/SelectFolder.cpp
src/osdep/gui/SelectFile.cpp
src/osdep/gui/CreateFilesysHardfile.cpp
src/osdep/gui/EditFilesysVirtual.cpp
src/osdep/gui/EditFilesysHardfile.cpp
src/osdep/gui/EditFilesysHardDrive.cpp
src/osdep/gui/EditTapeDrive.cpp
src/osdep/gui/PanelAbout.cpp
src/osdep/gui/PanelPaths.cpp
src/osdep/gui/PanelQuickstart.cpp
src/osdep/gui/PanelConfig.cpp
src/osdep/gui/PanelCPU.cpp
src/osdep/gui/PanelChipset.cpp
src/osdep/gui/PanelCustom.cpp
src/osdep/gui/PanelROM.cpp
src/osdep/gui/PanelRAM.cpp
src/osdep/gui/PanelFloppy.cpp
src/osdep/gui/PanelExpansions.cpp
src/osdep/gui/PanelHD.cpp
src/osdep/gui/PanelRTG.cpp
src/osdep/gui/PanelHWInfo.cpp
src/osdep/gui/PanelInput.cpp
src/osdep/gui/PanelIOPorts.cpp
src/osdep/gui/PanelDisplay.cpp
src/osdep/gui/PanelSound.cpp
src/osdep/gui/PanelDiskSwapper.cpp
src/osdep/gui/PanelMisc.cpp
src/osdep/gui/PanelPrio.cpp
src/osdep/gui/PanelSavestate.cpp
src/osdep/gui/PanelVirtualKeyboard.cpp
src/osdep/gui/PanelWHDLoad.cpp
src/osdep/gui/main_window.cpp
src/osdep/gui/Navigation.cpp
src/osdep/vkbd/vkbd.cpp
src/newcpu.cpp
src/newcpu_common.cpp
src/readcpu.cpp
src/cpudefs.cpp
src/cpustbl.cpp
src/cpummu.cpp
src/cpummu30.cpp
src/cpuemu_0.cpp
src/cpuemu_11.cpp
src/cpuemu_13.cpp
src/cpuemu_20.cpp
src/cpuemu_21.cpp
src/cpuemu_22.cpp
src/cpuemu_23.cpp
src/cpuemu_24.cpp
src/cpuemu_31.cpp
src/cpuemu_32.cpp
src/cpuemu_33.cpp
src/cpuemu_34.cpp
src/cpuemu_35.cpp
src/cpuemu_40.cpp
src/cpuemu_50.cpp
src/jit/compemu.cpp
src/jit/compstbl.cpp
src/jit/compemu_fpp.cpp
src/jit/compemu_support.cpp
)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${SOURCE_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_EXECUTABLE_NAME "Amiberry"
MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME} ${PROJECT_VERSION}"
MACOSX_BUNDLE_ICON_FILE "data/icon"
MACOSX_BUNDLE_GUI_IDENTIFIER "com.blitterstudio.amiberry"
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.blitterstudio.amiberry"
MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION}
MACOSX_BUNDLE_BUNDLE_NAME "Amiberry"
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_COPYRIGHT "(c) 2016-2024 Dimitris Panokostas"
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
_FILE_OFFSET_BITS=64
-DAMIBERRY_VERSION="${PROJECT_VERSION}"
-DAMIBERRY_DATADIR="${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}"
-DAMIBERRY_LIBDIR="${CMAKE_INSTALL_FULL_LIBDIR}/${PROJECT_NAME}"
)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
target_compile_definitions(${PROJECT_NAME} PRIVATE
CPU_AARCH64
)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
target_compile_definitions(${PROJECT_NAME} PRIVATE
CPU_arm ARMV6_ASSEMBLY ARMV6T2 USE_ARMNEON ARM_HAS_DIV
)
endif ()
target_compile_options(${PROJECT_NAME} PRIVATE -fno-pie)
target_link_options(${PROJECT_NAME} PRIVATE -no-pie)
target_include_directories(${PROJECT_NAME} PRIVATE
src
src/osdep
src/include
src/threaddep
src/archivers
src/ppc/pearpc
external/libguisan/include
external/mt32emu/src
external/floppybridge/src
)
target_link_libraries(${PROJECT_NAME} PRIVATE
SDL2
SDL2_image
SDL2_ttf
guisan
mt32emu
${DBUS_LIBRARIES}
FLAC
${PORTMIDI_LIBRARIES}
png
MPG123::libmpg123
${LIBMPEG2_LIBRARIES}
${LIBMPEG2_CONVERT_LIBRARIES}
${LIBSERIALPORT_LIBRARIES}
z
pthread
dl
)
# Add dependencies to ensure external libraries are built
add_dependencies(${PROJECT_NAME} mt32emu floppybridge capsimage guisan)
# Install the executable
install(TARGETS ${PROJECT_NAME}
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
# Settings for installing per platform
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
include(cmake/linux/CMakeLists.txt)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
include(cmake/macos/CMakeLists.txt)
endif ()

View File

@ -0,0 +1,38 @@
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe")
set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-Og -g -funwind-tables -DDEBUG ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
if (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-undefined -Wl,-z,combreloc")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -Wl,--gc-sections -Wl,--strip-all")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} -g")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -Wl,--gc-sections -Wl,--strip-all")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} -g")
else ()
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-Wl,-dead_strip")
endif()
# Set build type to "Release" if user did not specify any build type yet
# Other possible values: Debug, Release, RelWithDebInfo and MinSizeRel
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif (NOT CMAKE_BUILD_TYPE)
if (WITH_LTO)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
endif ()
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
include_directories("/opt/homebrew/include")
set(CMAKE_EXE_LINKER_FLAGS "-L/opt/homebrew/lib -framework IOKit -framework Foundation -liconv")
else ()
include_directories("/usr/local/include")
set(CMAKE_EXE_LINKER_FLAGS "-L/usr/local/lib -framework IOKit -framework Foundation -liconv")
endif ()
endif ()

View File

@ -0,0 +1,53 @@
# Copy dirs to the build directory so we can debug locally
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/controllers
$<TARGET_FILE_DIR:${PROJECT_NAME}>/controllers)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/data
$<TARGET_FILE_DIR:${PROJECT_NAME}>/data)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/roms
$<TARGET_FILE_DIR:${PROJECT_NAME}>/roms)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/whdboot
$<TARGET_FILE_DIR:${PROJECT_NAME}>/whdboot)
install(FILES $<TARGET_FILE:capsimage>
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})
install(FILES $<TARGET_FILE:floppybridge>
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})
# This one contains the gamecontrollersdb.txt file
install(DIRECTORY ${CMAKE_SOURCE_DIR}/controllers
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# This one contains the data files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/data
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# This one contains the AROS kickstart files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/roms
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# This one contains the whdboot files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/whdboot
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
# Install desktop file
install(FILES ${CMAKE_SOURCE_DIR}/packaging/Amiberry.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
# Install icon
install(FILES ${CMAKE_SOURCE_DIR}/data/amiberry.svg
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
install(FILES ${CMAKE_SOURCE_DIR}/debian/changelog.gz
DESTINATION ${CMAKE_INSTALL_DOCDIR})
install(FILES ${CMAKE_SOURCE_DIR}/debian/copyright
DESTINATION ${CMAKE_INSTALL_DOCDIR})
install(FILES ${CMAKE_SOURCE_DIR}/packaging/amiberry.1.gz
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
install(FILES ${CMAKE_SOURCE_DIR}/packaging/Amiberry.metainfo.xml
DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)

View File

@ -0,0 +1,52 @@
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/controllers
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/controllers)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/data
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/data)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/roms
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/roms)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/whdboot
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/whdboot)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:capsimage>
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/$<TARGET_FILE_NAME:capsimage>)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:floppybridge>
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/$<TARGET_FILE_NAME:floppybridge>)
# Gather all dependencies with dylibbundler
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND dylibbundler -od -b -x $<TARGET_FILE:${PROJECT_NAME}> -d $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/ -p @executable_path/../Frameworks/)
if (NOT "${CMAKE_GENERATOR}" MATCHES "Xcode")
install(FILES $<TARGET_FILE:capsimage>
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/)
install(FILES $<TARGET_FILE:floppybridge>
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/)
# This one contains the gamecontrollersdb.txt file
install(DIRECTORY ${CMAKE_SOURCE_DIR}/controllers
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
# This one contains the data files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/data
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
# This one contains the AROS kickstart files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/roms
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
# This one contains the whdboot files
install(DIRECTORY ${CMAKE_SOURCE_DIR}/whdboot
DESTINATION $<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources)
endif ()

View File

@ -1 +0,0 @@
Controller configs go here

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

68
packaging/CMakeLists.txt Normal file
View File

@ -0,0 +1,68 @@
# Base package settings
if (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
endif ()
set(CPACK_VERBATIM_VARIABLES YES)
set(CPACK_SOURCE_IGNORE_FILES .git/ .github/ .vscode/ _CPack_Packages/)
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_VENDOR "BlitterStudio")
set(CPACK_PACKAGE_CONTACT "Dimitris Panokostas <midwan@gmail.com>")
set(CPACK_PACKAGE_DESCRIPTION
"Optimized Amiga emulator for various ARM, ARM64, AMD64 and RISC-V platforms.
Amiberry is an optimized Amiga emulator for various platforms. It is based on
the latest WinUAE and supports various Amiga models, including the A4000T,
A4000D, A1200, A3000 and A600. Additionally, it includes several unique
features, such as support for WHDLoad titles, RetroArch integration, custom
Controller Mappings and more.")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/packaging/Description.txt")
# macOS settings for DragNDrop generator
set(CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE OFF)
set(CPACK_DMG_VOLUME_NAME "${CMAKE_PROJECT_NAME}")
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/packaging/dmg/AppDMGBackground.tiff")
set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_SOURCE_DIR}/packaging/dmg/AppDMGSetup.scpt")
# Linux DEB settings
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6, libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-ttf-2.0-0, flac, libmpg123-0, libpng16-16, zlib1g, libserialport0, libportmidi0, libmpeg2-4") # Adjust dependencies as needed
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf")
else()
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
endif()
set(CPACK_DEBIAN_PACKAGE_SECTION "otherosfs")
# Linux RPM settings
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_REQUIRES "glibc, libstdc++, SDL2, SDL2_ttf SDL2_image, flac, mpg123, libpng, libserialport, portmidi, libmpeg2")
set(CPACK_RPM_PACKAGE_LICENSE "GPL-3.0-or-later")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
set(CPACK_RPM_PACKAGE_ARCHITECTURE "arm64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(CPACK_RPM_PACKAGE_ARCHITECTURE "armhf")
else()
set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
endif()
# Package resources
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/docs/README.md")
# Strip binaries
set(CPACK_STRIP_FILES "YES")
# Generator selection per platform
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CPACK_GENERATOR TGZ DragNDrop)
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
set(CPACK_GENERATOR TGZ DEB RPM)
else ()
set(CPACK_GENERATOR TGZ)
endif ()
include(CPack)

View File

@ -42,6 +42,8 @@
<string>uae</string>
<string>adf</string>
<string>lha</string>
<string>ipf</string>
<string>dms</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>

View File

@ -1,2 +0,0 @@
Put your kickstarts files here.
They should be named accordingly depending on version: kick12.rom , kick13.rom , kick20.rom, kick31.rom