117 lines
3.0 KiB
CMake
117 lines
3.0 KiB
CMake
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
|
|
|
|
if(POLICY CMP0092)
|
|
cmake_policy(SET CMP0092 NEW)
|
|
endif()
|
|
|
|
project(sameboy C)
|
|
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
set(CMAKE_C_EXTENSIONS ON)
|
|
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
|
|
|
if(MSVC)
|
|
# max warnings
|
|
add_compile_options(/W4)
|
|
|
|
# ignore some warnings on clang
|
|
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
add_compile_options(-Wno-unused-parameter -Wno-sign-compare -Wno-missing-braces -Wno-missing-field-initializers)
|
|
endif()
|
|
|
|
# all files are utf8
|
|
add_compile_options(/utf-8)
|
|
|
|
# max conformance mode
|
|
add_compile_options(/permissive-)
|
|
add_compile_options(/volatile:iso)
|
|
add_compile_options(/fp:precise)
|
|
else()
|
|
# max warnings
|
|
add_compile_options(-Wall -Wextra)
|
|
# ignore a few warnings
|
|
add_compile_options(-Wno-unused-parameter -Wno-sign-compare -Wno-missing-braces -Wno-missing-field-initializers)
|
|
|
|
# strip in release, optimize for gdb usage in debug
|
|
add_link_options($<$<CONFIG:RELEASE>:-s>)
|
|
add_compile_options($<$<CONFIG:DEBUG>:-ggdb>)
|
|
|
|
# use lld for clang (needed if doing lto)
|
|
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
add_link_options(-fuse-ld=lld)
|
|
endif()
|
|
endif()
|
|
|
|
# make sure we have a "lib" prefix (currently expected across all platforms)
|
|
set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
|
|
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
|
|
|
set(CORE_DIR ${CMAKE_SOURCE_DIR}/libsameboy/Core)
|
|
|
|
add_library(
|
|
core
|
|
STATIC
|
|
${CORE_DIR}/apu.c
|
|
${CORE_DIR}/apu.h
|
|
${CORE_DIR}/camera.c
|
|
${CORE_DIR}/camera.h
|
|
${CORE_DIR}/defs.h
|
|
${CORE_DIR}/display.c
|
|
${CORE_DIR}/display.h
|
|
${CORE_DIR}/gb.c
|
|
${CORE_DIR}/gb.h
|
|
${CORE_DIR}/joypad.c
|
|
${CORE_DIR}/joypad.h
|
|
${CORE_DIR}/mbc.c
|
|
${CORE_DIR}/mbc.h
|
|
${CORE_DIR}/memory.c
|
|
${CORE_DIR}/memory.h
|
|
${CORE_DIR}/model.h
|
|
${CORE_DIR}/printer.c
|
|
${CORE_DIR}/printer.h
|
|
${CORE_DIR}/random.c
|
|
${CORE_DIR}/random.h
|
|
${CORE_DIR}/rumble.c
|
|
${CORE_DIR}/rumble.h
|
|
${CORE_DIR}/save_state.c
|
|
${CORE_DIR}/save_state.h
|
|
${CORE_DIR}/sgb.c
|
|
${CORE_DIR}/sgb.h
|
|
${CORE_DIR}/sm83_cpu.c
|
|
${CORE_DIR}/sm83_cpu.h
|
|
${CORE_DIR}/timing.c
|
|
${CORE_DIR}/timing.h
|
|
)
|
|
|
|
target_compile_definitions(core PUBLIC _USE_MATH_DEFINES _GNU_SOURCE _CRT_SECURE_NO_WARNINGS)
|
|
target_compile_definitions(core PUBLIC GB_DISABLE_DEBUGGER GB_DISABLE_CHEATS GB_DISABLE_TIMEKEEPING GB_DISABLE_REWIND GB_VERSION="BizHawk")
|
|
target_compile_definitions(core PRIVATE GB_INTERNAL)
|
|
target_include_directories(core PUBLIC ${CORE_DIR})
|
|
|
|
if(MSVC)
|
|
target_include_directories(core PUBLIC ${CMAKE_SOURCE_DIR}/libsameboy/Windows)
|
|
endif()
|
|
|
|
add_library(
|
|
sameboy
|
|
SHARED
|
|
${CMAKE_SOURCE_DIR}/BizInterface.c
|
|
${CMAKE_SOURCE_DIR}/blip_buf.c
|
|
)
|
|
|
|
target_link_libraries(sameboy PRIVATE core)
|
|
|
|
add_custom_command(
|
|
TARGET sameboy
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND}
|
|
ARGS -E copy $<TARGET_FILE:sameboy> ${CMAKE_SOURCE_DIR}/../../Assets/dll
|
|
COMMAND ${CMAKE_COMMAND}
|
|
ARGS -E copy $<TARGET_FILE:sameboy> ${CMAKE_SOURCE_DIR}/../../output/dll
|
|
)
|
|
|
|
if(MSVC)
|
|
set(PDB_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../../output/dll)
|
|
endif()
|