# SPDX-License-Identifier: Unlicense cmake_minimum_required(VERSION 3.16) project(m68k-disasm) 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(common_debug_flags -fsanitize=address,undefined -fno-omit-frame-pointer -O1 -g3 # Uncomment to enable profiler # -pg ) set(common_compile_options $<$:${common_debug_flags}> $<$:-Wno-nested-anon-types> # Speed up compilation with -fno-exceptions and -fno-rtti $<$:-fno-exceptions> $<$:-fno-rtti> $<$:-Wold-style-cast> $<$:-Wsuggest-override> $<$:-Wsuggest-final-types> $<$:-Wsuggest-final-methods> $<$:-fstrict-volatile-bitfields> $<$:-fstrict-volatile-bitfields> $<$:-Wlogical-op> $<$:-Wlogical-op> $<$:-ffile-prefix-map=${CMAKE_SOURCE_DIR}/=> $<$:-ffile-prefix-map=${CMAKE_SOURCE_DIR}/=> -Wall -Wextra -pedantic -Wcast-align -Wshadow ) add_library(data_buffer OBJECT src/data_buffer.cpp) target_compile_options(data_buffer PRIVATE ${common_compile_options}) target_compile_definitions(data_buffer PRIVATE $<$:_FORTIFY_SOURCE=2>) target_link_options(data_buffer PRIVATE $<$:${common_debug_flags}>) target_include_directories(data_buffer PRIVATE . lib) add_library(coff_image OBJECT src/coff_image.cpp) target_compile_options(coff_image PRIVATE ${common_compile_options}) target_compile_definitions(coff_image PRIVATE $<$:_FORTIFY_SOURCE=2>) target_link_options(coff_image PRIVATE $<$:${common_debug_flags}>) target_include_directories(coff_image PRIVATE . lib) add_library(tracetab OBJECT src/tracetab.cpp) target_compile_options(tracetab PRIVATE ${common_compile_options}) target_compile_definitions(tracetab PRIVATE $<$:_FORTIFY_SOURCE=2>) target_link_options(tracetab PRIVATE $<$:${common_debug_flags}>) target_include_directories(tracetab PRIVATE . lib) add_library(vec OBJECT src/vec.cpp) target_compile_options(vec PRIVATE ${common_compile_options}) target_compile_definitions(vec PRIVATE $<$:_FORTIFY_SOURCE=2>) target_link_options(vec PRIVATE $<$:${common_debug_flags}>) target_include_directories(vec PRIVATE . lib) add_executable(m68k-disasm src/main.cpp src/disasm.cpp src/m68k.cpp src/elf_image.cpp ) target_compile_options(m68k-disasm PRIVATE ${common_compile_options}) target_compile_definitions(m68k-disasm PRIVATE $<$:_FORTIFY_SOURCE=2>) target_link_options(m68k-disasm PRIVATE $<$:${common_debug_flags}>) target_link_libraries(m68k-disasm PRIVATE data_buffer tracetab vec) target_include_directories(m68k-disasm PRIVATE . lib) add_executable(readcoff src/readcoff.cpp ) target_compile_options(readcoff PRIVATE ${common_compile_options}) target_compile_definitions(readcoff PRIVATE $<$:_FORTIFY_SOURCE=2>) target_link_options(readcoff PRIVATE $<$:${common_debug_flags}>) target_link_libraries(readcoff PRIVATE data_buffer coff_image) target_include_directories(readcoff PRIVATE . lib) add_executable(coff2bin src/coff2bin.cpp ) target_compile_options(coff2bin PRIVATE ${common_compile_options}) target_compile_definitions(coff2bin PRIVATE $<$:_FORTIFY_SOURCE=2>) target_link_options(coff2bin PRIVATE $<$:${common_debug_flags}>) target_link_libraries(coff2bin PRIVATE data_buffer coff_image) target_include_directories(coff2bin PRIVATE . lib) add_executable(unit-tests src/unit_tests_main.cpp src/vec_tests.cpp src/tracetab_tests.cpp ) target_compile_options(unit-tests PRIVATE ${common_compile_options}) target_compile_definitions(unit-tests PRIVATE DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS $<$:_FORTIFY_SOURCE=2> ) target_link_options(unit-tests PRIVATE $<$:${common_debug_flags}>) target_link_libraries(unit-tests PRIVATE tracetab vec) target_include_directories(unit-tests PRIVATE . lib)