mirror of
https://github.com/nesbox/TIC-80.git
synced 2026-04-18 14:32:31 +00:00
115 lines
3.6 KiB
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() |