@@ -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