mkxp/CMakeLists.txt

474 lines
12 KiB
CMake
Raw Normal View History

2013-12-31 21:24:14 +00:00
cmake_minimum_required(VERSION 2.8.11)
2018-04-29 17:18:36 +00:00
set(CMAKE_CXX_STANDARD 14)
2013-12-31 21:24:14 +00:00
Project(mkxp)
2013-12-31 21:36:00 +00:00
## Setup options ##
option(SHARED_FLUID "Dynamically link fluidsynth at build time" OFF)
option(WORKDIR_CURRENT "Keep current directory on startup" OFF)
2013-12-31 21:36:00 +00:00
option(FORCE32 "Force 32bit compile on 64bit OS" OFF)
set(BINDING "MRI" CACHE STRING "The Binding Type (MRI, MRUBY, NULL)")
set(EXTERNAL_LIB_PATH "" CACHE PATH "External precompiled lib prefix")
2013-12-31 21:24:14 +00:00
## Misc setup ##
include(cmake/PrepUtils.cmake)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
2018-04-29 17:18:36 +00:00
set(CMAKE_EXECUTABLE_SUFFIX ".html")
2013-12-31 21:24:14 +00:00
IF("${CMAKE_SYSTEM}" MATCHES "Linux")
SET(LINUX ON)
2013-12-31 21:24:14 +00:00
ENDIF()
IF(WORKDIR_CURRENT)
list(APPEND DEFINES
WORKDIR_CURRENT
)
ENDIF()
2013-12-31 21:24:14 +00:00
IF(FORCE32)
if(APPLE)
SET(CMAKE_OSX_ARCHITECTURES "i386")
else()
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
endif()
2013-12-31 21:24:14 +00:00
ENDIF()
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
IF(LINUX)
if(CMAKE_SIZEOF_VOID_P MATCHES "8" AND NOT(FORCE32) )
set(CMAKE_EXECUTABLE_SUFFIX ".bin.x86_64")
set(BIN_RPATH "\$ORIGIN/lib64")
2014-01-01 19:54:19 +00:00
set(LIB_PATH "lib64")
else()
set(CMAKE_EXECUTABLE_SUFFIX ".bin.x86")
set(BIN_RPATH "\$ORIGIN/lib")
2014-01-01 19:54:19 +00:00
set(LIB_PATH "lib")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FILE_OFFSET_BITS=64")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FILE_OFFSET_BITS=64")
endif()
2013-12-31 21:24:14 +00:00
elseif(APPLE)
SET(BIN_RPATH "@executable_path/../Frameworks")
2014-01-01 19:54:19 +00:00
set(LIB_PATH "lib")
2013-12-31 21:24:14 +00:00
endif()
2019-09-26 19:32:29 +00:00
#set(EMTERPRETER_OPT "-s ASSERTIONS=0 -s TOTAL_MEMORY=67108864 -s ABORTING_MALLOC=0 -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1 -s NO_EXIT_RUNTIME=1 --preload-file \"game\"")
#set(EMTERPRETER_OPT "${EMTERPRETER_OPT} -s EMTERPRETIFY_WHITELIST=\"['__ZN8Graphics10transitionEiPKci','__ZL18graphicsTransitioniPmm','_call_cfunc','_rb_call0','_rb_call','_rb_eval','_rb_eval_string','_eval_node','_eval','_rb_f_eval','_rb_funcall2','_rb_protect','_rb_yield_0','_loop_i','_rb_rescue2','_rb_f_loop','__ZL10evalHelperP7evalArg','__ZL10evalStringmmPi','__ZL14runRMXPScriptsR13BacktraceData','__Z13rgssThreadFunPv','_main','__ZL11inputUpdateiPmm','__ZN11EventThread7processER14RGSSThreadData','__ZL17mriBindingExecutev','__ZL14mriBindingInitv','_module_setup', '_main']\"")
#set(EMTERPRETER_OPT "${EMTERPRETER_OPT} -s EXTRA_EXPORTED_RUNTIME_METHODS=\"['Pointer_stringify']\" -s DISABLE_EXCEPTION_CATCHING=2")
#set(EMTERPRETER_OPT "${EMTERPRETER_OPT} -s ALIASING_FUNCTION_POINTERS=0")
set(EMTERPRETER_OPT "-s ASSERTIONS=1 -s ALLOW_MEMORY_GROWTH=1 -s ABORTING_MALLOC=0 -s NO_EXIT_RUNTIME=1 -s ASYNCIFY -s ERROR_ON_UNDEFINED_SYMBOLS=0 --embed-file \"game\"")
2018-04-29 17:18:36 +00:00
message(STATUS ${EMTERPRETER_OPT})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EMTERPRETER_OPT}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EMTERPRETER_OPT}")
message(STATUS ${CMAKE_C_FLAGS})
2013-12-31 21:24:14 +00:00
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH ${BIN_RPATH})
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
## Locate core libs ##
find_package(PkgConfig REQUIRED)
if (EXTERNAL_LIB_PATH)
set(CMAKE_PREFIX_PATH ${EXTERNAL_LIB_PATH})
2018-04-29 17:18:36 +00:00
2014-01-01 19:54:19 +00:00
if(EXISTS "${EXTERNAL_LIB_PATH}/${LIB_PATH}/pkgconfig/")
SET(ENV{PKG_CONFIG_PATH} "${EXTERNAL_LIB_PATH}/${LIB_PATH}/pkgconfig/")
endif()
if(APPLE)
2018-04-29 17:18:36 +00:00
set(PLATFORM_SHARED_LIBS
libSDL2.dylib libSDL2_image-2.0.0.dylib libSDL2_ttf-2.0.0.dylib libSDL_sound-1.0.1.dylib
libfreetype.6.dylib libsigc-2.0.0.dylib
CACHE STRING "List of shared libraries that need to be copied into the OS X bundle")
foreach(lib ${PLATFORM_SHARED_LIBS})
if(EXISTS ${EXTERNAL_LIB_PATH}/lib/${lib})
list(APPEND PLATFORM_COPY_LIBS
${EXTERNAL_LIB_PATH}/lib/${lib}
)
endif()
endforeach()
endif()
2013-12-31 21:24:14 +00:00
endif()
pkg_check_modules(SIGCXX REQUIRED sigc++-2.0)
pkg_check_modules(PIXMAN REQUIRED pixman-1)
pkg_check_modules(PHYSFS REQUIRED physfs>=2.1)
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
2013-12-31 21:24:14 +00:00
pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(SDL2_TTF REQUIRED SDL2_ttf)
pkg_check_modules(SDL2_IMAGE REQUIRED SDL2_image)
pkg_check_modules(SDL_SOUND REQUIRED SDL_sound)
2018-04-29 17:18:36 +00:00
#find_package(Boost 1.49 COMPONENTS program_options REQUIRED)
2019-09-26 19:32:29 +00:00
#find_package(OpenAL REQUIRED)
pkg_check_modules(OpenAL REQUIRED openal)
2018-04-29 17:18:36 +00:00
pkg_check_modules(ZLIB REQUIRED zlib)
#find_package(ZLIB REQUIRED)
2013-12-31 21:24:14 +00:00
## Setup main source ##
set(MAIN_HEADERS
src/quadarray.h
2013-12-31 21:24:14 +00:00
src/audio.h
src/binding.h
src/bitmap.h
src/disposable.h
src/etc.h
src/etc-internal.h
src/eventthread.h
src/flashable.h
src/font.h
src/input.h
src/iniconfig.h
2013-12-31 21:24:14 +00:00
src/plane.h
src/scene.h
src/sprite.h
src/table.h
src/texpool.h
src/tilequad.h
src/transform.h
src/viewport.h
src/window.h
src/serializable.h
src/shader.h
src/glstate.h
src/quad.h
src/tilemap.h
src/tilemap-common.h
2013-12-31 21:24:14 +00:00
src/graphics.h
2014-11-29 16:47:40 +00:00
src/gl-debug.h
2013-12-31 21:24:14 +00:00
src/global-ibo.h
src/exception.h
src/filesystem.h
src/serial-util.h
src/intrulist.h
src/binding.h
src/gl-util.h
src/util.h
src/config.h
src/settingsmenu.h
src/keybindings.h
2013-12-31 21:24:14 +00:00
src/tileatlas.h
src/sharedstate.h
src/al-util.h
src/boost-hash.h
2013-12-31 21:24:14 +00:00
src/debugwriter.h
src/gl-fun.h
2014-07-13 20:18:27 +00:00
src/gl-meta.h
src/vertex.h
2014-07-23 15:28:20 +00:00
src/soundemitter.h
src/aldatasource.h
src/alstream.h
src/audiostream.h
2014-07-23 20:57:39 +00:00
src/rgssad.h
src/windowvx.h
src/tilemapvx.h
src/tileatlasvx.h
src/sharedmidistate.h
src/fluid-fun.h
src/sdl-util.h
2013-12-31 21:24:14 +00:00
)
set(MAIN_SOURCE
src/main.cpp
src/audio.cpp
src/bitmap.cpp
src/eventthread.cpp
src/filesystem.cpp
src/font.cpp
src/input.cpp
src/iniconfig.cpp
2013-12-31 21:24:14 +00:00
src/plane.cpp
src/scene.cpp
src/sprite.cpp
src/table.cpp
src/tilequad.cpp
src/viewport.cpp
src/window.cpp
src/texpool.cpp
src/shader.cpp
src/glstate.cpp
src/tilemap.cpp
src/autotiles.cpp
src/graphics.cpp
2014-11-29 16:47:40 +00:00
src/gl-debug.cpp
2013-12-31 21:24:14 +00:00
src/etc.cpp
src/config.cpp
src/settingsmenu.cpp
src/keybindings.cpp
2013-12-31 21:24:14 +00:00
src/tileatlas.cpp
src/sharedstate.cpp
src/gl-fun.cpp
2014-07-13 20:18:27 +00:00
src/gl-meta.cpp
src/vertex.cpp
2014-07-23 15:28:20 +00:00
src/soundemitter.cpp
src/sdlsoundsource.cpp
src/alstream.cpp
src/audiostream.cpp
2014-07-23 20:57:39 +00:00
src/rgssad.cpp
src/bundledfont.cpp
src/vorbissource.cpp
src/windowvx.cpp
src/tilemapvx.cpp
src/tileatlasvx.cpp
src/autotilesvx.cpp
src/midisource.cpp
src/fluid-fun.cpp
2013-12-31 21:24:14 +00:00
)
if(WIN32)
list(APPEND MAIN_HEADERS windows/resource.h)
list(APPEND MAIN_SOURCE windows/resource.rc)
endif()
source_group("MKXP Source" FILES ${MAIN_SOURCE} ${MAIN_HEADERS})
2013-12-31 21:24:14 +00:00
## Setup embedded source ##
set(EMBEDDED_INPUT
shader/common.h
shader/transSimple.frag
shader/trans.frag
shader/hue.frag
shader/sprite.frag
shader/plane.frag
shader/gray.frag
shader/bitmapBlit.frag
shader/flatColor.frag
shader/simple.frag
shader/simpleColor.frag
shader/simpleAlpha.frag
shader/simpleAlphaUni.frag
shader/flashMap.frag
shader/minimal.vert
shader/simple.vert
shader/simpleColor.vert
shader/sprite.vert
shader/tilemap.vert
shader/tilemapvx.vert
shader/blur.frag
shader/blurH.vert
shader/blurV.vert
shader/simpleMatrix.vert
assets/liberation.ttf
2014-11-29 16:23:42 +00:00
assets/icon.png
2013-12-31 21:24:14 +00:00
)
if (RGSS2)
list(APPEND DEFINES
RGSS2
)
2013-12-31 21:24:14 +00:00
endif()
if (SHARED_FLUID)
pkg_check_modules(FLUID REQUIRED fluidsynth)
list(APPEND DEFINES
SHARED_FLUID
)
endif()
2013-12-31 21:24:14 +00:00
## Process Embeddeds ##
find_program(XXD_EXE xxd
DOC "Location of the xxd executable"
2013-12-31 21:24:14 +00:00
)
macro(ProcessWithXXD outvar inputfile outdir)
get_filename_component(basefile ${inputfile} NAME)
set(outputfile ${outdir}/${basefile}.xxd)
set_source_files_properties(${outputfile} PROPERTIES HEADER_ONLY TRUE)
add_custom_command(
OUTPUT ${outputfile}
COMMAND ${XXD_EXE} -i ${inputfile} ${outputfile}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${inputfile}
COMMENT "Generating XXD for ${inputfile}"
)
list(APPEND ${outvar}
${outputfile}
)
2013-12-31 21:24:14 +00:00
endmacro()
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/xxdhack)
include_directories(
${CMAKE_CURRENT_BINARY_DIR}/xxdhack
2013-12-31 21:24:14 +00:00
)
foreach(item ${EMBEDDED_INPUT})
ProcessWithXXD(EMBEDDED_SOURCE ${item} ${CMAKE_CURRENT_BINARY_DIR})
2013-12-31 21:24:14 +00:00
endforeach()
source_group("Embedded Source" FILES ${EMBEDDED_INPUT} ${EMBEDDED_SOURCE})
2013-12-31 21:24:14 +00:00
## Setup binding source ##
if (BINDING STREQUAL "MRI")
set(MRIVERSION "2.1" CACHE STRING "Version of MRI to link with")
2019-09-26 19:32:29 +00:00
#pkg_check_modules(MRI REQUIRED ruby-${MRIVERSION})
list(APPEND DEFINES
BINDING_MRI
)
set(BINDING_HEADERS
binding-mri/binding-util.h
binding-mri/binding-types.h
binding-mri/serializable-binding.h
binding-mri/disposable-binding.h
binding-mri/sceneelement-binding.h
binding-mri/viewportelement-binding.h
binding-mri/flashable-binding.h
)
set(BINDING_SOURCE
binding-mri/binding-mri.cpp
binding-mri/binding-util.cpp
binding-mri/table-binding.cpp
binding-mri/etc-binding.cpp
binding-mri/bitmap-binding.cpp
binding-mri/font-binding.cpp
binding-mri/graphics-binding.cpp
binding-mri/input-binding.cpp
binding-mri/sprite-binding.cpp
binding-mri/viewport-binding.cpp
binding-mri/plane-binding.cpp
binding-mri/window-binding.cpp
binding-mri/tilemap-binding.cpp
binding-mri/audio-binding.cpp
binding-mri/module_rpg.cpp
binding-mri/filesystem-binding.cpp
binding-mri/windowvx-binding.cpp
binding-mri/tilemapvx-binding.cpp
)
2013-12-31 21:24:14 +00:00
elseif(BINDING STREQUAL "MRUBY")
message(FATAL_ERROR "Mruby support in CMake needs to be finished")
list(APPEND DEFINES
BINDING_MRUBY
)
set(BINDING_HEADERS
binding-mruby/binding-util.h
binding-mruby/disposable-binding.h
binding-mruby/flashable-binding.h
binding-mruby/binding-types.h
binding-mruby/sceneelement-binding.h
binding-mruby/viewportelement-binding.h
binding-mruby/serializable-binding.h
binding-mruby/mrb-ext/file.h
binding-mruby/mrb-ext/rwmem.h
binding-mruby/mrb-ext/marshal.h
)
set(BINDING_SOURCE
binding-mruby/binding-mruby.cpp
binding-mruby/binding-util.cpp
binding-mruby/window-binding.cpp
binding-mruby/bitmap-binding.cpp
binding-mruby/sprite-binding.cpp
binding-mruby/font-binding.cpp
binding-mruby/viewport-binding.cpp
binding-mruby/plane-binding.cpp
binding-mruby/audio-binding.cpp
binding-mruby/tilemap-binding.cpp
binding-mruby/etc-binding.cpp
binding-mruby/graphics-binding.cpp
binding-mruby/input-binding.cpp
binding-mruby/table-binding.cpp
binding-mruby/module_rpg.c
binding-mruby/mrb-ext/file.cpp
binding-mruby/mrb-ext/marshal.cpp
binding-mruby/mrb-ext/rwmem.cpp
binding-mruby/mrb-ext/kernel.cpp
binding-mruby/mrb-ext/time.cpp
)
2013-12-31 21:24:14 +00:00
elseif(BINDING STREQUAL "NULL")
set(BINDING_SOURCE
binding-null/binding-null.cpp
)
2013-12-31 21:24:14 +00:00
else()
message(FATAL_ERROR "Must choose a valid binding type. MRI, MRUBY, or NULL")
2013-12-31 21:24:14 +00:00
endif()
source_group("Binding Source" FILES ${BINDING_SOURCE} ${BINDING_HEADERS})
2013-12-31 21:24:14 +00:00
## Setup main executable ##
if(APPLE)
find_library(CARBON_LIBRARY Carbon)
find_library(IOKIT_LIBRARY IOKit)
mark_as_advanced(CARBON_LIBRARY IOKIT_LIBRARY)
list(APPEND PLATFORM_LIBRARIES
${CARBON_LIBRARY}
${IOKIT_LIBRARY}
"-liconv"
)
2013-12-31 21:24:14 +00:00
endif()
link_directories(
${SIGCXX_LIBRARY_DIRS}
${PIXMAN_LIBRARY_DIRS}
${PHYSFS_LIBRARY_DIRS}
${SDL2_LIBRARY_DIRS} # Blindly assume other SDL bits are in same directory
2018-04-29 17:18:36 +00:00
# ${Boost_LIBRARY_DIR}
${MRI_LIBDIR}
2013-12-31 21:24:14 +00:00
)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE
${MAIN_HEADERS}
${MAIN_SOURCE}
${BINDING_HEADERS}
${BINDING_SOURCE}
${EMBEDDED_SOURCE}
2013-12-31 21:24:14 +00:00
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
${DEFINES}
2013-12-31 21:24:14 +00:00
)
target_include_directories(${PROJECT_NAME} PRIVATE
src
windows
${SIGCXX_INCLUDE_DIRS}
${PIXMAN_INCLUDE_DIRS}
${PHYSFS_INCLUDE_DIRS}
${SDL2_INCLUDE_DIRS} # Blindly assume other SDL bits are in same directory
2018-04-29 17:18:36 +00:00
# ${Boost_INCLUDE_DIR}
${MRI_INCLUDE_DIRS}
${VORBISFILE_INCLUDE_DIRS}
${FLUID_INCLUDE_DIRS}
2019-09-26 19:32:29 +00:00
${OpenAL_INCLUDE_DIRS}
2018-04-29 17:18:36 +00:00
${SDL_SOUND_INCLUDE_DIRS}
${FREETYPE_INCLUDE_DIRS}
2019-09-26 19:32:29 +00:00
"/home/gabriel/Programmierung/mkxp_js/deps_js/install/lib/ruby/1.8/x86_64-linux"
"/home/gabriel/Programmierung/mkxp_js/deps_js/install/lib/ruby/1.8"
2013-12-31 21:24:14 +00:00
)
target_link_libraries(${PROJECT_NAME}
${SIGCXX_LIBRARIES}
${SDL2_LIBRARIES}
${SDL2_IMAGE_LIBRARIES}
${SDL2_TTF_LIBRARIES}
${SDL_SOUND_LIBRARIES}
${PHYSFS_LIBRARIES}
${PIXMAN_LIBRARIES}
2018-04-29 17:18:36 +00:00
# ${Boost_LIBRARIES}
${MRI_LIBRARIES}
${VORBISFILE_LIBRARIES}
${FLUID_LIBRARIES}
2019-09-26 19:32:29 +00:00
${OpenAL_LIBRARY}
${ZLIB_LIBRARY}
${PLATFORM_LIBRARIES}
2018-04-29 17:18:36 +00:00
"libruby-static.a"
"libfreetype.a"
"libz.a"
"libpng.a"
"libogg.a"
"libvorbis.a"
"libvorbisfile.a"
"libjpeg.a"
2013-12-31 21:24:14 +00:00
)
PostBuildMacBundle(${PROJECT_NAME} "" "${PLATFORM_COPY_LIBS}")