From 2fe5f8b22db121ff6ebdb11792e0310ccbcd6891 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Thu, 16 Jul 2015 22:02:56 +0200 Subject: [PATCH] Experimental cmake build (currently Linux only) --- shell/cmake/CMakeLists.txt | 193 +++++++++++++++++++++++++ shell/cmake/toolchains/Linux-x86.cmake | 5 + 2 files changed, 198 insertions(+) create mode 100644 shell/cmake/CMakeLists.txt create mode 100644 shell/cmake/toolchains/Linux-x86.cmake diff --git a/shell/cmake/CMakeLists.txt b/shell/cmake/CMakeLists.txt new file mode 100644 index 000000000..c94a0972a --- /dev/null +++ b/shell/cmake/CMakeLists.txt @@ -0,0 +1,193 @@ +# 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_GLES "Use GL ES" OFF) +option(USE_PULSEAUDIO "Use PulseAudio" OFF) +option(USE_WEBUI "Use WebUI" ON) +option(USE_REND "Use some rendering" 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() + +if("${CMAKE_BUILD_TYPE}" STREQUAL Release) + add_definitions(-DRELEASE) +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_NACL32 + # 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/libpng) + +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/libpng) +# 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) +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) +else() + message(FATAL_ERROR "Which OS?") +endif() + +# Optional features + +if(USE_WEBUI) + add_definitions(-DWEBUI) + add_directory(core/webui) + add_directory(core/deps/libwebsocket) + # TODO, deps/ifaddrs/ for Android +endif() + +# Executable + +add_executable(reicast ${source}) +target_link_libraries(reicast ${libs}) diff --git a/shell/cmake/toolchains/Linux-x86.cmake b/shell/cmake/toolchains/Linux-x86.cmake new file mode 100644 index 000000000..1cf674218 --- /dev/null +++ b/shell/cmake/toolchains/Linux-x86.cmake @@ -0,0 +1,5 @@ +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)