X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightrec%2FCMakeLists.txt;h=9ca058ec635d31819f02936f2156add1d3c379c5;hb=refs%2Fheads%2Flibretro;hp=9ff58d62fb76a33316bbe047338d2c9b348c69dc;hpb=e557df126d39c05f5bda1f3845522762dd8da2ef;p=pcsx_rearmed.git diff --git a/deps/lightrec/CMakeLists.txt b/deps/lightrec/CMakeLists.txt index 9ff58d62..c3eb6f8f 100644 --- a/deps/lightrec/CMakeLists.txt +++ b/deps/lightrec/CMakeLists.txt @@ -1,34 +1,9 @@ -cmake_minimum_required(VERSION 3.0) -project(lightrec LANGUAGES C VERSION 0.5) - -set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") -if (NOT BUILD_SHARED_LIBS) - add_definitions(-DLIGHTREC_STATIC) -endif (NOT BUILD_SHARED_LIBS) - -if (NOT LOG_LEVEL) - set(LOG_LEVEL Info CACHE STRING "Log level" FORCE) - set_property(CACHE LOG_LEVEL PROPERTY STRINGS NoLog Error Warning Info Debug) -endif() - -if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING - "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." - FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel) -endif() - -string(TOUPPER ${LOG_LEVEL} LIGHTREC_LOG_LEVEL) -add_definitions(-DLOG_LEVEL=${LIGHTREC_LOG_LEVEL}_L) - -if (CMAKE_COMPILER_IS_GNUCC) - add_compile_options(-fvisibility=hidden) -endif() - -set(HAS_DEFAULT_ELM ${CMAKE_COMPILER_IS_GNUCC}) +cmake_minimum_required(VERSION 3.5) +project(lightrec LANGUAGES C VERSION 0.9) list(APPEND LIGHTREC_SOURCES blockcache.c + constprop.c emitter.c interpreter.c lightrec.c @@ -38,6 +13,7 @@ list(APPEND LIGHTREC_SOURCES ) list(APPEND LIGHTREC_HEADERS blockcache.h + constprop.h debug.h disassembler.h emitter.h @@ -50,11 +26,47 @@ list(APPEND LIGHTREC_HEADERS regcache.h ) +add_library(lightrec ${LIGHTREC_SOURCES} ${LIGHTREC_HEADERS}) +set_target_properties(lightrec PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} + PUBLIC_HEADER lightrec.h + C_STANDARD 11 + C_STANDARD_REQUIRED ON + C_EXTENSIONS OFF +) + +set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") +if (NOT BUILD_SHARED_LIBS) + target_compile_definitions(lightrec PRIVATE LIGHTREC_STATIC) +endif (NOT BUILD_SHARED_LIBS) + +if (NOT LOG_LEVEL) + set(LOG_LEVEL Info CACHE STRING "Log level" FORCE) + set_property(CACHE LOG_LEVEL PROPERTY STRINGS NoLog Error Warning Info Debug) +endif() + +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING + "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." + FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel) +endif() + +string(TOUPPER ${LOG_LEVEL} LIGHTREC_LOG_LEVEL) +target_compile_definitions(lightrec PRIVATE LOG_LEVEL=${LIGHTREC_LOG_LEVEL}_L) + +if (CMAKE_COMPILER_IS_GNUCC) + target_compile_options(lightrec PRIVATE -fvisibility=hidden) +endif() + +set(HAS_DEFAULT_ELM ${CMAKE_COMPILER_IS_GNUCC}) + option(ENABLE_FIRST_PASS "Run the interpreter as first-pass optimization" ON) option(ENABLE_THREADED_COMPILER "Enable threaded compiler" ON) if (ENABLE_THREADED_COMPILER) - list(APPEND LIGHTREC_SOURCES recompiler.c reaper.c) + target_sources(lightrec PRIVATE recompiler.c reaper.c) if (NOT ENABLE_FIRST_PASS) message(SEND_ERROR "Threaded compiler requires first-pass optimization") @@ -64,65 +76,55 @@ endif (ENABLE_THREADED_COMPILER) option(OPT_REMOVE_DIV_BY_ZERO_SEQ "(optimization) Remove div-by-zero check sequence" ON) option(OPT_REPLACE_MEMSET "(optimization) Detect and replace memset with host variant" ON) option(OPT_DETECT_IMPOSSIBLE_BRANCHES "(optimization) Detect impossible branches" ON) +option(OPT_HANDLE_LOAD_DELAYS "(optimization) Detect load delays" ON) option(OPT_TRANSFORM_OPS "(optimization) Transform opcodes" ON) option(OPT_LOCAL_BRANCHES "(optimization) Detect local branches" ON) option(OPT_SWITCH_DELAY_SLOTS "(optimization) Switch delay slots" ON) -option(OPT_FLAG_STORES "(optimization) Flag stores that don't require invalidation" ON) -option(OPT_FLAG_IO "(optimization) Flag I/O opcodes whose target is known" ON) +option(OPT_FLAG_IO "(optimization) Flag I/O opcodes when the target can be detected" ON) option(OPT_FLAG_MULT_DIV "(optimization) Flag MULT/DIV that only use one of HI/LO" ON) option(OPT_EARLY_UNLOAD "(optimization) Unload registers early" ON) +option(OPT_PRELOAD_PC "(optimization) Preload PC value into register" ON) -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -add_library(${PROJECT_NAME} ${LIGHTREC_SOURCES} ${LIGHTREC_HEADERS}) -set_target_properties(${PROJECT_NAME} PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR} - PUBLIC_HEADER lightrec.h - C_STANDARD 11 - C_STANDARD_REQUIRED ON - C_EXTENSIONS OFF -) +target_include_directories(lightrec PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) if (CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") - target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wno-parentheses) + target_compile_options(lightrec PRIVATE -Wall) endif() if (CMAKE_C_COMPILER_ID STREQUAL "Clang") - target_compile_options(${PROJECT_NAME} PRIVATE -Wno-initializer-overrides) + target_compile_options(lightrec PRIVATE -Wno-initializer-overrides) endif() -option(ENABLE_TINYMM "Enable optional libtinymm dependency" OFF) -if (ENABLE_TINYMM) - find_library(TINYMM_LIBRARIES tinymm REQUIRED) - find_path(TINYMM_INCLUDE_DIR tinymm.h REQUIRED) - - include_directories(${TINYMM_INCLUDE_DIR}) - target_link_libraries(${PROJECT_NAME} PRIVATE ${TINYMM_LIBRARIES}) -endif (ENABLE_TINYMM) - if (ENABLE_THREADED_COMPILER) - find_library(PTHREAD_LIBRARIES pthread REQUIRED) - find_path(PTHREAD_INCLUDE_DIR pthread.h REQUIRED) + include(FindThreads) - include_directories(${PTHREAD_INCLUDE_DIR}) - target_link_libraries(${PROJECT_NAME} PRIVATE ${PTHREAD_LIBRARIES}) + if (NOT CMAKE_USE_PTHREADS_INIT) + message(SEND_ERROR "Could not find compatible threads library") + endif() + + target_link_libraries(lightrec PUBLIC Threads::Threads) endif (ENABLE_THREADED_COMPILER) +option(ENABLE_CODE_BUFFER "Enable external code buffer" ON) +if (ENABLE_CODE_BUFFER) + target_sources(lightrec PRIVATE tlsf/tlsf.c) + target_include_directories(lightrec PRIVATE tlsf) +endif (ENABLE_CODE_BUFFER) + find_library(LIBLIGHTNING lightning REQUIRED) find_path(LIBLIGHTNING_INCLUDE_DIR lightning.h REQUIRED) -include_directories(${LIBLIGHTNING_INCLUDE_DIR}) -target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBLIGHTNING}) +target_include_directories(lightrec PUBLIC ${LIBLIGHTNING_INCLUDE_DIR}) +target_link_libraries(lightrec PUBLIC ${LIBLIGHTNING}) if (LOG_LEVEL STREQUAL Debug) set(ENABLE_DISASSEMBLER ON) - target_sources(${PROJECT_NAME} PRIVATE disassembler.c) + target_sources(lightrec PRIVATE disassembler.c) endif() configure_file(lightrec-config.h.cmakein lightrec-config.h @ONLY) include(GNUInstallDirs) -install(TARGETS ${PROJECT_NAME} +install(TARGETS lightrec ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}