-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
113 lines (88 loc) · 2.32 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
cmake_minimum_required(VERSION 3.15.0)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project("GameBoyMeBob")
set(GBMB_TARGET "GameBoyMeBob")
set(TEST_TARGET "GbmbTest")
# GoogleTest requires at least C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb")
set(BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
find_package(spdlog REQUIRED)
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
find_package(SDL2 REQUIRED)
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
find_package(X11 REQUIRED)
if (NOT X11_Xi_FOUND)
message(FATAL_ERROR "X11 Xi library is required")
endif ()
endif ()
set(IMGUI_SRCS
# Main imgui files
${BASE_DIR}/third-party/imgui/imgui.cpp
${BASE_DIR}/third-party/imgui/imgui_demo.cpp
${BASE_DIR}/third-party/imgui/imgui_draw.cpp
${BASE_DIR}/third-party/imgui/imgui_tables.cpp
${BASE_DIR}/third-party/imgui/imgui_widgets.cpp
# Imgui backend files
${BASE_DIR}/third-party/imgui/backends/imgui_impl_sdl2.cpp
${BASE_DIR}/third-party/imgui/backends/imgui_impl_opengl3.cpp
)
set(GBMB_SRCS
# Core files
${BASE_DIR}/src/cartridge.cc
${BASE_DIR}/src/cpu.cc
${BASE_DIR}/src/gb.cc
${BASE_DIR}/src/interrupts.cc
${BASE_DIR}/src/joypad.cc
${BASE_DIR}/src/mmu.cc
${BASE_DIR}/src/ppu.cc
${BASE_DIR}/src/registers.cc
${BASE_DIR}/src/serial.cc
${BASE_DIR}/src/timer.cc
## Memory Bank Controllers
${BASE_DIR}/src/mbc/mbc0.cc
${BASE_DIR}/src/mbc/mbc1.cc
# Debug files
# Util files
)
add_executable(${GBMB_TARGET}
${IMGUI_SRCS}
${GBMB_SRCS}
# Main ile
${BASE_DIR}/main.cc
)
target_include_directories(${GBMB_TARGET} PRIVATE
${BASE_DIR}/src
${BASE_DIR}/third-party/imgui
${BASE_DIR}/third-party/imgui/backends
${BASE_DIR}/third-party/imgui_club/imgui_memory_editor
${OPENGL_INCLUDE_DIRS}
${SDL2_INCLUDE_DIRS}
)
target_link_libraries(${GBMB_TARGET}
${SDL2_LIBRARIES}
${OPENGL_LIBRARIES}
spdlog::spdlog_header_only
-lzip
)
enable_testing()
find_package(GTest)
include(GoogleTest)
set(TEST_SRCS
${BASE_DIR}/tests/mem_test.cc
${BASE_DIR}/tests/cpu_test.cc
)
add_executable(${TEST_TARGET}
${GBMB_SRCS}
${TEST_SRCS}
)
target_include_directories(${TEST_TARGET} PRIVATE
${BASE_DIR}/src
)
target_link_libraries(${TEST_TARGET}
spdlog::spdlog_header_only
GTest::gtest_main
)
gtest_discover_tests(${TEST_TARGET})