@@ -3,13 +3,36 @@ set(CMAKE_CXX_STANDARD 14)
33set (CMAKE_C_STANDARD 99)
44project (parallel-rsp LANGUAGES CXX C)
55
6+
7+ set (NAME_PLUGIN_M64P "mupen64plus-rsp-parallel" )
8+
9+ include_directories (../mupen64plus-core/src/api)
10+ add_definitions (-DM64P_PLUGIN_API)
11+ add_definitions (-DPARALLEL_INTEGRATION)
12+
13+ # check for INTERPROCEDURAL_OPTIMIZATION support
14+ if ((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9))
15+ cmake_policy (SET CMP0069 NEW)
16+
17+ include (CheckIPOSupported)
18+ check_ipo_supported(RESULT ENABLE_IPO)
19+ if (ENABLE_IPO)
20+ message ("Interprocedural optimizations enabled" )
21+ endif (ENABLE_IPO)
22+ endif ()
23+
24+ if (ENABLE_IPO AND (CMAKE_BUILD_TYPE STREQUAL "Release" ))
25+ set (CMAKE_INTERPROCEDURAL_OPTIMIZATION ON )
26+ endif ()
27+
628if (CMAKE_COMPILER_IS_GNUCXX OR (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" ))
729 set (PARALLEL_RSP_CXX_FLAGS -Wall -Wextra -Wno-missing-field-initializers -Wno-empty-body -ffast-math -Wno-unused-parameter)
830elseif (MSVC )
931 set (PARALLEL_RSP_CXX_FLAGS /D_CRT_SECURE_NO_WARNINGS /wd4267 /wd4244 /wd4309 /wd4005 /MP /DNOMINMAX)
1032endif ()
1133
12- add_library (parallel-rsp STATIC
34+ add_library (${NAME_PLUGIN_M64P} SHARED
35+ parallel.cpp
1336 rsp/vfunctions.cpp
1437 rsp_jit.cpp rsp_jit.hpp
1538 jit_allocator.cpp jit_allocator.hpp
@@ -49,24 +72,15 @@ add_library(parallel-rsp STATIC
4972 arch/simd/rsp/vxor.h
5073 arch/simd/rsp/vmulm.h)
5174
52- option (PARALLEL_RSP_DEBUG_JIT "Enable the debug JIT." ON )
53-
54- if (PARALLEL_RSP_DEBUG_JIT)
55- if (ANDROID)
56- message ("Android does not support debug JIT. Disabling it." )
57- elseif (NOT WIN32 )
58- target_sources (parallel-rsp PRIVATE debug_rsp.cpp debug_rsp.hpp debug_jit.cpp debug_jit.hpp)
59- target_compile_definitions (parallel-rsp PUBLIC PARALLEL_RSP_DEBUG_JIT)
60- endif ()
61- endif ()
62-
63- target_include_directories (parallel-rsp PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
64- target_include_directories (parallel-rsp PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} /arch/simd/rsp)
65- target_compile_options (parallel-rsp PRIVATE ${PARALLEL_RSP_CXX_FLAGS} )
75+ set_target_properties (${NAME_PLUGIN_M64P} PROPERTIES PREFIX "" )
76+ target_include_directories (${NAME_PLUGIN_M64P} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
77+ target_include_directories (${NAME_PLUGIN_M64P} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} /arch/simd/rsp)
78+ target_include_directories (${NAME_PLUGIN_M64P} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} /api)
79+ target_compile_options (${NAME_PLUGIN_M64P} PRIVATE ${PARALLEL_RSP_CXX_FLAGS} )
6680
6781option (PARALLEL_RSP_BAKED_LIGHTNING "Use built-in Lightning." ON )
6882
69- target_compile_definitions (parallel-rsp PUBLIC PARALLEL_RSP_LIGHTNING)
83+ target_compile_definitions (${NAME_PLUGIN_M64P} PUBLIC PARALLEL_RSP_LIGHTNING)
7084if (PARALLEL_RSP_BAKED_LIGHTNING)
7185 add_library (lightning STATIC
7286 lightning/lib/jit_disasm.c
@@ -76,127 +90,12 @@ if (PARALLEL_RSP_BAKED_LIGHTNING)
7690 lightning/lib/jit_print.c
7791 lightning/lib/jit_size.c
7892 lightning/lib/lightning.c)
93+ set_property (TARGET lightning PROPERTY POSITION_INDEPENDENT_CODE ON )
7994 target_include_directories (lightning PUBLIC
8095 ${CMAKE_CURRENT_SOURCE_DIR} /lightning/include )
8196 if (WIN32 )
8297 target_sources (lightning PRIVATE win32 /mman/sys/mman.c)
8398 target_include_directories (lightning PRIVATE win32 /mman)
8499 endif ()
85100endif ()
86- target_link_libraries (parallel-rsp PUBLIC lightning)
87- target_compile_definitions (parallel-rsp PUBLIC DEBUG_JIT)
88-
89- if (NOT WIN32 )
90- target_link_libraries (parallel-rsp PRIVATE dl)
91- endif ()
92-
93- add_executable (rsp-runner main.cpp)
94- target_link_libraries (rsp-runner PRIVATE parallel-rsp)
95- target_compile_options (rsp-runner PRIVATE ${PARALLEL_RSP_CXX_FLAGS} )
96-
97- if (PARALLEL_RSP_DEBUG_JIT AND NOT WIN32 )
98- set_target_properties (rsp-runner PROPERTIES LINK_FLAGS "-rdynamic" )
99- endif ()
100-
101- option (PARALLEL_RSP_TESTS "Enable unit tests for Lightning CPU." ON )
102-
103- add_executable (rsp-vu-fuzzer rsp_vu_fuzzer.cpp)
104- target_link_libraries (rsp-vu-fuzzer PRIVATE parallel-rsp)
105- target_compile_options (rsp-vu-fuzzer PRIVATE ${PARALLEL_RSP_CXX_FLAGS} )
106-
107- if (PARALLEL_RSP_TESTS)
108- enable_testing ()
109-
110- if (ANDROID)
111- add_test (NAME rsp-vu-fuzz
112- COMMAND ${CMAKE_CURRENT_SOURCE_DIR} /android_fuzz_runner.sh
113- ${CMAKE_CURRENT_BINARY_DIR} /rsp-vu-fuzzer)
114- else ()
115- add_test (NAME rsp-vu-fuzz COMMAND $<TARGET_FILE:rsp-vu-fuzzer>)
116- endif ()
117- add_custom_target (rsp-tests ALL )
118-
119- add_custom_target (rsp-test -crt
120- COMMAND ${CMAKE_MAKE_PROGRAM} crt-obj -j1
121- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /debug-toolchain)
122-
123- function (rsp_add_test NAME )
124- add_custom_target (rsp-test -binary-${NAME}
125- COMMAND ${CMAKE_MAKE_PROGRAM} RSP_TEST=${NAME} -j1
126- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /debug-toolchain
127- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /debug-toolchain/${NAME} .s)
128- add_dependencies (rsp-test -binary-${NAME} rsp-test -crt)
129- add_dependencies (rsp-tests rsp-test -binary-${NAME} )
130-
131- if (ANDROID)
132- add_test (NAME rsp-test -${NAME}
133- COMMAND ${CMAKE_CURRENT_SOURCE_DIR} /android_test_runner.sh
134- ${CMAKE_CURRENT_BINARY_DIR} /rsp-runner
135- ${CMAKE_CURRENT_SOURCE_DIR} /debug-toolchain ${NAME} )
136- else ()
137- add_test (NAME rsp-test -${NAME}
138- COMMAND $<TARGET_FILE:rsp-runner>
139- ${CMAKE_CURRENT_SOURCE_DIR} /debug-toolchain/${NAME} .global .bin
140- ${CMAKE_CURRENT_SOURCE_DIR} /debug-toolchain/${NAME} .bin)
141- endif ()
142- endfunction ()
143-
144- rsp_add_test(sll)
145- rsp_add_test(srl)
146- rsp_add_test(sra)
147- rsp_add_test(sllv)
148- rsp_add_test(srlv)
149- rsp_add_test(srav)
150- rsp_add_test(add)
151- rsp_add_test(sub)
152- rsp_add_test(or )
153- rsp_add_test(and )
154- rsp_add_test(xor)
155- rsp_add_test(nor)
156- rsp_add_test(slt)
157- rsp_add_test(sltu)
158- rsp_add_test(addi)
159- rsp_add_test(slti)
160- rsp_add_test(sltiu)
161- rsp_add_test(andi)
162- rsp_add_test(ori)
163- rsp_add_test(xori)
164- rsp_add_test(lui)
165- rsp_add_test(lb)
166- rsp_add_test(lbu)
167- rsp_add_test(lh)
168- rsp_add_test(lhu)
169- rsp_add_test(lh-unaligned)
170- rsp_add_test(lhu-unaligned)
171- rsp_add_test(lw)
172- rsp_add_test(lw-unaligned)
173- rsp_add_test(sb)
174- rsp_add_test(sh)
175- rsp_add_test(sw)
176- rsp_add_test(sh-unaligned)
177- rsp_add_test(sw-unaligned)
178- rsp_add_test(beq-impossible-delay-slot-second-taken)
179- rsp_add_test(beq-impossible-delay-slot-first-taken)
180- #rsp_add_test(beq-impossible-delay-slot-both-taken) Hangs the reference implementation :D
181- rsp_add_test(bne)
182- rsp_add_test(blez)
183- rsp_add_test(bltz)
184- rsp_add_test(bltzal)
185- rsp_add_test(bgtz)
186- rsp_add_test(bgezal)
187- rsp_add_test(j)
188- rsp_add_test(jal)
189- rsp_add_test(jr)
190- rsp_add_test(jalr)
191- rsp_add_test(lw-unaligned-in-branch-delay)
192- rsp_add_test(delay-slot-before-break)
193- rsp_add_test(delay-slot-before-new-block)
194- rsp_add_test(delay-slot-before-new-block-illegal)
195- rsp_add_test(delay-slot-before-new-block-not -taken)
196- rsp_add_test(unconditional-delay-slot-before-break)
197- rsp_add_test(cop0)
198- rsp_add_test(cop2-basic)
199- rsp_add_test(cop2-ls)
200- rsp_add_test(cop2-vector)
201- rsp_add_test(bug-shl-into-branch)
202- endif ()
101+ target_link_libraries (${NAME_PLUGIN_M64P} PUBLIC lightning)
0 commit comments