# SPDX-License-Identifier: Unlicense cmake_minimum_required(VERSION 3.16) project(emulator) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_EXPORT_COMPILE_COMMANDS True) set(emulator_sources bus.cpp emulator.cpp gdbremote_parser.cpp graphics.cpp m68k_debugging.cpp vdp.cpp io.cpp ) set(musashi_m68k_sources musashi-m68k/m68kcpu.c musashi-m68k/m68kdasm.c musashi-m68k/softfloat/softfloat.c ${CMAKE_CURRENT_BINARY_DIR}/m68kops.c ) add_executable(m68kmake musashi-m68k/m68kmake.c) target_include_directories(m68kmake PRIVATE musashi-m68k) add_custom_command( OUTPUT m68kops.c m68kops.h WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/musashi-m68k COMMAND ${CMAKE_CURRENT_BINARY_DIR}/m68kmake ${CMAKE_CURRENT_BINARY_DIR} DEPENDS musashi-m68k/m68k_in.c ${CMAKE_CURRENT_BINARY_DIR}/m68kmake ) add_library(musashi_m68k OBJECT ${musashi_m68k_sources}) target_include_directories(musashi_m68k PRIVATE musashi-m68k ${CMAKE_CURRENT_BINARY_DIR} ) # TODO make SDL2 optional for headless mode find_package(SDL2 REQUIRED) add_executable(emulator ${emulator_sources}) target_compile_options(emulator PRIVATE $<$:-fms-extensions> $<$:-fno-exceptions> $<$:-fno-rtti> $<$:-Wsuggest-override> # TODO enable these and fix warnings #$<$:-Wsuggest-final-types> #$<$:-Wsuggest-final-methods> #$<$:-Wold-style-cast> #-Wconversion #-Wsign-conversion -fno-omit-frame-pointer -Wall -Wextra -Wcast-align -Wshadow -Wlogical-op -pedantic -g3 -O2 -fsanitize=address,undefined ) target_link_options(emulator PRIVATE -fsanitize=address,undefined) target_link_libraries(emulator musashi_m68k) # TODO make SDL2 optional for headless mode target_include_directories(emulator PRIVATE ${SDL2_INCLUDE_DIRS}) # TODO make SDL2 optional for headless mode target_link_libraries(emulator ${SDL2_LIBRARIES}) target_compile_definitions(emulator PRIVATE DEBUG_TRACE_INSTRUCTIONS=0 DEBUG_TRACE_GDB_REMOTE=0 DEBUG_TRACE_VDP_ACCESS=1 DEBUG_TRACE_IO_ACCESS=1 HAS_GRAPHICS=1 ) ## Target for GDB Remote Debugging protocol implementation testing #add_executable(gdbremote # gdbremote.cpp # gdbremote_parser.cpp # ) include_directories( . )