From cb889ad36eb3dae44c4361b93b70d82c8d145de2 Mon Sep 17 00:00:00 2001 From: scribam Date: Tue, 5 May 2020 18:59:40 +0200 Subject: [PATCH 1/3] Use predefined macros to define HOST_CPU and HOST_OS --- core/build.h | 70 +++++++++++++++------------------------------------- 1 file changed, 20 insertions(+), 50 deletions(-) diff --git a/core/build.h b/core/build.h index 88404e667..906b6beaf 100755 --- a/core/build.h +++ b/core/build.h @@ -161,55 +161,24 @@ //automatic -#ifndef CMAKE_BUILD - -#if defined(_WIN32) && !defined(TARGET_WIN86) && !defined(TARGET_WIN64) - #if !defined(_M_AMD64) && !defined(__x86_64__) - #define TARGET_WIN86 - #else - #define TARGET_WIN64 - #endif +#if defined(__x86_64__) || defined(_M_X64) + #define HOST_CPU CPU_X64 +#elif defined(__i386__) || defined(_M_IX86) + #define HOST_CPU CPU_X86 +#elif defined(__arm__) || defined (_M_ARM) + #define HOST_CPU CPU_ARM +#elif defined(__aarch64__) || defined(_M_ARM64) + #define HOST_CPU CPU_ARM64 +#elif defined(__mips__) + #define HOST_CPU CPU_MIPS +#else + #define HOST_CPU CPU_GENERIC #endif -//Targets -#if defined(TARGET_WIN86) - #define HOST_OS OS_WINDOWS - #define HOST_CPU CPU_X86 -#elif defined(TARGET_WIN64) - #define HOST_OS OS_WINDOWS - #define HOST_CPU CPU_X64 -#elif defined(TARGET_PANDORA) +#if defined(__APPLE__) + #define HOST_OS OS_DARWIN +#elif defined(__unix__) #define HOST_OS OS_LINUX - #define HOST_CPU CPU_ARM -#elif defined(TARGET_LINUX_ARMELv7) - #define HOST_OS OS_LINUX - #define HOST_CPU CPU_ARM -#elif defined(TARGET_LINUX_ARMv8) - #define HOST_OS OS_LINUX - #define HOST_CPU CPU_ARM64 -#elif defined(TARGET_LINUX_x86) - #define HOST_OS OS_LINUX - #define HOST_CPU CPU_X86 -#elif defined(TARGET_LINUX_x64) - #define HOST_OS OS_LINUX - #define HOST_CPU CPU_X64 -#elif defined(TARGET_LINUX_MIPS) - #define HOST_OS OS_LINUX - #define HOST_CPU CPU_MIPS -#elif defined(TARGET_GCW0) - #define HOST_OS OS_LINUX - #define HOST_CPU CPU_MIPS -#elif defined(TARGET_IPHONE) - #define HOST_OS OS_DARWIN - #define HOST_CPU CPU_ARM -#elif defined(TARGET_OSX) - #define HOST_OS OS_DARWIN - #define HOST_CPU CPU_X86 -#elif defined(TARGET_OSX_X64) - #define HOST_OS OS_DARWIN - #define HOST_CPU CPU_X64 -#else - #error Invalid Target: TARGET_* not defined #endif #if defined(TARGET_NO_REC) @@ -230,9 +199,6 @@ #define FEAT_DSPREC DYNAREC_NONE #endif -#endif // !CMAKE_BUILD - - #if defined(TARGET_NO_NIXPROF) #define FEAT_HAS_NIXPROF 0 #endif @@ -244,7 +210,11 @@ //defaults #ifndef FEAT_SHREC - #define FEAT_SHREC DYNAREC_JIT + #if HOST_CPU == CPU_MIPS + #define FEAT_SHREC DYNAREC_NONE + #else + #define FEAT_SHREC DYNAREC_JIT + #endif #endif #ifndef FEAT_AREC From 2ee8ca37c0d0dd788f72fd8ceab7aa968021076d Mon Sep 17 00:00:00 2001 From: scribam Date: Tue, 5 May 2020 19:00:12 +0200 Subject: [PATCH 2/3] CMake refactoring --- CMakeLists.txt | 1123 +++++++++++++---- CMakeSettings.json | 220 ---- core/version.h.in | 2 +- shell/cmake/CMakeLists.txt | 198 --- shell/cmake/GetGitRevisionDescription.cmake | 168 --- .../cmake/GetGitRevisionDescription.cmake.in | 41 - shell/cmake/android.cmake | 101 -- shell/cmake/config.cmake | 382 ------ shell/cmake/devkitA64.cmake | 41 - shell/cmake/ps4sdk.cmake | 130 -- shell/cmake/toolchains/Linux-x86.cmake | 5 - 11 files changed, 847 insertions(+), 1564 deletions(-) delete mode 100644 CMakeSettings.json delete mode 100644 shell/cmake/CMakeLists.txt delete mode 100644 shell/cmake/GetGitRevisionDescription.cmake delete mode 100644 shell/cmake/GetGitRevisionDescription.cmake.in delete mode 100644 shell/cmake/android.cmake delete mode 100644 shell/cmake/config.cmake delete mode 100644 shell/cmake/devkitA64.cmake delete mode 100644 shell/cmake/ps4sdk.cmake delete mode 100644 shell/cmake/toolchains/Linux-x86.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 66101d83b..ef0ea6e72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,308 +1,877 @@ -cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) -set(TNAME reicast) - -project(${TNAME}) - -enable_language(ASM) -enable_language(ASM_MASM) - -set(DEBUG_CMAKE ON) - -set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - - -set(reicast_root_path "${CMAKE_CURRENT_SOURCE_DIR}") -set(reicast_core_path "${reicast_root_path}/core") -set(reicast_shell_path "${reicast_root_path}/shell") - -list(APPEND CMAKE_MODULE_PATH "${reicast_shell_path}/cmake") - - -include(GetGitRevisionDescription) -git_describe(GIT_VERSION --tags) -configure_file(${reicast_core_path}/version.h.in ${reicast_core_path}/version.h @ONLY) - - - - -## reicast build modules # -# - -set(reicast_SRCS "") - -include(config) # configure build settings, must be first - - - -### libdreamcast.cmake ######################################################################### - -set(d_core ${reicast_core_path}) - -file(GLOB_RECURSE hw_SRCS ${d_core}/hw/*.cpp ${d_core}/hw/*.h) - -file(GLOB cfg_SRCS ${d_core}/cfg/*.cpp ${d_core}/cfg/*.h) -file(GLOB rend_SRCS ${d_core}/rend/*.cpp ${d_core}/rend/*.h) -file(GLOB input_SRCS ${d_core}/input/*.cpp ${d_core}/input/*.h) -file(GLOB reios_SRCS ${d_core}/reios/*.cpp ${d_core}/reios/*.h) -file(GLOB imgread_SRCS ${d_core}/imgread/*.cpp ${d_core}/imgread/*.h) -file(GLOB profiler_SRCS ${d_core}/profiler/*.cpp ${d_core}/profiler/*.h) -file(GLOB archive_SRCS ${d_core}/archive/*.cpp ${d_core}/archive/*.h) - -#### option(rend) -file(GLOB gl4_SRCS ${d_core}/rend/gl4/*.cpp ${d_core}/rend/gl4/*.h) -file(GLOB gles_SRCS ${d_core}/rend/gles/*.cpp ${d_core}/rend/gles/*.h) - -set(core_SRCS - ${hw_SRCS} - ${cfg_SRCS} - ${rend_SRCS} - ${gl4_SRCS} - ${gles_SRCS} - ${input_SRCS} - ${reios_SRCS} - ${imgread_SRCS} - ${profiler_SRCS} - ${d_core}/archive/archive.cpp ${d_core}/archive/archive.h - ${d_core}/nullDC.cpp - ${d_core}/stdclass.cpp - ${d_core}/dispframe.cpp - ${d_core}/serialize.cpp -) - - -if(${BUILD_COMPILER} EQUAL ${COMPILER_GCC}) # Add Clang if NOT WIN32 *FIXME* - list(APPEND core_SRCS ${archive_SRCS}) +find_program(CCACHE_FOUND ccache) +if(CCACHE_FOUND) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) endif() -if(${FEAT_SHREC} EQUAL ${DYNAREC_JIT}) -# - if(${HOST_CPU} EQUAL ${CPU_X86}) - list(APPEND core_SRCS - ${d_core}/rec-x86/rec_x86_driver.cpp - ${d_core}/rec-x86/rec_x86_il.cpp - ${d_core}/rec-x86/rec_x86_asm.cpp # change for linux , rec_lin86_asm.S - ${d_core}/rec-x86/rec_x86_ngen.h - ) - elseif(${HOST_CPU} EQUAL ${CPU_ARM}) - list(APPEND core_SRCS - ${d_core}/rec-ARM/ngen_arm.S - ${d_core}/rec-ARM/rec_arm.cpp - ) - elseif(${HOST_CPU} EQUAL ${CPU_X64}) +option(ENABLE_CTEST "Enables unit tests" OFF) +option(ENABLE_OPROFILE "Enable OProfile" OFF) +option(TEST_AUTOMATION "Enable test automation" OFF) - ### FIXME: asm with cmake ninja+VC - if(${BUILD_COMPILER} EQUAL ${COMPILER_VC}) - list(APPEND core_SRCS ${d_core}/rec-x64/msvc.asm) - endif() +project(flycast) - list(APPEND core_SRCS ${d_core}/rec-x64/rec_x64.cpp ${d_core}/rec-x64/x64_regalloc.h) - - elseif(${HOST_CPU} EQUAL ${CPU_A64}) - list(APPEND core_SRCS ${d_core}/rec-ARM64/rec_arm64.cpp ${d_core}/rec-ARM64/arm64_regalloc.h) - - else() - message(" FEAT_SHREC==DYNAREC_JIT && HOST_CPU Unknown Default add arch or disable rec if not avail.") - error() - endif() -# -elseif(${FEAT_SHREC} EQUAL ${DYNAREC_CPP}) - list(APPEND core_SRCS ${d_core}/rec-cpp/rec_cpp.cpp) +if(ENABLE_CTEST) + include(CTest) endif() -### deps.cmake ################################################################################# - -set(d_deps ${reicast_core_path}/deps) -include_directories ("${d_deps}") -include_directories ("${d_deps}/picotcp/include") -include_directories ("${d_deps}/picotcp/modules") - -file(GLOB xbyak_H ${d_deps}/xbyak/*.h) # include headers into cmake target/project view - -file(GLOB chdr_SRCS ${d_deps}/chdr/*.c) -file(GLOB lzma_SRCS ${d_deps}/lzma/*.c) -file(GLOB lz_SRCS ${d_deps}/zlib/*.c) -file(GLOB lzip_SRCS ${d_deps}/libzip/*.c) -file(GLOB lelf_SRCS ${d_deps}/libelf/el*.cpp) -file(GLOB crypt_SRCS ${d_deps}/crypto/*.cpp) -file(GLOB imgui_SRCS ${d_deps}/imgui/*.cpp) -file(GLOB lws_SRCS ${d_deps}/libwebsocket/*.c) - -file(GLOB picoModS ${d_deps}/picotcp/modules/*.c) -file(GLOB picoStkS ${d_deps}/picotcp/stack/*.c) -set(pico_SRCS ${picoModS} ${picoStkS}) - -set(deps_SRCS - ${lz_SRCS} - ${lelf_SRCS} - ${chdr_SRCS} - ${crypt_SRCS} - ${imgui_SRCS} - ${d_deps}/xbrz/xbrz.cpp - ${d_deps}/dirent/dirent.c - ${d_deps}/xxhash/xxhash.c - ${d_deps}/chdpsr/cdipsr.cpp # sigh, this dir is named chdpsr for some reason ... - ${d_deps}/coreio/coreio.cpp -# ${d_deps}/ifaddrs/ifaddrs.c - ${xbyak_H} -) - -if(${BUILD_COMPILER} EQUAL ${COMPILER_GCC}) # Add Clang if NOT WIN32 *FIXME* - list(APPEND deps_SRCS - ${lzip_SRCS} - ${lzma_SRCS} - ${pico_SRCS} - ) - add_definitions(-D_7ZIP_ST -DCHD5_LZMA) -endif() - -### libosd.cmake ################################################################################ - - -set(d_aout ${reicast_core_path}/oslib) - -include_directories ("${d_core}/khronos") - -## I really should just glob all of the dirs and ;shrug; if guards don't do it all ## - -set(osd_SRCS "") - -list(APPEND osd_SRCS ${d_aout}/audiostream.cpp) - -if (${HOST_OS} EQUAL ${OS_WINDOWS}) - - list(APPEND osd_SRCS ${d_core}/windows/winmain.cpp) - list(APPEND osd_SRCS ${d_core}/windows/win_vmem.cpp) - list(APPEND osd_SRCS ${d_aout}/audiobackend_directsound.cpp) - - - link_libraries(dsound.lib winmm.lib xinput.lib wsock32.lib opengl32.lib) - - -elseif (${HOST_OS} EQUAL ${OS_LINUX} OR ${HOST_OS} EQUAL ${OS_ANDROID}) - - list(APPEND osd_SRCS - ${d_core}/linux/common.cpp - ${d_core}/linux/context.cpp - ${d_core}/linux/nixprof/nixprof.cpp - - ${d_aout}/audiobackend_oss.cpp # add option - ) # todo: configure linux audio lib options - - if(NOT ANDROID) - list(APPEND osd_SRCS - ${d_core}/linux-dist/x11.cpp - ${d_core}/linux-dist/main.cpp - ${d_core}/linux-dist/evdev.cpp) - - add_definitions(-DSUPPORT_X11) ## don't use GLES ? - link_libraries(X11) - else() - list(APPEND osd_SRCS - .//android-studio/reicast/src/main/jni/src/Android.cpp - .//android-studio/reicast/src/main/jni/src/utils.cpp - # .//android-studio/reicast/src/main/jni/src/XperiaPlay.c - ) - endif() # ANDROID - - add_definitions(-DGLES -DUSE_EVDEV) - - link_libraries(pthread dl rt asound Xext GLESv2 EGL) - -elseif(${HOST_OS} EQUAL ${OS_DARWIN}) -# - list(APPEND objc_SRCS - ./shell/apple/emulator-osx/emulator-osx/osx-main.mm - ./shell/apple/emulator-osx/emulator-osx/AppDelegate.swift - ./shell/apple/emulator-osx/emulator-osx/EmuGLView.swift - ) - - set_source_files_properties(${objc_SRCS} PROPERTIES COMPILE_FLAGS "-x objective-c++") - - list(APPEND osd_SRCS ${objc_SRCS} - ${d_osd}/linux/common.cpp - ${d_osd}/linux/context.cpp - ${d_osd}/audiobackend/audiobackend_coreaudio.cpp - # if NOT USE_SWIFT / ObjC - #${d_osd}/apple/osx_osd.cpp - ) - +if(MSVC) + enable_language(ASM_MASM) else() -# - message("OS Unhandled") - error() -# + enable_language(ASM) endif() - - -## - -include_directories ("${reicast_core_path}") - - - - -set(reicast_SRCS ${core_SRCS} ${deps_SRCS} ${osd_SRCS}) - -add_executable(${TNAME}${binSuffix} ${reicast_SRCS} ${deps_SRCS}) - - - - - if(APPLE) - enable_language(Swift) - set_property(TARGET ${TNAME} PROPERTY XCODE_ATTRIBUTE_SWIFT_OBJC_BRIDGING_HEADER "./shell/apple/emulator-osx/emulator-osx/emulator-osx-Bridging-Header.h") - - target_link_libraries(${TNAME} -# "-framework Cocoa" -# "-framework AppKit" - "-framework CoreData" - "-framework CoreAudio" - "-framework AudioUnit" - "-framework AudioToolbox" - "-framework Foundation" -) - -#### OSX Notes, when not using xcode you have to make app bundle, edit plist and copy, convert MainMenu.xib to nib and copy, -#null@devpc:~$ /Users/null/Documents/projects/reicast-emulator/bin/RelWithDebInfo/Reicast.app/Contents/MacOS/reicast ; exit; -#2019-03-18 14:28:44.842 reicast[11468:131797] Unknown class _TtC12emulator_osx9EmuGLView in Interface Builder file at path /Users/null/Documents/projects/reicast-emulator/bin/RelWithDebInfo/Reicast.app/Contents/Resources/MainMenu.nib. -#2019-03-18 14:28:44.842 reicast[11468:131797] Unknown class _TtC12emulator_osx11AppDelegate in Interface Builder file at path /Users/null/Documents/projects/reicast-emulator/bin/RelWithDebInfo/Reicast.app/Contents/Resources/MainMenu.nib. -#2019-03-18 14:28:44.860 reicast[11468:131797] Failed to connect (window) outlet from (NSObject) to (NSWindow): missing setter or instance variable -# - -endif() #APPLE - - -if(DEBUG_CMAKE) - message(" ------------------------------------------------") - message(" - HOST_OS: ${HOST_OS} - HOST_CPU: ${HOST_CPU} ") - message(" - host_os: ${host_os} - host_arch: ${host_arch} ") - message(" ------------------------------------------------") - message(" C Flags: ${CMAKE_C_FLAGS} ") - message(" CXX Flags: ${CMAKE_CXX_FLAGS} ") - message(" LINK_DIRS: ${LINK_DIRECTORIES}") - message("LINK_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}") - message(" ------------------------------------------------\n") + set(CMAKE_Swift_LANGUAGE_VERSION 5.0) + enable_language(Swift) endif() +find_package(Git QUIET) +if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --always + OUTPUT_VARIABLE GIT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + OUTPUT_VARIABLE GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() +string(TIMESTAMP BUILD_TIMESTAMP UTC) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/core/version.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/core/version.h" @ONLY) +if(ANDROID) + add_library(${PROJECT_NAME} SHARED core/nullDC.cpp) +else() + add_executable(${PROJECT_NAME} MACOSX_BUNDLE core/nullDC.cpp) +endif() +target_compile_features(${PROJECT_NAME} PRIVATE c_std_11 cxx_std_11) +set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF) +target_compile_definitions(${PROJECT_NAME} PRIVATE + $<$:GL_SILENCE_DEPRECATION> + $<$:_CRT_NONSTDC_NO_WARNINGS> + $<$:_CRT_SECURE_NO_WARNINGS> + $<$:_USE_MATH_DEFINES> + $<$:NOMINMAX> + $<$:TEST_AUTOMATION> + ENABLE_MODEM) +target_include_directories(${PROJECT_NAME} PRIVATE core core/deps core/deps/stb core/deps/xbyak core/khronos) +find_package(OpenMP) +if(OpenMP_CXX_FOUND) + target_link_libraries(${PROJECT_NAME} PRIVATE OpenMP::OpenMP_CXX) + if(ANDROID_NDK_MAJOR VERSION_GREATER_EQUAL 21) + target_link_libraries(${PROJECT_NAME} PRIVATE -static-openmp) + endif() +else() + target_compile_definitions(${PROJECT_NAME} PRIVATE TARGET_NO_OPENMP) +endif() +option(BUILD_SHARED_LIBS "Build shared library" OFF) +set(XXHASH_BUILD_XXHSUM OFF CACHE BOOL "Build the xxhsum binary") +add_subdirectory(core/deps/xxHash/cmake_unofficial) +target_link_libraries(${PROJECT_NAME} PRIVATE xxHash::xxhash) +option(BUILD_SHARED_LIBS "Build shared library" OFF) +add_subdirectory(core/deps/glm) +target_link_libraries(${PROJECT_NAME} PRIVATE glm::glm) +add_subdirectory(core/deps/glslang) +target_link_libraries(${PROJECT_NAME} PRIVATE SPIRV) +find_package(ALSA QUIET) +if(ALSA_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_ALSA) + target_include_directories(${PROJECT_NAME} PRIVATE ${ALSA_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${ALSA_LIBRARIES}) +endif() +if(MINGW) + set(SDL2_FOUND TRUE) + add_library(SDL2::SDL2-static STATIC IMPORTED) + set_target_properties(SDL2::SDL2-static PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/core/deps/SDL2-2.0.12/x86_64-w64-mingw32/include" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/core/deps/SDL2-2.0.12/x86_64-w64-mingw32/lib/libSDL2.a" + INTERFACE_LINK_LIBRARIES "-L${CMAKE_CURRENT_SOURCE_DIR}/core/deps/SDL2-2.0.12/x86_64-w64-mingw32/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--no-undefined -Wl,--dynamicbase -Wl,--nxcompat -Wl,--high-entropy-va -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid -static-libgcc") +else() + find_package(SDL2 QUIET) +endif() +if(SDL2_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_SDL USE_SDL_AUDIO) + target_sources(${PROJECT_NAME} PRIVATE core/sdl/sdl.cpp core/sdl/sdl.h core/sdl/sdl_gamepad.h core/sdl/sdl_keyboard.h) + if(TARGET SDL2::SDL2) + target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2) + elseif(MINGW AND TARGET SDL2::SDL2-static) + target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2-static) + else() + target_include_directories(${PROJECT_NAME} PRIVATE ${SDL2_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${SDL2_LIBRARIES}) + endif() +endif() +find_package(ZLIB QUIET) +if(TARGET ZLIB::ZLIB) + target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB) +else() + set(SKIP_INSTALL_ALL ON) + add_subdirectory(core/deps/zlib) + target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/core/deps/zlib" "${CMAKE_CURRENT_BINARY_DIR}/core/deps/zlib") + target_link_libraries(${PROJECT_NAME} PRIVATE zlibstatic) +endif() +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(AO ao) + if(AO_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_LIBAO) + target_include_directories(${PROJECT_NAME} PRIVATE ${AO_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${AO_LIBRARIES}) + endif() + pkg_search_module(FLAC flac) + if(FLAC_FOUND) + target_include_directories(${PROJECT_NAME} PRIVATE ${FLAC_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${FLAC_LIBRARIES}) + endif() + pkg_search_module(LIBEVDEV libevdev) + if(LIBEVDEV_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_EVDEV) + target_include_directories(${PROJECT_NAME} PRIVATE ${LIBEVDEV_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBEVDEV_LIBRARIES}) + pkg_search_module(LIBUDEV libudev) + if(LIBUDEV_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_UDEV) + target_include_directories(${PROJECT_NAME} PRIVATE ${LIBUDEV_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBUDEV_LIBRARIES}) + endif() + endif() + pkg_search_module(LIBPULSE libpulse) + if(LIBPULSE_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_PULSEAUDIO) + target_include_directories(${PROJECT_NAME} PRIVATE ${LIBPULSE_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBPULSE_LIBRARIES}) + endif() + + pkg_search_module(LIBZIP libzip) + if(LIBZIP_FOUND) + target_include_directories(${PROJECT_NAME} PRIVATE ${LIBZIP_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBZIP_LIBRARIES}) + endif() + + if(ENABLE_OPROFILE) + target_compile_definitions(${PROJECT_NAME} PRIVATE DYNA_OPROF) + target_link_libraries(${PROJECT_NAME} PRIVATE opagent) + endif() +endif() + +if(UNIX AND NOT APPLE AND NOT ANDROID) + set(OpenGL_GL_PREFERENCE LEGACY) + find_package(OpenGL REQUIRED) + target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL) + + find_package(Threads REQUIRED) + target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) + + if(NOT SDL2_FOUND) + find_package(X11 REQUIRED) + if(X11_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE SUPPORT_X11) + target_include_directories(${PROJECT_NAME} PRIVATE ${X11_INCLUDE_DIR}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${X11_LIBRARIES}) + endif() + endif() + + target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS} rt) +endif() + +target_sources(${PROJECT_NAME} PRIVATE + core/deps/chdpsr/cdipsr.cpp + core/deps/chdpsr/cdipsr.h) + +target_compile_definitions(${PROJECT_NAME} PRIVATE CHD5_FLAC CHD5_LZMA) +target_sources(${PROJECT_NAME} PRIVATE + core/deps/chdr/bitstream.c + core/deps/chdr/bitstream.h + core/deps/chdr/cdrom.c + core/deps/chdr/cdrom.h + core/deps/chdr/chd.c + core/deps/chdr/chd.h + core/deps/chdr/coretypes.h + core/deps/chdr/flac.c + core/deps/chdr/flac.h + core/deps/chdr/huffman.c + core/deps/chdr/huffman.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/deps/coreio/coreio.cpp + core/deps/coreio/coreio.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/deps/crypto/md5.cpp + core/deps/crypto/md5.h + core/deps/crypto/sha1.cpp + core/deps/crypto/sha1.h + core/deps/crypto/sha256.cpp + core/deps/crypto/sha256.h) + +if(NOT FLAC_FOUND) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_CONFIG_H $<$:HAVE_FSEEKO>) + target_include_directories(${PROJECT_NAME} PRIVATE core/deps/flac/include core/deps/flac/src/libFLAC/include) + target_sources(${PROJECT_NAME} PRIVATE + core/deps/flac/src/libFLAC/bitmath.c + core/deps/flac/src/libFLAC/bitreader.c + core/deps/flac/src/libFLAC/cpu.c + core/deps/flac/src/libFLAC/crc.c + core/deps/flac/src/libFLAC/fixed.c + core/deps/flac/src/libFLAC/fixed_intrin_sse2.c + core/deps/flac/src/libFLAC/fixed_intrin_ssse3.c + core/deps/flac/src/libFLAC/float.c + core/deps/flac/src/libFLAC/format.c + core/deps/flac/src/libFLAC/lpc.c + core/deps/flac/src/libFLAC/lpc_intrin_avx2.c + core/deps/flac/src/libFLAC/lpc_intrin_sse.c + core/deps/flac/src/libFLAC/lpc_intrin_sse2.c + core/deps/flac/src/libFLAC/lpc_intrin_sse41.c + core/deps/flac/src/libFLAC/md5.c + core/deps/flac/src/libFLAC/memory.c + core/deps/flac/src/libFLAC/metadata_iterators.c + core/deps/flac/src/libFLAC/metadata_object.c + core/deps/flac/src/libFLAC/stream_decoder.c + core/deps/flac/src/libFLAC/window.c + core/deps/flac/src/libFLAC/windows_unicode_filenames.c) +endif() + +if(MSVC) + target_include_directories(${PROJECT_NAME} PRIVATE core/deps/dirent) +else() + target_include_directories(${PROJECT_NAME} PRIVATE core/deps/picotcp/include core/deps/picotcp/modules) + target_sources(${PROJECT_NAME} PRIVATE + core/deps/picotcp/include/arch/pico_arm9.h + core/deps/picotcp/include/arch/pico_atsamd21j18.h + core/deps/picotcp/include/arch/pico_avr.h + core/deps/picotcp/include/arch/pico_cortex_m.h + core/deps/picotcp/include/arch/pico_dos.h + core/deps/picotcp/include/arch/pico_esp8266.h + core/deps/picotcp/include/arch/pico_generic_gcc.h + core/deps/picotcp/include/arch/pico_linux.h + core/deps/picotcp/include/arch/pico_mbed.h + core/deps/picotcp/include/arch/pico_msp430.h + core/deps/picotcp/include/arch/pico_msvc.h + core/deps/picotcp/include/arch/pico_none.h + core/deps/picotcp/include/arch/pico_pic24.h + core/deps/picotcp/include/arch/pico_pic32.h + core/deps/picotcp/include/arch/pico_posix.h + core/deps/picotcp/include/heap.h + core/deps/picotcp/include/pico_addressing.h + core/deps/picotcp/include/pico_config.h + core/deps/picotcp/include/pico_constants.h + core/deps/picotcp/include/pico_defines.h + core/deps/picotcp/include/pico_defines_msvc.h + core/deps/picotcp/include/pico_device.h + core/deps/picotcp/include/pico_eth.h + core/deps/picotcp/include/pico_frame.h + core/deps/picotcp/include/pico_md5.h + core/deps/picotcp/include/pico_module_eth.h + core/deps/picotcp/include/pico_protocol.h + core/deps/picotcp/include/pico_queue.h + core/deps/picotcp/include/pico_socket.h + core/deps/picotcp/include/pico_socket_multicast.h + core/deps/picotcp/include/pico_stack.h + core/deps/picotcp/include/pico_tree.h + core/deps/picotcp/modules/pico_arp.c + core/deps/picotcp/modules/pico_dev_ppp.c + core/deps/picotcp/modules/pico_dns_client.c + core/deps/picotcp/modules/pico_dns_common.c + core/deps/picotcp/modules/pico_ethernet.c + core/deps/picotcp/modules/pico_fragments.c + core/deps/picotcp/modules/pico_ipv4.c + core/deps/picotcp/modules/pico_socket_tcp.c + core/deps/picotcp/modules/pico_socket_udp.c + core/deps/picotcp/modules/pico_strings.c + core/deps/picotcp/modules/pico_tcp.c + core/deps/picotcp/modules/pico_udp.c + core/deps/picotcp/stack/pico_device.c + core/deps/picotcp/stack/pico_frame.c + core/deps/picotcp/stack/pico_md5.c + core/deps/picotcp/stack/pico_protocol.c + core/deps/picotcp/stack/pico_socket.c + core/deps/picotcp/stack/pico_socket_multicast.c + core/deps/picotcp/stack/pico_stack.c + core/deps/picotcp/stack/pico_tree.c) + + if(NOT LIBZIP_FOUND) + target_include_directories(${PROJECT_NAME} PRIVATE core/deps/libzip) + target_sources(${PROJECT_NAME} PRIVATE + core/deps/libzip/config.h + core/deps/libzip/mkstemp.c + core/deps/libzip/zip.h + core/deps/libzip/zip_add.c + core/deps/libzip/zip_add_dir.c + core/deps/libzip/zip_close.c + core/deps/libzip/zip_delete.c + core/deps/libzip/zip_dirent.c + core/deps/libzip/zip_entry_free.c + core/deps/libzip/zip_entry_new.c + core/deps/libzip/zip_error.c + core/deps/libzip/zip_error_clear.c + core/deps/libzip/zip_error_get.c + core/deps/libzip/zip_error_get_sys_type.c + core/deps/libzip/zip_error_strerror.c + core/deps/libzip/zip_error_to_str.c + core/deps/libzip/zip_err_str.c + core/deps/libzip/zip_fclose.c + core/deps/libzip/zip_file_error_clear.c + core/deps/libzip/zip_file_error_get.c + core/deps/libzip/zip_file_get_offset.c + core/deps/libzip/zip_filerange_crc.c + core/deps/libzip/zip_file_strerror.c + core/deps/libzip/zip_fopen.c + core/deps/libzip/zip_fopen_index.c + core/deps/libzip/zip_fread.c + core/deps/libzip/zip_free.c + core/deps/libzip/zip_get_archive_comment.c + core/deps/libzip/zip_get_archive_flag.c + core/deps/libzip/zip_get_file_comment.c + core/deps/libzip/zip_get_name.c + core/deps/libzip/zip_get_num_files.c + core/deps/libzip/zip_memdup.c + core/deps/libzip/zip_name_locate.c + core/deps/libzip/zip_new.c + core/deps/libzip/zip_open.c + core/deps/libzip/zip_rename.c + core/deps/libzip/zip_replace.c + core/deps/libzip/zip_set_archive_comment.c + core/deps/libzip/zip_set_archive_flag.c + core/deps/libzip/zip_set_file_comment.c + core/deps/libzip/zip_set_name.c + core/deps/libzip/zip_source_buffer.c + core/deps/libzip/zip_source_file.c + core/deps/libzip/zip_source_filep.c + core/deps/libzip/zip_source_free.c + core/deps/libzip/zip_source_function.c + core/deps/libzip/zip_source_zip.c + core/deps/libzip/zip_stat.c + core/deps/libzip/zip_stat_index.c + core/deps/libzip/zip_stat_init.c + core/deps/libzip/zip_strerror.c + core/deps/libzip/zip_unchange_all.c + core/deps/libzip/zip_unchange_archive.c + core/deps/libzip/zip_unchange.c + core/deps/libzip/zip_unchange_data.c + core/deps/libzip/zipint.h) + endif() +endif() + +target_compile_definitions(${PROJECT_NAME} PRIVATE _7ZIP_ST) +target_sources(${PROJECT_NAME} PRIVATE core/deps/lzma/7zArcIn.c core/deps/lzma/7zBuf.c core/deps/lzma/7zCrc.c core/deps/lzma/7zCrcOpt.c core/deps/lzma/7zDec.c core/deps/lzma/7zFile.c core/deps/lzma/7zStream.c core/deps/lzma/Alloc.c core/deps/lzma/Bcj2.c core/deps/lzma/Bra86.c core/deps/lzma/Bra.c core/deps/lzma/BraIA64.c core/deps/lzma/CpuArch.c core/deps/lzma/Delta.c core/deps/lzma/LzFind.c core/deps/lzma/Lzma2Dec.c core/deps/lzma/Lzma86Dec.c core/deps/lzma/Lzma86Enc.c core/deps/lzma/LzmaDec.c core/deps/lzma/LzmaEnc.c core/deps/lzma/LzmaLib.c core/deps/lzma/Sort.c) +target_sources(${PROJECT_NAME} PRIVATE core/deps/libelf/elf32.cpp core/deps/libelf/elf64.cpp core/deps/libelf/elf.cpp) +target_sources(${PROJECT_NAME} PRIVATE core/deps/imgui/imgui.cpp core/deps/imgui/imgui_demo.cpp core/deps/imgui/imgui_draw.cpp core/deps/imgui/imgui_widgets.cpp) +target_sources(${PROJECT_NAME} PRIVATE core/deps/xbrz/xbrz.cpp) + +target_sources(${PROJECT_NAME} PRIVATE + core/archive/7zArchive.cpp + core/archive/7zArchive.h + core/archive/archive.cpp + core/archive/archive.h) +if(NOT MSVC) + target_sources(${PROJECT_NAME} PRIVATE + core/archive/ZipArchive.cpp + core/archive/ZipArchive.h) +endif() + +target_sources(${PROJECT_NAME} PRIVATE + core/arm_emitter/arm_coding.h + core/arm_emitter/arm_disasm.h + core/arm_emitter/arm_emitter.h + core/arm_emitter/arm_registers.h + core/arm_emitter/E_Branches.h + core/arm_emitter/E_DataOp.h + core/arm_emitter/E_Extend.h + core/arm_emitter/E_LoadStore.h + core/arm_emitter/E_Misc.h + core/arm_emitter/E_Multiply.h + core/arm_emitter/E_Parallel.h + core/arm_emitter/E_Special.h + core/arm_emitter/E_Status.h + core/arm_emitter/E_VDataOp.h + core/arm_emitter/E_VLoadStore.h + core/arm_emitter/E_VRegXfer.h + core/arm_emitter/H_Branches.h + core/arm_emitter/H_fp.h + core/arm_emitter/H_LoadStore.h + core/arm_emitter/H_psuedo.h + core/arm_emitter/H_state.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/cfg/cfg.cpp + core/cfg/cfg.h + core/cfg/cl.cpp + core/cfg/ini.cpp + core/cfg/ini.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/emitter/generated_class_names.h + core/emitter/generated_class_names_string.h + core/emitter/generated_descriptors.h + core/emitter/generated_indexes.h + core/emitter/x86_emitter.cpp + core/emitter/x86_emitter.h + core/emitter/x86_matcher.h + core/emitter/x86_op_classes.h + core/emitter/x86_op_encoder.h + core/emitter/x86_op_table.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/hw/aica/aica.cpp + core/hw/aica/aica.h + core/hw/aica/aica_if.cpp + core/hw/aica/aica_if.h + core/hw/aica/aica_mem.cpp + core/hw/aica/aica_mem.h + core/hw/aica/dsp.cpp + core/hw/aica/dsp.h + core/hw/aica/dsp_arm64.cpp + core/hw/aica/dsp_interp.cpp + core/hw/aica/dsp_x64.cpp + core/hw/aica/sgc_if.cpp + core/hw/aica/sgc_if.h + core/hw/arm7/arm64.cpp + core/hw/arm7/arm7.cpp + core/hw/arm7/arm7.h + core/hw/arm7/arm_mem.cpp + core/hw/arm7/arm_mem.h + core/hw/arm7/arm-new.h + core/hw/arm7/vbaARM.cpp + core/hw/arm7/virt_arm.cpp + core/hw/arm7/virt_arm.h + core/hw/flashrom/flashrom.h + core/hw/gdrom/gdrom_if.h + core/hw/gdrom/gdrom_response.cpp + core/hw/gdrom/gdromv3.cpp + core/hw/gdrom/gdromv3.h + core/hw/holly/holly_intc.cpp + core/hw/holly/holly_intc.h + core/hw/holly/sb.cpp + core/hw/holly/sb.h + core/hw/holly/sb_mem.cpp + core/hw/holly/sb_mem.h + core/hw/maple/maple_cfg.cpp + core/hw/maple/maple_cfg.h + core/hw/maple/maple_devs.cpp + core/hw/maple/maple_devs.h + core/hw/maple/maple_helper.cpp + core/hw/maple/maple_helper.h + core/hw/maple/maple_if.cpp + core/hw/maple/maple_if.h + core/hw/mem/vmem32.cpp + core/hw/mem/vmem32.h + core/hw/mem/_vmem.cpp + core/hw/mem/_vmem.h + core/hw/modem/dns.cpp + core/hw/modem/modem.cpp + core/hw/modem/modem.h + core/hw/modem/modem_regs.h + core/hw/modem/picoppp.cpp + core/hw/modem/picoppp.h + core/hw/naomi/awave_regs.h + core/hw/naomi/awcartridge.cpp + core/hw/naomi/awcartridge.h + core/hw/naomi/decrypt.cpp + core/hw/naomi/decrypt.h + core/hw/naomi/gdcartridge.cpp + core/hw/naomi/gdcartridge.h + core/hw/naomi/m1cartridge.cpp + core/hw/naomi/m1cartridge.h + core/hw/naomi/m4cartridge.cpp + core/hw/naomi/m4cartridge.h + core/hw/naomi/naomi_cart.cpp + core/hw/naomi/naomi_cart.h + core/hw/naomi/naomi_flashrom.cpp + core/hw/naomi/naomi_flashrom.h + core/hw/naomi/naomi_m3comm.cpp + core/hw/naomi/naomi_m3comm.h + core/hw/naomi/naomi.cpp + core/hw/naomi/naomi.h + core/hw/naomi/naomi_regs.h + core/hw/naomi/naomi_roms.h + core/hw/naomi/naomi_roms_input.h + core/hw/pvr/drkPvr.cpp + core/hw/pvr/helper_classes.h + core/hw/pvr/pvr_mem.cpp + core/hw/pvr/pvr_mem.h + core/hw/pvr/pvr_regs.cpp + core/hw/pvr/pvr_regs.h + core/hw/pvr/pvr_sb_regs.cpp + core/hw/pvr/pvr_sb_regs.h + core/hw/pvr/Renderer_if.cpp + core/hw/pvr/Renderer_if.h + core/hw/pvr/spg.cpp + core/hw/pvr/spg.h + core/hw/pvr/ta_const_df.h + core/hw/pvr/ta.cpp + core/hw/pvr/ta_ctx.cpp + core/hw/pvr/ta_ctx.h + core/hw/pvr/ta.h + core/hw/pvr/ta_structs.h + core/hw/pvr/ta_vtx.cpp + core/hw/sh4/dyna + core/hw/sh4/dyna/blockmanager.cpp + core/hw/sh4/dyna/blockmanager.h + core/hw/sh4/dyna/decoder.cpp + core/hw/sh4/dyna/decoder.h + core/hw/sh4/dyna/decoder_opcodes.h + core/hw/sh4/dyna/driver.cpp + core/hw/sh4/dyna/ngen.h + core/hw/sh4/dyna/rec_config.h + core/hw/sh4/dyna/regalloc.h + core/hw/sh4/dyna/shil_canonical.h + core/hw/sh4/dyna/shil.cpp + core/hw/sh4/dyna/shil.h + core/hw/sh4/dyna/ssa.cpp + core/hw/sh4/dyna/ssa.h + core/hw/sh4/dyna/ssa_regalloc.h + core/hw/sh4/fsca-table.h + core/hw/sh4/interpr + core/hw/sh4/interpr/sh4_fpu.cpp + core/hw/sh4/interpr/sh4_interpreter.cpp + core/hw/sh4/interpr/sh4_opcodes.cpp + core/hw/sh4/interpr/sh4_opcodes.h + core/hw/sh4/modules + core/hw/sh4/modules/bsc.cpp + core/hw/sh4/modules/ccn.cpp + core/hw/sh4/modules/ccn.h + core/hw/sh4/modules/cpg.cpp + core/hw/sh4/modules/dmac.cpp + core/hw/sh4/modules/dmac.h + core/hw/sh4/modules/fastmmu.cpp + core/hw/sh4/modules/intc.cpp + core/hw/sh4/modules/mmu.cpp + core/hw/sh4/modules/mmu.h + core/hw/sh4/modules/mmu_impl.h + core/hw/sh4/modules/modules.h + core/hw/sh4/modules/rtc.cpp + core/hw/sh4/modules/serial.cpp + core/hw/sh4/modules/tmu.cpp + core/hw/sh4/modules/ubc.cpp + core/hw/sh4/modules/wince.h + core/hw/sh4/sh4_core.h + core/hw/sh4/sh4_core_regs.cpp + core/hw/sh4/sh4_if.h + core/hw/sh4/sh4_interpreter.h + core/hw/sh4/sh4_interrupts.cpp + core/hw/sh4/sh4_interrupts.h + core/hw/sh4/sh4_mem.cpp + core/hw/sh4/sh4_mem.h + core/hw/sh4/sh4_mmr.cpp + core/hw/sh4/sh4_mmr.h + core/hw/sh4/sh4_opcode.h + core/hw/sh4/sh4_opcode_list.cpp + core/hw/sh4/sh4_opcode_list.h + core/hw/sh4/sh4_rom.cpp + core/hw/sh4/sh4_rom.h + core/hw/sh4/sh4_sched.cpp + core/hw/sh4/sh4_sched.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/imgread/cdi.cpp + core/imgread/chd.cpp + core/imgread/common.cpp + core/imgread/common.h + core/imgread/cue.cpp + core/imgread/gd_driver.h + core/imgread/gdi.cpp + core/imgread/ImgReader.cpp + core/imgread/ioctl.cpp + core/imgread/SCSIDEFS.H) + +target_sources(${PROJECT_NAME} PRIVATE + core/input/gamepad.h + core/input/gamepad_device.cpp + core/input/gamepad_device.h + core/input/keyboard_device.cpp + core/input/keyboard_device.h + core/input/mapping.cpp + core/input/mapping.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/linux/nixprof/nixprof.cpp + core/linux/common.cpp) + +if(NOT WIN32) + target_sources(${PROJECT_NAME} PRIVATE + core/linux/context.cpp + core/linux/context.h + core/linux/posix_vmem.cpp) +endif() + +target_sources(${PROJECT_NAME} PRIVATE + core/linux-dist/dispmanx.cpp + core/linux-dist/dispmanx.h + core/linux-dist/evdev.cpp + core/linux-dist/evdev.h + core/linux-dist/icon.h + core/linux-dist/joystick.cpp + core/linux-dist/joystick.h + core/linux-dist/x11.cpp + core/linux-dist/x11.h + core/linux-dist/x11_keyboard.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/log/BitSet.h + core/log/ConsoleListener.h + core/log/ConsoleListenerDroid.cpp + core/log/ConsoleListenerNix.cpp + core/log/ConsoleListenerWin.cpp + core/log/Log.h + core/log/LogManager.cpp + core/log/LogManager.h + core/log/StringUtil.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/network/naomi_network.cpp + core/network/naomi_network.h + core/network/net_platform.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/oslib/audiobackend_alsa.cpp + core/oslib/audiobackend_coreaudio.cpp + core/oslib/audiobackend_directsound.cpp + core/oslib/audiobackend_libao.cpp + core/oslib/audiobackend_null.cpp + core/oslib/audiobackend_omx.cpp + core/oslib/audiobackend_oss.cpp + core/oslib/audiobackend_pulseaudio.cpp + core/oslib/audiobackend_sdl2.cpp + core/oslib/audiostream.cpp + core/oslib/audiostream.h + core/oslib/oslib.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/profiler/profiler.cpp + core/profiler/profiler.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/rec-cpp/rec_cpp.cpp) + +target_sources(${PROJECT_NAME} PRIVATE + core/reios/descrambl.cpp + core/reios/descrambl.h + core/reios/font.h + core/reios/gdrom_hle.cpp + core/reios/gdrom_hle.h + core/reios/iso9660.h + core/reios/reios.cpp + core/reios/reios.h + core/reios/reios_elf.cpp + core/reios/reios_elf.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/wsi/context.h + core/wsi/egl.cpp + core/wsi/egl.h + core/wsi/gl4funcs.cpp + core/wsi/gl_context.cpp + core/wsi/gl_context.h + core/wsi/osx.cpp + core/wsi/osx.h + core/wsi/sdl.cpp + core/wsi/sdl.h + core/wsi/switcher.cpp + core/wsi/wgl.cpp + core/wsi/wgl.h + core/wsi/xgl.cpp + core/wsi/xgl.h) + +if(NOT APPLE) + target_sources(${PROJECT_NAME} PRIVATE + core/wsi/gl32funcs.c + core/wsi/gl32funcs.h) +endif() + +target_sources(${PROJECT_NAME} PRIVATE + core/build.h + core/cheats.cpp + core/cheats.h + core/dispframe.cpp + core/emulator.h + core/serialize.cpp + core/stdclass.cpp + core/stdclass.h + core/types.h) + +target_sources(${PROJECT_NAME} PRIVATE + core/rend/gles/glcache.h + core/rend/gles/gldraw.cpp + core/rend/gles/gles.cpp + core/rend/gles/gles.h + core/rend/gles/gltex.cpp + core/rend/gles/imgui_impl_opengl3.cpp + core/rend/gles/imgui_impl_opengl3.h + core/rend/CustomTexture.cpp + core/rend/CustomTexture.h + core/rend/game_scanner.h + core/rend/gui.cpp + core/rend/gui.h + core/rend/gui_android.cpp + core/rend/gui_android.h + core/rend/gui_util.cpp + core/rend/gui_util.h + core/rend/osd.cpp + core/rend/osd.h + core/rend/sorter.cpp + core/rend/sorter.h + core/rend/TexCache.cpp + core/rend/TexCache.h) + +if(NOT APPLE AND NOT ANDROID) + target_sources(${PROJECT_NAME} PRIVATE core/rend/gl4/abuffer.cpp core/rend/gl4/gl4.h core/rend/gl4/gldraw.cpp core/rend/gl4/gles.cpp core/rend/gl4/gltex.cpp) +endif() + +if(NOT APPLE) + if(ANDROID) + set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_ANDROID_KHR) + elseif(X11_FOUND) + set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_XLIB_KHR) + elseif(WIN32) + set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_WIN32_KHR) + endif() + + set(VOLK_PULL_IN_VULKAN OFF) + add_subdirectory(core/deps/volk) + target_include_directories(volk PRIVATE core/khronos) + target_link_libraries(${PROJECT_NAME} PRIVATE volk) + + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_VULKAN) + target_sources(${PROJECT_NAME} PRIVATE + core/rend/vulkan/oit/oit_buffer.h + core/rend/vulkan/oit/oit_drawer.cpp + core/rend/vulkan/oit/oit_drawer.h + core/rend/vulkan/oit/oit_pipeline.cpp + core/rend/vulkan/oit/oit_pipeline.h + core/rend/vulkan/oit/oit_renderer.cpp + core/rend/vulkan/oit/oit_renderpass.cpp + core/rend/vulkan/oit/oit_renderpass.h + core/rend/vulkan/oit/oit_shaders.cpp + core/rend/vulkan/oit/oit_shaders.h + core/rend/vulkan/buffer.cpp + core/rend/vulkan/buffer.h + core/rend/vulkan/commandpool.h + core/rend/vulkan/compiler.cpp + core/rend/vulkan/compiler.h + core/rend/vulkan/drawer.cpp + core/rend/vulkan/drawer.h + core/rend/vulkan/imgui_impl_vulkan.cpp + core/rend/vulkan/imgui_impl_vulkan.h + core/rend/vulkan/pipeline.cpp + core/rend/vulkan/pipeline.h + core/rend/vulkan/quad.cpp + core/rend/vulkan/quad.h + core/rend/vulkan/shaders.cpp + core/rend/vulkan/shaders.h + core/rend/vulkan/texture.cpp + core/rend/vulkan/texture.h + core/rend/vulkan/utils.h + core/rend/vulkan/vk_mem_alloc.h + core/rend/vulkan/vmallocator.cpp + core/rend/vulkan/vmallocator.h + core/rend/vulkan/vmu.cpp + core/rend/vulkan/vmu.h + core/rend/vulkan/vulkan_context.cpp + core/rend/vulkan/vulkan_context.h + core/rend/vulkan/vulkan.h + core/rend/vulkan/vulkan_renderer.cpp) +endif() + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") + target_sources(${PROJECT_NAME} PRIVATE core/rec-ARM/ngen_arm.S core/rec-ARM/rec_arm.cpp) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)") + target_include_directories(${PROJECT_NAME} PRIVATE core/deps/vixl) + target_sources(${PROJECT_NAME} PRIVATE core/deps/vixl/aarch64/abi-aarch64.h core/deps/vixl/aarch64/assembler-aarch64.cc core/deps/vixl/aarch64/assembler-aarch64.h core/deps/vixl/aarch64/constants-aarch64.h core/deps/vixl/aarch64/cpu-aarch64.cc core/deps/vixl/aarch64/cpu-aarch64.h core/deps/vixl/aarch64/cpu-features-auditor-aarch64.cc core/deps/vixl/aarch64/cpu-features-auditor-aarch64.h core/deps/vixl/aarch64/decoder-aarch64.cc core/deps/vixl/aarch64/decoder-aarch64.h core/deps/vixl/aarch64/disasm-aarch64.cc core/deps/vixl/aarch64/disasm-aarch64.h core/deps/vixl/aarch64/instructions-aarch64.cc core/deps/vixl/aarch64/instructions-aarch64.h core/deps/vixl/aarch64/instrument-aarch64.cc core/deps/vixl/aarch64/instrument-aarch64.h core/deps/vixl/aarch64/logic-aarch64.cc core/deps/vixl/aarch64/macro-assembler-aarch64.cc core/deps/vixl/aarch64/macro-assembler-aarch64.h core/deps/vixl/aarch64/operands-aarch64.cc core/deps/vixl/aarch64/operands-aarch64.h core/deps/vixl/aarch64/pointer-auth-aarch64.cc core/deps/vixl/aarch64/simulator-aarch64.cc core/deps/vixl/aarch64/simulator-aarch64.h core/deps/vixl/aarch64/simulator-constants-aarch64.h core/deps/vixl/assembler-base-vixl.h core/deps/vixl/code-buffer-vixl.cc core/deps/vixl/code-buffer-vixl.h core/deps/vixl/code-generation-scopes-vixl.h core/deps/vixl/compiler-intrinsics-vixl.cc core/deps/vixl/compiler-intrinsics-vixl.h core/deps/vixl/cpu-features.cc core/deps/vixl/cpu-features.h core/deps/vixl/globals-vixl.h core/deps/vixl/invalset-vixl.h core/deps/vixl/macro-assembler-interface.h core/deps/vixl/platform-vixl.h core/deps/vixl/pool-manager.h core/deps/vixl/pool-manager-impl.h core/deps/vixl/utils-vixl.cc core/deps/vixl/utils-vixl.h) + target_sources(${PROJECT_NAME} PRIVATE core/rec-ARM64/rec_arm64.cpp core/rec-ARM64/arm64_regalloc.h) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|x86_64.*|AMD64.*") + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + target_sources(${PROJECT_NAME} PRIVATE core/rec-x86/rec_x86_driver.cpp core/rec-x86/rec_x86_il.cpp core/rec-x86/rec_x86_asm.cpp core/rec-x86/rec_x86_ngen.h) + if(UNIX AND NOT APPLE) + target_sources(${PROJECT_NAME} PRIVATE core/rec-x86/rec_lin86_asm.S) + endif() + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + target_sources(${PROJECT_NAME} PRIVATE core/rec-x64/rec_x64.cpp core/rec-x64/x64_regalloc.h) + if(MSVC) + target_sources(${PROJECT_NAME} PRIVATE core/rec-x64/msvc.asm) + else() + set_source_files_properties(core/rec-x64/rec_x64.cpp PROPERTIES COMPILE_FLAGS -fno-operator-names) + set_source_files_properties(core/hw/aica/dsp_x64.cpp PROPERTIES COMPILE_FLAGS -fno-operator-names) + endif() + endif() +endif() + +if(ANDROID) + target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3) + + target_sources(${PROJECT_NAME} PRIVATE + shell/android-studio/reicast/src/main/jni/src/Android.cpp + shell/android-studio/reicast/src/main/jni/src/utils.cpp) + + target_link_libraries(${PROJECT_NAME} PRIVATE android EGL GLESv2 log) +elseif(APPLE) + target_sources(${PROJECT_NAME} PRIVATE + shell/apple/emulator-osx/emulator-osx/AppDelegate.swift + shell/apple/emulator-osx/emulator-osx/EmuGLView.swift + shell/apple/emulator-osx/emulator-osx/osx-main.mm + shell/apple/emulator-osx/emulator-osx/osx_gamepad.h + shell/apple/emulator-osx/emulator-osx/osx_keyboard.h) + + set_target_properties(${PROJECT_NAME} PROPERTIES + MACOSX_BUNDLE_EXECUTABLE_NAME "Flycast" + MACOSX_BUNDLE_INFO_STRING "" + MACOSX_BUNDLE_ICON_FILE "AppIcon" + MACOSX_BUNDLE_GUI_IDENTIFIER "com.reicast.Flycast" + MACOSX_BUNDLE_LONG_VERSION_STRING "" + MACOSX_BUNDLE_BUNDLE_NAME "Flycast" + MACOSX_BUNDLE_SHORT_VERSION_STRING "1.0" + MACOSX_BUNDLE_BUNDLE_VERSION "1" + MACOSX_BUNDLE_COPYRIGHT "Copyright © 2019 reicast contributors. All rights reserved." + XCODE_ATTRIBUTE_SWIFT_OBJC_BRIDGING_HEADER "shell/apple/emulator-osx/emulator-osx/emulator-osx-Bridging-Header.h" + ) + + find_library(AUDIO_UNIT_LIBRARY AudioUnit) + find_library(FOUNDATION_LIBRARY Foundation) + + target_link_libraries(${PROJECT_NAME} PRIVATE ${AUDIO_UNIT_LIBRARY} ${FOUNDATION_LIBRARY}) +elseif(UNIX) + if(NOT BUILD_TESTING) + target_sources(${PROJECT_NAME} PRIVATE + core/linux-dist/main.cpp) + endif() +elseif(WIN32) + target_sources(${PROJECT_NAME} PRIVATE + core/windows/win_keyboard.h + core/windows/win_vmem.cpp + core/windows/winmain.cpp + core/windows/xinput_gamepad.h + shell/windows/reicast.rc) + + target_link_libraries(${PROJECT_NAME} PRIVATE dsound opengl32 winmm ws2_32 wsock32 xinput9_1_0) +endif() + +if(BUILD_TESTING) + target_sources(${PROJECT_NAME} PRIVATE + core/deps/gtest/src/gtest-all.cc + core/deps/gtest/src/gtest_main.cc) + + target_sources(${PROJECT_NAME} PRIVATE + tests/src/test_stubs.cpp + tests/src/serialize_test.cpp) +endif() diff --git a/CMakeSettings.json b/CMakeSettings.json deleted file mode 100644 index 7fbe9b101..000000000 --- a/CMakeSettings.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "environments": [ - { - "environment": "toolchain.generic", - "TOOLCHAIN_FILE": "ps4sdk.cmake" - } - ], - "configurations": [ - { - "name": "win-x86-Debug", - "generator": "Ninja", - "description": "TemplateDescription_Localize_x86Debug", - "configurationType": "Debug", - "inheritEnvironments": [ - "msvc_x86" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "", - "buildCommandArgs": "-v", - "ctestCommandArgs": "" - }, - { - "name": "win-x86-Release", - "generator": "Ninja", - "description": "TemplateDescription_Localize_x86Release", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "msvc_x86" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "", - "buildCommandArgs": "-v", - "ctestCommandArgs": "" - }, - { - "name": "win-x64-Debug", - "generator": "Ninja", - "description": "TemplateDescription_Localize_x64Debug", - "configurationType": "Debug", - "inheritEnvironments": [ - "msvc_x64_x64" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "-DNINJA=1", - "buildCommandArgs": "-v", - "ctestCommandArgs": "" - }, - { - "name": "win-x64-Release", - "generator": "Ninja", - "description": "TemplateDescription_Localize_x64Release", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "msvc_x64_x64" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "-DNINJA=1", - "buildCommandArgs": "-v", - "ctestCommandArgs": "" - }, - { - "name": "win-x64-Clang-RelWithDebInfo", - "generator": "Ninja", - "description": "TemplateDescription_Localize_x64Release", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "msvc_x64_x64" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "", - "buildCommandArgs": "-v", - "ctestCommandArgs": "", - "variables": [ - { - "name": "CMAKE_C_COMPILER", - "value": "clang-cl.exe" - }, - { - "name": "CMAKE_CXX_COMPILER", - "value": "clang-cl.exe" - } - ] - }, - - // Console SDK's - { - "name": "PS4 SDK", - "generator": "Ninja", - "description": "TemplateDescription_Localize_PS4SDK", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "toolchain.generic" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "-DCMAKE_TOOLCHAIN_FILE=${projectDir}\\cmake\\ps4sdk.cmake", - "buildCommandArgs": "-v", - "ctestCommandArgs": "" - }, - { - "name": "NSW SDK", - "generator": "Ninja", - "description": "TemplateDescription_Localize_PS4SDK", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "toolchain.generic" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "-DCMAKE_TOOLCHAIN_FILE=${projectDir}\\cmake\\devkitA64.cmake", - "buildCommandArgs": "-v", - "ctestCommandArgs": "" - }, - - // UWP and VS Gen (temp?) - { - "name": "uwp-x64-Release", - "generator": "Visual Studio 15 2017 Win64", - "description": "TemplateDescription_Localize_x64Release", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "msvc_x64_x64" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "win-x64-MSBuild-Release", - "generator": "Visual Studio 15 2017 Win64", - "description": "TemplateDescription_Localize_x64Release", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "msvc_x64_x64" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "environments": [ - { - //"MINGW64_ROOT": "C:\\msys64\\mingw64", - "BIN_ROOT": "${env.MINGW64_ROOT}\\bin", - "FLAVOR": "x86_64-w64-mingw32", - "TOOLSET_VERSION": "7.3.0", - "PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}", - "INCLUDE": "${env.INCLUDE};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR}", - "environment": "mingw_64" - } - ], - "name": "Mingw64-Release", - "generator": "Ninja", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ - "mingw_64" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "", - "buildCommandArgs": "-v", - "ctestCommandArgs": "", - "intelliSenseMode": "linux-gcc-x64", - "variables": [ - { - "name": "CMAKE_C_COMPILER", - "value": "${env.BIN_ROOT}\\gcc.exe" - }, - { - "name": "CMAKE_CXX_COMPILER", - "value": "${env.BIN_ROOT}\\g++.exe" - } - ] - }, - { - "environments": [ - { - //"MINGW64_ROOT": "C:\\msys64\\mingw64", - "BIN_ROOT": "${env.MINGW64_ROOT}\\bin", - "FLAVOR": "x86_64-w64-mingw32", - "TOOLSET_VERSION": "7.3.0", - "PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}", - "INCLUDE": "${env.INCLUDE};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR}", - "environment": "mingw_64" - } - ], - "name": "Mingw64-Debug", - "generator": "Ninja", - "configurationType": "Debug", - "inheritEnvironments": [ - "mingw_64" - ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\build\\${name}\\install", - "cmakeCommandArgs": "", - "buildCommandArgs": "-v", - "ctestCommandArgs": "", - "intelliSenseMode": "linux-gcc-x64", - "variables": [ - { - "name": "CMAKE_C_COMPILER", - "value": "${env.BIN_ROOT}\\gcc.exe" - }, - { - "name": "CMAKE_CXX_COMPILER", - "value": "${env.BIN_ROOT}\\g++.exe" - } - ] - } - ] -} \ No newline at end of file diff --git a/core/version.h.in b/core/version.h.in index 81a831a05..1a6e14a77 100644 --- a/core/version.h.in +++ b/core/version.h.in @@ -5,4 +5,4 @@ #define REICAST_VERSION "@GIT_VERSION@" #define GIT_HASH "@GIT_HASH@" -#define BUILD_DATE __DATE__ \ No newline at end of file +#define BUILD_DATE "@BUILD_TIMESTAMP@" \ No newline at end of file diff --git a/shell/cmake/CMakeLists.txt b/shell/cmake/CMakeLists.txt deleted file mode 100644 index f95327b3e..000000000 --- a/shell/cmake/CMakeLists.txt +++ /dev/null @@ -1,198 +0,0 @@ -# A cmake file (currently only working on Linux). -# Currently not doing library detection because it's a pain. - -cmake_minimum_required (VERSION 2.6) -project(reicast) - -enable_language(C) -enable_language(CXX) -enable_language(ASM) - -set(base ../..) -function(add_directory dir) - file(GLOB _f ${base}/${dir}/*.h ${base}/${dir}/*.c ${base}/${dir}/*.cpp ${base}/${dir}/*.hpp ${base}/${dir}/*.S) - set(source ${source} ${_f} PARENT_SCOPE) -endfunction() - -# Options -option(USE_SDL "Use SDL" OFF) -option(USE_OSS "Use OSS" ON) -option(USE_ALSA "Use ALSA" ON) -option(USE_LIBAO "Use LibAO" OFF) -option(USE_GLES "Use GL ES" OFF) -option(USE_PULSEAUDIO "Use PulseAudio" OFF) -option(USE_REND "Use some rendering" ON) -option(USE_EVDEV "Use EVDEV" ON) -option(USE_JOYSTICK "Use Joystick" ON) - -# Flags -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -fno-rtti -fno-operator-names") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frename-registers -fno-strict-aliasing -fsingle-precision-constant") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math -ftree-vectorize") -if("${CMAKE_BUILD_TYPE}" STREQUAL Release OR "${CMAKE_BUILD_TYPE}" STREQUAL RelWithDebInfo) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections -Wl,-O3 -Wl,--sort-common") - # TODO, -Map,$(notdir $@).map -endif() - -if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64") - set(arch "x86_64") -elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686") - set(arch "x86") -else() - set(arch "${CMAKE_SYSTEM_PROCESSOR}") -endif() - -add_definitions(-DUSES_HOMEDIR) -add_definitions(-DTARGET_NO_AREC) - -if(WINDOWS) - add_definitions(-DTARGET_WIN86) -elseif("${CMAKE_SYSTEM_NAME}" STREQUAL Linux) - if("${arch}" STREQUAL x86) - add_definitions(-DTARGET_LINUX_x86) - elseif("${arch}" STREQUAL x86_64) - add_definitions(-DTARGET_LINUX_x64) - elseif("${arch}" STREQUAL arm) - add_definitions(-DTARGET_LINUX_ARMELv7) - elseif("${arch}" STREQUAL mips) - add_definitions(-DTARGET_LINUX_MIPS) - else() - message(FATAL_ERROR "Unknown processor") - endif() -else() - message(FATAL_ERROR "Unknown target") - # TODO, TARGET_GCW0 - # TODO, TARGET_IPHONE - # TODO, TARGET_PANDORA -endif() - -# TODO, Android -# TODO, Pandora - -# Temp stuff: -# TODO: -frename-registers -fno-strict-aliasing -fsingle-precision-constant -ffast-math -ftree-vectorize -# TODO: -fno-exceptions -fno-rtti -# TODO: -fno-exceptions -fno-rtti -std=gnu++11 - -include_directories(${base}/deps) -include_directories(${base}/core) -include_directories(${base}/core/khronos/) -include_directories(${base}/core/deps/stb) - -add_directory(core/cfg/) -add_directory(core/hw/aica) -add_directory(core/hw/arm7) -add_directory(core/hw/flashrom) -add_directory(core/hw/gdrom) -add_directory(core/hw/holly) -add_directory(core/hw/maple) -add_directory(core/hw/mem) -add_directory(core/hw/pvr) -add_directory(core/hw/sh4) -add_directory(core/hw/sh4/dyna) -add_directory(core/hw/sh4/modules) -add_directory(core/hw/sh4/interpr/) -add_directory(core/profiler) -add_directory(core/oslib) -add_directory(core/arm_emitter) -add_directory(core/rend) -add_directory(core/reios) -add_directory(core/imgread) -add_directory(core/deps/libelf) -add_directory(core) -add_directory(core/deps/chdr) -add_directory(core/deps/coreio) -add_directory(core/deps/crypto) -add_directory(core/deps/chdpsr) -add_directory(core/deps/stb) -# add_directory(core/khronos/GL3) - -# Core stuff: - -list(APPEND libs GL z) - -if(NOT WINDOWS AND NOT APPLE) - add_definitions(-DSUPPORT_X11) -endif() - -if("${CMAKE_SYSTEM_NAME}" STREQUAL Linux) - # TODO, do some proper detection for this - list(APPEND libs m rt dl pthread X11) - if(USE_ALSA) - add_definitions(-DUSE_ALSA) - list(APPEND libs asound) - endif() -endif() - -# Processor-specific recompiler: - -if("${arch}" STREQUAL x86) - add_directory(core/rec-x86) - add_directory(core/emitter) -elseif("${arch}" STREQUAL x86_64) - add_directory(core/rec-x64) -elseif("${ARCH}" STREQUAL arm) - add_directory(core/rec-ARM) -endif() - -# Audio backends: - -if(UNIX AND USE_OSS) - add_definitions(-DUSE_OSS) -endif() - -if(USE_PULSEAUDIO) - add_definitions(-DUSE_PULSEAUDIO) - list(APPEND libs pulse-simple) -endif() - -if(USE_LIBAO) - add_definitions(-DUSE_LIBAO) - list(APPEND libs ao) -endif() - -# Graphic stuffs: - -if(USE_REND) - add_directory(core/rend/gles) -else() - add_directory(core/rend/norend) -endif() - -if(USE_GLES) - add_definitions(-DGLES) - list(APPEND libs EGL GLESv2) -else() - list(APPEND libs dl GL) -endif() - -if(USE_SDL) - list(APPEND source core/sdl/main.cpp) -elseif("${CMAKE_SYSTEM_NAME}" STREQUAL Linux) - add_directory(core/linux-dist) -endif() - -if(WINDOWS) - add_directory(core/rend/d3d11) - add_directory(core/rend/norend) -elseif("${CMAKE_SYSTEM_NAME}" STREQUAL Linux) - add_directory(core/linux) - add_directory(core/linux/nixprof) -else() - message(FATAL_ERROR "Which OS?") -endif() - -# Optional features - -if(USE_EVDEV) - add_definitions(-DUSE_EVDEV) -endif() - -if(USE_JOYSTICK) - add_definitions(-DUSE_JOYSTICK) -endif() - -# Executable - -add_executable(reicast ${source}) -target_link_libraries(reicast ${libs}) diff --git a/shell/cmake/GetGitRevisionDescription.cmake b/shell/cmake/GetGitRevisionDescription.cmake deleted file mode 100644 index 8ab03bc5f..000000000 --- a/shell/cmake/GetGitRevisionDescription.cmake +++ /dev/null @@ -1,168 +0,0 @@ -# - Returns a version string from Git -# -# These functions force a re-configure on each git commit so that you can -# trust the values of the variables in your build system. -# -# get_git_head_revision( [ ...]) -# -# Returns the refspec and sha hash of the current head revision -# -# git_describe( [ ...]) -# -# Returns the results of git describe on the source tree, and adjusting -# the output so that it tests false if an error occurs. -# -# git_get_exact_tag( [ ...]) -# -# Returns the results of git describe --exact-match on the source tree, -# and adjusting the output so that it tests false if there was no exact -# matching tag. -# -# git_local_changes() -# -# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes. -# Uses the return code of "git diff-index --quiet HEAD --". -# Does not regard untracked files. -# -# Requires CMake 2.6 or newer (uses the 'function' command) -# -# Original Author: -# 2009-2010 Ryan Pavlik -# http://academic.cleardefinition.com -# Iowa State University HCI Graduate Program/VRAC -# -# Copyright Iowa State University 2009-2010. -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -if(__get_git_revision_description) - return() -endif() -set(__get_git_revision_description YES) - -# We must run the following at "include" time, not at function call time, -# to find the path to this module rather than the path to a calling list file -get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) - -function(get_git_head_revision _refspecvar _hashvar) - set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") - set(GIT_DIR "${GIT_PARENT_DIR}/.git") - while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories - set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") - get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) - if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) - # We have reached the root directory, we are not in git - set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) - set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) - return() - endif() - set(GIT_DIR "${GIT_PARENT_DIR}/.git") - endwhile() - # check if this is a submodule - if(NOT IS_DIRECTORY ${GIT_DIR}) - file(READ ${GIT_DIR} submodule) - string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule}) - get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) - get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) - endif() - set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") - if(NOT EXISTS "${GIT_DATA}") - file(MAKE_DIRECTORY "${GIT_DATA}") - endif() - - if(NOT EXISTS "${GIT_DIR}/HEAD") - return() - endif() - set(HEAD_FILE "${GIT_DATA}/HEAD") - configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY) - - configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" - "${GIT_DATA}/grabRef.cmake" - @ONLY) - include("${GIT_DATA}/grabRef.cmake") - - set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE) - set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE) -endfunction() - -function(git_describe _var) - if(NOT GIT_FOUND) - find_package(Git QUIET) - endif() - get_git_head_revision(refspec hash) - if(NOT GIT_FOUND) - set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) - return() - endif() - if(NOT hash) - set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) - return() - endif() - - # TODO sanitize - #if((${ARGN}" MATCHES "&&") OR - # (ARGN MATCHES "||") OR - # (ARGN MATCHES "\\;")) - # message("Please report the following error to the project!") - # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") - #endif() - - #message(STATUS "Arguments to execute_process: ${ARGN}") - - execute_process(COMMAND - "${GIT_EXECUTABLE}" - describe - ${hash} - ${ARGN} - WORKING_DIRECTORY - "${CMAKE_CURRENT_SOURCE_DIR}" - RESULT_VARIABLE - res - OUTPUT_VARIABLE - out - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(NOT res EQUAL 0) - set(out "${out}-${res}-NOTFOUND") - endif() - - set(${_var} "${out}" PARENT_SCOPE) -endfunction() - -function(git_get_exact_tag _var) - git_describe(out --exact-match ${ARGN}) - set(${_var} "${out}" PARENT_SCOPE) -endfunction() - -function(git_local_changes _var) - if(NOT GIT_FOUND) - find_package(Git QUIET) - endif() - get_git_head_revision(refspec hash) - if(NOT GIT_FOUND) - set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) - return() - endif() - if(NOT hash) - set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) - return() - endif() - - execute_process(COMMAND - "${GIT_EXECUTABLE}" - diff-index --quiet HEAD -- - WORKING_DIRECTORY - "${CMAKE_CURRENT_SOURCE_DIR}" - RESULT_VARIABLE - res - OUTPUT_VARIABLE - out - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(res EQUAL 0) - set(${_var} "CLEAN" PARENT_SCOPE) - else() - set(${_var} "DIRTY" PARENT_SCOPE) - endif() -endfunction() diff --git a/shell/cmake/GetGitRevisionDescription.cmake.in b/shell/cmake/GetGitRevisionDescription.cmake.in deleted file mode 100644 index 6d8b708ef..000000000 --- a/shell/cmake/GetGitRevisionDescription.cmake.in +++ /dev/null @@ -1,41 +0,0 @@ -# -# Internal file for GetGitRevisionDescription.cmake -# -# Requires CMake 2.6 or newer (uses the 'function' command) -# -# Original Author: -# 2009-2010 Ryan Pavlik -# http://academic.cleardefinition.com -# Iowa State University HCI Graduate Program/VRAC -# -# Copyright Iowa State University 2009-2010. -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -set(HEAD_HASH) - -file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) - -string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) -if(HEAD_CONTENTS MATCHES "ref") - # named branch - string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") - if(EXISTS "@GIT_DIR@/${HEAD_REF}") - configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) - else() - configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY) - file(READ "@GIT_DATA@/packed-refs" PACKED_REFS) - if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") - set(HEAD_HASH "${CMAKE_MATCH_1}") - endif() - endif() -else() - # detached HEAD - configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) -endif() - -if(NOT HEAD_HASH) - file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) - string(STRIP "${HEAD_HASH}" HEAD_HASH) -endif() diff --git a/shell/cmake/android.cmake b/shell/cmake/android.cmake deleted file mode 100644 index 366fcb043..000000000 --- a/shell/cmake/android.cmake +++ /dev/null @@ -1,101 +0,0 @@ -## android.cmake -# - - - -function(TestPathNDK ndkPath) -# - file(TO_CMAKE_PATH "${ndkPath}" testPath) - - if(NOT NDK AND EXISTS "${testPath}") - if(EXISTS "${testPath}/ndk-bundle") - set(NDK ${testPath}/ndk-bundle PARENT_SCOPE) - elseif(EXISTS "${testPath}/sysroot") - set(NDK ${testPath} PARENT_SCOPE) - endif() - endif() -# -endfunction(TestPathNDK) - - -TestPathNDK("$ENV{ANDROID_HOME}") -TestPathNDK("$ENV{NDK}") -TestPathNDK("$ENV{NDK_ROOT}") - -if(NOT NDK) - message("Failed to find NDK !") -endif() - - - - - - -### option for ARM || ARM64 ? HOST isn't useful it's a cross ... - -#set(CMAKE_SYSTEM_PROCESSOR aarch64) - - - -set(CMAKE_SYSTEM_NAME Android) -set(CMAKE_SYSTEM_VERSION 22) # API level - -set(CMAKE_ANDROID_NDK ${NDK}) -set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) #arm64-v8a , armeabi-v7a , armeabi -set(CMAKE_ANDROID_STL_TYPE c++_static) #gnustl_static libc++ will allow C++17, if you use _shared you must include in apk ! -set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang) - - -#arm $TOOLCHAIN/ arm-linux-androideabi /lib/ -#arm64 $TOOLCHAIN/ aarch64-linux-android /lib/ -#x86 $TOOLCHAIN/ i686-linux-android /lib/ -#x86_64 $TOOLCHAIN/ x86_64-linux-android /lib/ - - - -#include(${NDK}/build/cmake/android.toolchain.cmake) - - -set(ANDROID ON) - -add_definitions(-D_ANDROID -DANDROID) -add_definitions(-DANDROID_STL=c++_static) - - -add_definitions(-DTARGET_ANDROID) - -add_definitions(-DGLES) - - - - - -## FML - -#[[ -CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS -CMAKE_ANDROID_API -CMAKE_ANDROID_API_MIN -CMAKE_ANDROID_ARCH -CMAKE_ANDROID_ARCH_ABI -CMAKE_ANDROID_ARM_MODE -CMAKE_ANDROID_ARM_NEON -CMAKE_ANDROID_ASSETS_DIRECTORIES -CMAKE_ANDROID_GUI -CMAKE_ANDROID_JAR_DEPENDENCIES -CMAKE_ANDROID_JAR_DIRECTORIES -CMAKE_ANDROID_JAVA_SOURCE_DIR -CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES -CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES -CMAKE_ANDROID_NDK -CMAKE_ANDROID_NDK_DEPRECATED_HEADERS -CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG -CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION -CMAKE_ANDROID_PROCESS_MAX -CMAKE_ANDROID_PROGUARD -CMAKE_ANDROID_PROGUARD_CONFIG_PATH -CMAKE_ANDROID_SECURE_PROPS_PATH -CMAKE_ANDROID_SKIP_ANT_STEP -CMAKE_ANDROID_STANDALONE_TOOLCHAIN -CMAKE_ANDROID_STL_TYPE -#]] diff --git a/shell/cmake/config.cmake b/shell/cmake/config.cmake deleted file mode 100644 index e7a5e5e2f..000000000 --- a/shell/cmake/config.cmake +++ /dev/null @@ -1,382 +0,0 @@ -## config module -# -# get luserx0 to doc this shit or something, vars in all caps are to be exported as defs if they aren't in build.h already -# handle options for FEAT per platform, so rec isn't built for targets w.o one... -# *TODO* fix Android for build system in emu too, OS_LINUX is hardly fitting: prob works better as PLATFORM_ANDROID_{S,N}DK or something -# *TODO* setup git version like it's done in VS/make and configure header so --version works still -# *TODO* lots of other shit to improve build, add enabling/disabling libs/features, setting 3rd party libs as either built in static, dynamic or shared/system -# -# - - -set(ZBUILD Off) - - - -set(BUILD_LIBS OFF) ## Scope:Local If set will build libs { dreamcast, osd, ... } -set(BUILD_LIB_TYPE STATIC) ## Scope:Local If BUILD_LIBS is set, will use this as type of lib to use { STATIC, SHARED, MODULE (plugin) } *TODO* -set(BUILD_SHARED_LIBS OFF) ## Scope:CMAKE If type is not specified in add_library, use SHARED - - - - -## Build flags ## -# - -set(DC_PLATFORM_MASK 7) # Z: Uh, not a bitset -set(DC_PLATFORM_DREAMCAST 0) # /* Works, for the most part */ -set(DC_PLATFORM_DEV_UNIT 1) # /* This is missing hardware */ -set(DC_PLATFORM_NAOMI 2) # /* Works, for the most part */ -set(DC_PLATFORM_NAOMI2 3) # /* Needs to be done, 2xsh4 + 2xpvr + custom TNL */ -set(DC_PLATFORM_ATOMISWAVE 4) # /* Needs to be done, DC-like hardware with possibly more ram */ -set(DC_PLATFORM_HIKARU 5) # /* Needs to be done, 2xsh4, 2x aica , custom vpu */ -set(DC_PLATFORM_AURORA 6) # /* Needs to be done, Uses newer 300 mhz sh4 + 150 mhz pvr mbx SoC */ - - - -set(OS_WINDOWS 0x10000001) # HOST_OS -set(OS_LINUX 0x10000002) -set(OS_DARWIN 0x10000003) -set(OS_IOS 0x10000004) # todo: iOS != OS_DARWIN -set(OS_ANDROID 0x10000005) # todo: should be SYSTEM_ANDROID but ! OS_LINUX - -set(OS_UWP 0x10000011) -set(OS_NSW_HOS 0x80000001) -set(OS_PS4_BSD 0x80000002) - - - -set(CPU_X86 0x20000001) # HOST_CPU -set(CPU_X64 0x20000004) -set(CPU_ARM 0x20000002) -set(CPU_A64 0x20000008) -set(CPU_MIPS 0x20000003) -set(CPU_MIPS64 0x20000009) -set(CPU_PPC 0x20000006) -set(CPU_PPC64 0x20000007) -set(CPU_GENERIC 0x20000005) # used for pnacl, emscripten, etc - -set(DYNAREC_NONE 0x40000001) # FEAT_SHREC, FEAT_AREC, FEAT_DSPREC -set(DYNAREC_JIT 0x40000002) -set(DYNAREC_CPP 0x40000003) - -set(COMPILER_VC 0x30000001) # BUILD_COMPILER -set(COMPILER_GCC 0x30000002) -set(COMPILER_CLANG 0x30000003) -set(COMPILER_INTEL 0x30000004) - - - - - - - -## These default to host, but are used for cross so make sure not to contaminate -# -# CMAKE_SYSTEM ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}. -# CMAKE_SYSTEM_NAME CMAKE_HOST_SYSTEM_NAME uname -s Linux, Windows, and Darwin -# CMAKE_SYSTEM_VERSION CMAKE_HOST_SYSTEM_VERSION uname -r -# CMAKE_SYSTEM_PROCESSOR CMAKE_HOST_SYSTEM_PROCESSOR uname -p -# -# -# -# BOOL: CMAKE_HOST_UNIX CMAKE_HOST_WIN32 CMAKE_HOST_APPLE -# -# -# CMAKE_LIBRARY_ARCHITECTURE CMAKE__LIBRARY_ARCHITECTURE /lib/ -# -# - - - - -## strings are used to append to path/file names, and to filter multiple possibilities down to one -# AMD64/x86_64:x64, i*86:x86, ppc/powerpc[64][b|l]e:ppc[64] etc -# -if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686") # todo: check MATCHES "i.86" ? - set(host_arch "x86") - set(HOST_CPU ${CPU_X86}) -# -elseif(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64") OR - ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")) - set(host_arch "x64") - set(HOST_CPU ${CPU_X64}) -# -elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64") - set(host_arch "arm64") - set(HOST_CPU ${CPU_A64}) -# -elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm") - set(host_arch "arm") - set(HOST_CPU ${CPU_ARM}) -# -elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "ppc64") - set(host_arch "ppc64") - set(HOST_CPU ${CPU_PPC64}) -# -elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "ppc") # has to be done after ppc64 obv - set(host_arch "ppc") - set(HOST_CPU ${CPU_PPC}) -# -elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "mips64") # todo: check , r* names? - set(host_arch "mips64") - set(HOST_CPU ${CPU_MIPS64}) -# -elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "mips") # todo: check , r* names? - set(host_arch "mips") - set(HOST_CPU ${CPU_MIPS}) -# -else() - message("Warning: Unknown Host System Processor: \"${CMAKE_SYSTEM_PROCESSOR}\"") - set(host_arch "${CMAKE_SYSTEM_PROCESSOR}") - set(HOST_CPU ${CPU_GENERIC}) -endif() - - - - -string(TOLOWER ${CMAKE_SYSTEM_NAME} host_os) - -#message(" - testing cmake host_os: \"${host_os}\"") - -## HOST_* is not TARGET_* ;; change ndc-e internal naming it's wrong , then change this ;; - -if("android" STREQUAL "${host_os}" OR ANDROID) - set(HOST_OS ${OS_LINUX}) # *FIXME* we might have to keep as OS_LINUX or add to full cleanup list :| - -elseif("windowsstore" STREQUAL "${host_os}") - set(HOST_OS ${OS_UWP}) - set(HOST_CPU ${CPU_X64}) - -elseif(CMAKE_HOST_WIN32) - set(HOST_OS ${OS_WINDOWS}) - -elseif(CMAKE_HOST_APPLE) - - if("${host_arch}" MATCHES "arm") - set(HOST_OS ${OS_IOS}) - set(TARGET_IOS On) - add_definitions(-DTARGET_IPHONE -DTARGET_IOS) - else() - set(HOST_OS ${OS_DARWIN}) # todo ios check, check compiler/arch? - set(TARGET_OSX On) - add_definitions(-DTARGET_OSX) - endif() - -elseif(CMAKE_HOST_UNIX) # GP UNIX MUST BE AFTER OTHER UNIX'ish options such as APPLE , it matches both - - set(HOST_OS ${OS_LINUX}) # todo android check, just check android vars? -endif() - - - -#option(TARGET_NO_REC BOOL "") -#option(TARGET_NO_AREC BOOL "") -#option(TARGET_NO_JIT BOOL "") - - - -## Dynarec avail on x86,x64,arm and aarch64 in arm.32 compat -# -if((${HOST_CPU} EQUAL ${CPU_X86}) OR (${HOST_CPU} EQUAL ${CPU_X64}) OR - (${HOST_CPU} EQUAL ${CPU_ARM}) OR (${HOST_CPU} EQUAL ${CPU_A64})) -# - message("Dynarec Features Available") - - set(FEAT_SHREC ${DYNAREC_JIT}) - set(FEAT_AREC ${DYNAREC_NONE}) - set(FEAT_DSPREC ${DYNAREC_NONE}) -# -else() - set(FEAT_SHREC ${DYNAREC_CPP}) - set(FEAT_AREC ${DYNAREC_NONE}) - set(FEAT_DSPREC ${DYNAREC_NONE}) -endif() - -## Handle TARGET_* to FEAT_ *FIXME* stupid use one or the other and propogate : part of build cleanup , TARGET_ will only be for platform specifics and FEAT_ as OPTIONS -# -if(TARGET_NO_REC) - set(FEAT_SHREC ${DYNAREC_NONE}) - set(FEAT_AREC ${DYNAREC_NONE}) - set(FEAT_DSPREC ${DYNAREC_NONE}) -endif() - -if(TARGET_NO_AREC) - set(FEAT_SHREC ${DYNAREC_JIT}) - set(FEAT_AREC ${DYNAREC_NONE}) - set(FEAT_DSPREC ${DYNAREC_NONE}) -endif() - -if(TARGET_NO_JIT) - set(FEAT_SHREC ${DYNAREC_CPP}) - set(FEAT_AREC ${DYNAREC_NONE}) - set(FEAT_DSPREC ${DYNAREC_NONE}) -endif() - - - - - -######## Looks like something to delete, but if we're going to handle options here and NOT in libosd/lib* ######### - -# FindNativeCompilers() -## options BUILD_COMPILER { GCC, Clang, Intel, RealView? } - - -#set(CMAKE_C_COMPILER clang) -#set(CMAKE_C_COMPILER_TARGET ${triple}) -#set(CMAKE_CXX_COMPILER clang++) -#set(CMAKE_CXX_COMPILER_TARGET ${triple}) - - - -if(${HOST_OS} EQUAL ${OS_LINUX}) -# option SUPPORT_X11 -# option FEAT_HAS_NIXPROF -# option EMSCripten -endif() - -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") -# - set(BUILD_COMPILER ${COMPILER_VC}) - message("MSVC Platform: ${CMAKE_VS_PLATFORM_NAME}") - message("MSVC Toolset: ${CMAKE_VS_PLATFORM_TOOLSET}") - - - add_definitions(/D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1) - - if("${HOST_OS}" STREQUAL "${OS_UWP}") - set(_CXX_FLAGS "/ZW ") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /AppContainer") - endif() -# -elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set(BUILD_COMPILER ${COMPILER_GCC}) -# -elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") # AppleClang ffs - set(BUILD_COMPILER ${COMPILER_CLANG}) -# -elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") - set(BUILD_COMPILER ${COMPILER_INTEL}) -# -else() - message("Unknown Compiler: ${CMAKE_CXX_COMPILER_ID}") -endif() - - - -## Setup some common flags -# -if ((${BUILD_COMPILER} EQUAL ${COMPILER_VC}) OR - (${BUILD_COMPILER} EQUAL ${COMPILER_CLANG}) AND (${HOST_OS} STREQUAL ${OS_WINDOWS})) - - - add_definitions(/D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1) - - if(${BUILD_COMPILER} EQUAL ${COMPILER_CLANG}) - add_definitions(/DXBYAK_NO_OP_NAMES /DTARGET_NO_OPENMP) #*FIXME* check openmp on clang-cl - remove_definitions(/U_HAS_STD_BYTE) - set(_CXX_FLAGS "/std:c++14") # /U_HAS_STD_BYTE not working, have to use c++14 not 17 :| - set(_C_FLAGS "-Wno-unused-function -Wno-unused-variable") - endif() - - -elseif ((${BUILD_COMPILER} EQUAL ${COMPILER_GCC}) OR - (${BUILD_COMPILER} EQUAL ${COMPILER_CLANG})) # AND NOT ${HOST_OS} EQUAL ${OS_WINDOWS})) - - if(USE_32B OR TARGET_LINUX_X86) - set(_C_FLAGS "${_C_FLAGS} -m32") - endif() - - if((${HOST_CPU} EQUAL ${CPU_X86}) OR (${HOST_CPU} EQUAL ${CPU_X64})) - set(_C_FLAGS "${_C_FLAGS} -msse4") - - if(NOT CMAKE_HOST_APPLE) - set(_C_FLAGS "${_C_FLAGS} -fopenmp") - endif() - endif() # X86 family - - - set(_CXX_FLAGS "${_CXX_FLAGS} -fno-operator-names -fpermissive -std=c++11") # -fcxx-exceptions") ## xbyak needs exceptions - - -endif() - - -set(_CXX_FLAGS "${_CXX_FLAGS} ${_C_FLAGS}") - - - -set(CMAKE_C_FLAGS " ${_C_FLAGS}") # ${CMAKE_C_FLAGS} -- these hold default VC flags for non VC Build ? -set(CMAKE_CXX_FLAGS " ${_CXX_FLAGS}") # ${CMAKE_CXX_FLAGS} - - -#if defined(TARGET_NO_NIXPROF) -#define FEAT_HAS_NIXPROF 0 -#endif - -#if defined(TARGET_NO_COREIO_HTTP) -#define FEAT_HAS_COREIO_HTTP 0 -#endif - -if (TARGET_NSW) # -DCMAKE_TOOLCHAIN_FILE=./cmake/devkitA64.cmake -DTARGET_NSW=ON - set(HOST_OS ${OS_NSW_HOS}) - - message(" DEVKITA64: ${DEVKITA64} ") - message("HOST_OS ${HOST_OS}") - - add_definitions(-D__SWITCH__ -DGLES -DMESA_EGL_NO_X11_HEADERS) - add_definitions(-DTARGET_NO_THREADS -DTARGET_NO_EXCEPTIONS -DTARGET_NO_NIXPROF) - add_definitions(-DTARGET_NO_COREIO_HTTP) - add_definitions(-D_GLIBCXX_USE_C99_MATH_TR1 -D_LDBL_EQ_DBL) - -endif() - -if (TARGET_PS4) # -DCMAKE_TOOLCHAIN_FILE=./cmake/{ps4sdk,clang_scei}.cmake -DTARGET_PS4=ON - set(HOST_OS ${OS_PS4_BSD}) - message("HOST_OS ${HOST_OS}") - - - add_definitions(-DPS4 -DTARGET_PS4 -DTARGET_BSD -D__ORBIS__ -DGLES -DMESA_EGL_NO_X11_HEADERS) ## last needed for __unix__ on eglplatform.h - add_definitions(-DTARGET_NO_THREADS -DTARGET_NO_EXCEPTIONS -DTARGET_NO_NIXPROF) - add_definitions(-DTARGET_NO_COREIO_HTTP) - - - message("*******FIXME******** LARGE PAGES !!") -endif() - -if(ZBUILD) - set(DEBUG_CMAKE ON) - add_definitions(-D_Z_) # Get rid of some warnings and internal dev testing - - if(NOT TARGET_PS4 AND NOT TARGET_NSW AND - NOT TARGET_OSX AND NOT TARGET_IOS ) - set(USE_QT ON) - endif() -endif() - -# configure options for osd/ui -# osd_default, osd_qt -# ui_default, ui_sdl, ui_qt -# USE_NATIVE , USE_SDL , USE_QT -- these (can) define multiple - -option(USE_QT False "Use Qt5 for UI and support OS Deps.") - -#option(BUILD_TESTS "Build tests" OFF) # todo: luserx0 this is your arena, you want tests add em - -add_definitions(-DCMAKE_BUILD) - -add_definitions(-DHOST_OS=${HOST_OS}) -add_definitions(-DHOST_CPU=${HOST_CPU}) - -add_definitions(-DFEAT_AREC=${FEAT_AREC}) -add_definitions(-DFEAT_SHREC=${FEAT_SHREC}) -add_definitions(-DFEAT_DSPREC=${FEAT_DSPREC}) - -add_definitions(-DBUILD_COMPILER=${BUILD_COMPILER}) - -add_definitions(-DDEF_CONSOLE) - - -set(RE_CMAKE_CONFIGURED 1) -#add_definitions(-D=${}) diff --git a/shell/cmake/devkitA64.cmake b/shell/cmake/devkitA64.cmake deleted file mode 100644 index 3eb80ff24..000000000 --- a/shell/cmake/devkitA64.cmake +++ /dev/null @@ -1,41 +0,0 @@ -## devkitA64.cmake - devkitpro A64 cross-compile -# -set(CMAKE_SYSTEM_NAME Linux) # this one is important // Add Platform/switch to use this name ... -set(CMAKE_SYSTEM_PROCESSOR aarch64) - -set(CMAKE_SYSTEM_VERSION 1) # this one not so much - - -set(DEVKITPRO $ENV{DEVKITPRO}) -set(DEVKITA64 $ENV{DEVKITA64}) - - -if ("" STREQUAL "${DEVKITPRO}") - set(DEVKITA64 "/opt/devkitpro") -endif() - -if ("" STREQUAL "${DEVKITA64}") - set(DEVKITA64 ${DEVKITPRO}/devkitA64) -endif() - - -## specify the cross compiler -# -set(CMAKE_C_COMPILER ${DEVKITA64}/bin/aarch64-none-elf-gcc) -set(CMAKE_CXX_COMPILER ${DEVKITA64}/bin/aarch64-none-elf-g++) - - -set(CMAKE_FIND_ROOT_PATH ${DEVKITA64}) # where is the target environment - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # search for programs in the build host directories -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # for libraries and headers in the target directories -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - - - - -include_directories(${DEVKITPRO}/libnx/include) - - - -set(TARGET_NSW ON) diff --git a/shell/cmake/ps4sdk.cmake b/shell/cmake/ps4sdk.cmake deleted file mode 100644 index d8cac168f..000000000 --- a/shell/cmake/ps4sdk.cmake +++ /dev/null @@ -1,130 +0,0 @@ -## ps4sdk.cmake - devkitpro A64 cross-compile -# -set(CMAKE_SYSTEM_NAME FreeBSD) # this one is important -set(CMAKE_SYSTEM_PROCESSOR x86_64) -set(CMAKE_SYSTEM_VERSION 9) # this one not so much - - - - -set(TARGET_PS4 ON) -set(TARGET_BSD ON) - - - -### This shit is very WIP ### -# -## TODO: Check for - - -set(PS4SDK $ENV{PS4SDK}) -set(SCESDK $ENV{SCESDK}) - -set(USE_SCE ON) -set(PS4_PKG ON) - -if(PS4_PKG) - add_definitions(-DPS4_PKG) -endif() - - - -if ("" STREQUAL "${PS4SDK}") - if ("Windows" STREQUAL "${CMAKE_HOST_SYSTEM_NAME}") - set(PS4SDK "C:/Dev/SDK/PS4") - else() - set(PS4SDK "/opt/ps4") - endif() -endif() - - - -set(TAUON_SDK ${PS4SDK}/tauon) - - - -if(USE_SCE) -# - set(PS4SDK ${PS4SDK}/SCE/PS4SDK) - - set(PS4HOST ${PS4SDK}/host_tools) - set(PS4TARGET ${PS4SDK}/target) - - set(toolPrefix "orbis-") - set(toolSuffix ".exe") - - set(CMAKE_C_COMPILER ${PS4HOST}/bin/${toolPrefix}clang${toolSuffix}) - set(CMAKE_CXX_COMPILER ${PS4HOST}/bin/${toolPrefix}clang++${toolSuffix}) - - set(CMAKE_FIND_ROOT_PATH ${PS4TARGET}) # where is the target environment - - - - set (PS4_inc_dirs - ${TAUON_SDK}/include - ${PS4TARGET}/include - ${PS4TARGET}/include_common - ) - -# set (PS4_link_dirs -# "${PS4TARGET}/lib" -# "${PS4TARGET}/tauon/lib" -# ) - - -#LDFLAGS += -L $(TAUON_SDK_DIR)/lib -L $(SCE_ORBIS_SDK_DIR)/target/lib - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s -Wl,--addressing=non-aslr,--strip-unused-data ") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L ${TAUON_SDK}/lib -L ${PS4TARGET}/lib") - - message("CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}") -# -else() -# - set(triple "x86_64-scei-ps4") - - set(CMAKE_C_COMPILER_TARGET ${triple}) - set(CMAKE_CXX_COMPILER_TARGET ${triple}) - - set(CMAKE_C_COMPILER clang) - set(CMAKE_CXX_COMPILER clang++) - - - set (PS4_inc_dirs - ${TAUON_SDK}/include - - ${PS4SDK}/include - ${PS4SDK}/tauon/include - ) - -# set (PS4_link_dirs -# "${PS4SDK}/lib" -# "${PS4SDK}/tauon/lib" -# ) - - - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s -Wl,--addressing=non-aslr,--strip-unused-data -L${TAUON_SDK}/lib") -# -endif() - - - - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # search for programs in the build host directories -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) # for libraries and headers in the target directories -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) - - -include_directories(${PS4_inc_dirs}) - - - - - ### Add a helper to add libSce PREFIX and [_tau]*_stub[_weak]*.a SUFFIX - # -link_libraries( - kernel_tau_stub_weak SceSysmodule_tau_stub_weak SceSystemService_stub_weak SceSystemService_tau_stub_weak SceShellCoreUtil_tau_stub_weak ScePigletv2VSH_tau_stub_weak kernel_util - ScePad_stub_weak SceNet_stub_weak SceCommonDialog_stub_weak ScePosix_stub_weak -) - - - diff --git a/shell/cmake/toolchains/Linux-x86.cmake b/shell/cmake/toolchains/Linux-x86.cmake deleted file mode 100644 index 1cf674218..000000000 --- a/shell/cmake/toolchains/Linux-x86.cmake +++ /dev/null @@ -1,5 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR i686) -set(CMAKE_C_COMPILER gcc -m32) -set(CMAKE_ASM_COMPILER gcc -m32) -set(CMAKE_CXX_COMPILER g++ -m32) From 68fe11934498c967b3278ba9206159ece48843d9 Mon Sep 17 00:00:00 2001 From: scribam Date: Tue, 5 May 2020 19:01:29 +0200 Subject: [PATCH 3/3] Add Cirrus CI (FreeBSD only) and GitHub Actions to build with CMake --- .cirrus.yml | 8 +++++++ .github/workflows/c-cpp.yml | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 .cirrus.yml create mode 100644 .github/workflows/c-cpp.yml diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 000000000..35327873f --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,8 @@ +freebsd_instance: + image_family: freebsd-12-1 + +task: + install_script: pkg install -y alsa-lib cmake evdev-proto flac git libao libudev-devd libzip mesa-libs pkgconf png pulseaudio sdl2 + script: + - cmake -B build -DCMAKE_BUILD_TYPE=Release + - cmake --build build --config Release --parallel 2 diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml new file mode 100644 index 000000000..03d413601 --- /dev/null +++ b/.github/workflows/c-cpp.yml @@ -0,0 +1,48 @@ +name: C/C++ CI + +on: [push, pull_request] + +jobs: + build: + name: ${{ matrix.config.name }} + runs-on: ${{ matrix.config.os }} + + strategy: + matrix: + config: + - {name: i686-pc-windows-msvc, os: windows-latest, cmakeArgs: -G "Visual Studio 16 2019" -A Win32} + - {name: x86_64-apple-darwin, os: macos-latest, setup: brew install flac libao libzip libomp libpng pulseaudio sdl2 zlib, cmakeArgs: -G "Xcode"} + - {name: x86_64-pc-linux-gnu, os: ubuntu-latest, setup: sudo apt-get update && sudo apt-get -y install libao-dev libasound2-dev libevdev-dev libflac-dev libgl1-mesa-dev libpulse-dev libsdl2-dev libudev-dev libzip-dev} + - {name: x86_64-pc-windows-msvc, os: windows-latest, cmakeArgs: -G "Visual Studio 16 2019" -A x64} + - {name: x86_64-w64-mingw32, os: windows-latest, cmakeArgs: -G "MinGW Makefiles"} + + steps: + - name: Set up build environment + run: ${{ matrix.config.setup }} + + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - run: git fetch origin +refs/tags/*:refs/tags/* + + - name: Unit Tests + run: | + mkdir -p build/tests + cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=tests -DENABLE_CTEST=ON ${{ matrix.config.cmakeArgs }} + cmake --build build --config Release --parallel 2 + ./build/tests/flycast + if: matrix.config.name == 'x86_64-pc-linux-gnu' + + - name: Create artifact directory + run: mkdir -p build/artifact + + - name: CMake + run: | + cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=artifact ${{ matrix.config.cmakeArgs }} + cmake --build build --config Release --parallel 2 + + - uses: actions/upload-artifact@v2 + with: + name: flycast-${{ matrix.config.name }} + path: build/artifact