Files
TIC-80/cmake/mruby.cmake

115 lines
3.6 KiB
CMake

################################
# MRUBY
################################
option(BUILD_WITH_RUBY "Ruby Enabled" ${BUILD_WITH_ALL})
message("BUILD_WITH_RUBY: ${BUILD_WITH_RUBY}")
if(BUILD_WITH_RUBY AND PREFER_SYSTEM_LIBRARIES)
find_path(mruby_INCLUDE_DIR NAMES mruby.h)
find_library(mruby_LIBRARY NAMES mruby)
if(mruby_INCLUDE_DIR AND mruby_LIBRARY)
add_library(ruby STATIC
${CMAKE_SOURCE_DIR}/src/api/mruby.c
${CMAKE_SOURCE_DIR}/src/api/parse_note.c
)
target_compile_definitions(ruby INTERFACE TIC_BUILD_WITH_RUBY)
target_link_libraries(ruby PRIVATE runtime ${mruby_LIBRARY})
target_include_directories(ruby
PUBLIC ${mruby_INCLUDE_DIR}
PRIVATE
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
)
message(STATUS "Use sytem library: mruby")
return()
else()
message(WARNING "System library mruby not found")
endif()
endif()
if(BUILD_WITH_RUBY)
find_program(RUBY ruby)
find_program(RAKE rake)
list(APPEND RUBY_SRC ${CMAKE_SOURCE_DIR}/src/api/mruby.c)
list(APPEND RUBY_SRC ${CMAKE_SOURCE_DIR}/src/api/parse_note.c)
add_library(ruby ${TIC_RUNTIME} ${RUBY_SRC})
if(NOT BUILD_STATIC)
set_target_properties(ruby PROPERTIES PREFIX "")
else()
target_compile_definitions(ruby INTERFACE TIC_BUILD_WITH_RUBY=1)
endif()
target_link_libraries(ruby PRIVATE runtime)
if(CMAKE_BUILD_TYPE)
string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE_UC)
endif()
set(MRUBY_BUILDDIR ${CMAKE_SOURCE_DIR}/build/mruby)
set(MRUBY_DIR ${THIRDPARTY_DIR}/mruby)
if(ANDROID)
set(MRUBY_CONFIG ${MRUBY_BUILDDIR}/tic_android.rb)
else()
set(MRUBY_CONFIG ${MRUBY_BUILDDIR}/tic_default.rb)
endif()
set(MRUBY_LIB ${MRUBY_DIR}/build/target/lib/libmruby.a)
target_include_directories(ruby
PUBLIC ${MRUBY_DIR}/include
PRIVATE
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
)
if(MSVC)
set(MRUBY_TOOLCHAIN visualcpp)
elseif(APPLE OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(MRUBY_TOOLCHAIN clang)
else()
set(MRUBY_TOOLCHAIN gcc)
endif()
if(APPLE)
execute_process(COMMAND xcrun --sdk macosx --show-sdk-path OUTPUT_VARIABLE MRUBY_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
if(ANDROID_NDK_HOME)
set(MRUBY_RAKE_EXTRA_OPTS "${MRUBY_RAKE_EXTRA_OPTS} ANDROID_NDK_HOME=${ANDROID_NDK_HOME}")
endif()
include(ExternalProject)
ExternalProject_Add(mruby_vendor
SOURCE_DIR ${MRUBY_DIR}
CONFIGURE_COMMAND ""
BUILD_IN_SOURCE TRUE
BUILD_COMMAND
${RAKE} clean all "MRUBY_CONFIG=${MRUBY_CONFIG}"
"TARGET_CC=\"${CMAKE_C_COMPILER}\""
"TARGET_AR=\"${CMAKE_AR}\""
"TARGET_CFLAGS=${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BUILD_TYPE_UC}}"
"TARGET_LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_LINKER_FLAGS_${BUILD_TYPE_UC}}"
"BUILD_TYPE=${BUILD_TYPE_UC}"
"MRUBY_SYSROOT=${MRUBY_SYSROOT}"
"MRUBY_TOOLCHAIN=${MRUBY_TOOLCHAIN}"
"ANDROID_ARCH=${CMAKE_ANDROID_ARCH_ABI}"
"ANDROID_PLATFORM=android-${CMAKE_SYSTEM_VERSION}"
${MRUBY_RAKE_EXTRA_OPTS}
INSTALL_COMMAND ""
BUILD_BYPRODUCTS ${MRUBY_LIB}
)
set_property(TARGET ruby APPEND
PROPERTY IMPORTED_LOCATION ${MRUBY_LIB}
)
add_dependencies(ruby mruby_vendor)
target_link_libraries(ruby PRIVATE ${MRUBY_LIB})
endif()