314 lines
8.6 KiB
CMake
314 lines
8.6 KiB
CMake
cmake_minimum_required(VERSION 3.5.0 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})
|
|
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})
|
|
|
|
### FIXME: asm with cmake ninja+VC
|
|
if(${BUILD_COMPILER} EQUAL ${COMPILER_VC})
|
|
list(APPEND core_SRCS ${d_core}/rec-x64/msvc.asm)
|
|
endif()
|
|
|
|
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)
|
|
endif()
|
|
|
|
add_definitions(/DFEAT_HAS_SOFTREND=0)
|
|
|
|
|
|
### 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 lpng_SRCS ${d_deps}/libpng/*.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}
|
|
${lpng_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
|
|
)
|
|
|
|
else()
|
|
#
|
|
message("OS Unhandled")
|
|
error()
|
|
#
|
|
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")
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|