# 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(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer -O1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-nested-anon-types -Wall -Wextra -pedantic") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") # Speed up compilation set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer -O1") set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer") set(emulator_sources bus.cpp emulator.cpp gdbremote_parser.cpp graphics.cpp m68k_debugging.cpp vdp.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_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 HAS_GRAPHICS=1 ) ## Target for GDB Remote Debugging protocol implementation testing #add_executable(gdbremote # gdbremote.cpp # gdbremote_parser.cpp # ) include_directories( . )