mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
First cmake build system. Works on Linux.
This commit is contained in:
+124
@@ -0,0 +1,124 @@
|
||||
#
|
||||
# Cmake build system for muby by beoran@rubyforhe.org, 2012.
|
||||
# Released under the same license as mruby.
|
||||
#
|
||||
# NOTE: the original Makefile build system had a few hacks in them,
|
||||
# whch I didn't duplicate. In stead the build logic is like this:
|
||||
# 1) First libritevm_object is built
|
||||
# 2) From this libritevm_static.a is built.
|
||||
# 2) Then mrbc is built and linked with libritevm_static.a .
|
||||
# 4) Then libmrblib_object is builtfrom are built from the rb files in
|
||||
# the mrblib subdirectory
|
||||
# 5) Then libmrblib_object & libritevm_object are linked together into
|
||||
# a single library libmrubylib_static.a
|
||||
# 6) Finally, mruby is built and linked with libmrubylib_static.a
|
||||
#
|
||||
# As a result, applications that embed mruby will have to link against
|
||||
# libmrubylib_static.a only..
|
||||
#
|
||||
# TODO: make this work on windows too, support build options to generate
|
||||
# mrbconf.h, etc...
|
||||
#
|
||||
|
||||
# Setup
|
||||
# Need at least cmake version 2.8.8
|
||||
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
|
||||
if(COMMAND cmake_policy)
|
||||
cmake_policy(SET CMP0003 NEW)
|
||||
cmake_policy(SET CMP0015 NEW)
|
||||
endif(COMMAND cmake_policy)
|
||||
|
||||
# Set the project name, we use only plain C.
|
||||
project(MRUBY C)
|
||||
|
||||
# C compiler flags.
|
||||
set(CMAKE_C_FLAGS "-Wall -g")
|
||||
# should use -O3 if it's a release build.bin/mrb
|
||||
|
||||
|
||||
# Version of mruby, useful for versoning .so and .dll files.
|
||||
set(MRUBY_VERSION 1.0.0)
|
||||
string(REGEX MATCH "^[0-9]+[.][0-9]+" MRUBY_SOVERSION ${MRUBY_VERSION})
|
||||
string(REPLACE "." "" MRUBY_DLL_SHORTVER ${MRUBY_SOVERSION})
|
||||
|
||||
# Search in the `cmake' directory for additional CMake modules if needed.
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
||||
|
||||
# Search for C header files in these directories.
|
||||
include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src)
|
||||
|
||||
# Search for libaries too link tools with here:
|
||||
link_directories("lib")
|
||||
link_directories("mrblib")
|
||||
|
||||
# put binaries that get built in bin
|
||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
|
||||
# Put libraries that get built into `lib'.
|
||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
|
||||
|
||||
if(NOT IPHONE)
|
||||
option(SHARED "Build shared libraries" on)
|
||||
set(BUILD_SHARED_LIBS ${SHARED}) # actual CMake variable
|
||||
endif(NOT IPHONE)
|
||||
|
||||
# On some 64-bit platforms, libraries should be installed into `lib64'
|
||||
# instead of `lib'. Set this to 64 to do that.
|
||||
set(LIB_SUFFIX "" CACHE STRING "Suffix for 'lib' directories, e.g. '64'")
|
||||
|
||||
set(FRAMEWORK_INSTALL_PREFIX "/Library/Frameworks" CACHE STRING
|
||||
"Directory in which to install Mac OS X frameworks")
|
||||
|
||||
# Options (none yet).
|
||||
|
||||
# Set up compilers.
|
||||
|
||||
include(CheckCSourceCompiles)
|
||||
|
||||
# Begin tests
|
||||
|
||||
include(CheckFunctionExists)
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckLibraryExists)
|
||||
include(CheckSymbolExists)
|
||||
include(CheckTypeSize)
|
||||
include(FindPkgConfig)
|
||||
include(TestBigEndian)
|
||||
|
||||
|
||||
# lib Libraries that mruby uses itself (just libm)
|
||||
set(MRUBY_LIBS m)
|
||||
|
||||
# Compile the sources to make libritevm
|
||||
add_subdirectory("src")
|
||||
|
||||
# compile the compiler tool
|
||||
add_subdirectory("tools/mrbc")
|
||||
|
||||
# compile libmrblib
|
||||
add_subdirectory("mrblib")
|
||||
|
||||
# generate final library
|
||||
add_library(mrubylib_static STATIC
|
||||
$<TARGET_OBJECTS:ritevm_object> $<TARGET_OBJECTS:mrblib_object>)
|
||||
add_library(mrubylib SHARED
|
||||
$<TARGET_OBJECTS:ritevm_object> $<TARGET_OBJECTS:mrblib_object>)
|
||||
|
||||
install(TARGETS mrubylib mrubylib_static
|
||||
LIBRARY DESTINATION lib
|
||||
ARCHIVE DESTINATION lib)
|
||||
|
||||
# compile the interpreter tool
|
||||
add_subdirectory("tools/mruby")
|
||||
|
||||
# for make install, install the header files
|
||||
install(FILES include/mruby.h DESTINATION include)
|
||||
install(FILES include/mrbconf.h DESTINATION include)
|
||||
install(DIRECTORY include/mruby DESTINATION include)
|
||||
# For now, also install header files in src dir to ${PREFIX}include/mruby
|
||||
file(GLOB SRC_HEADERS src/*.h)
|
||||
install (FILES ${SRC_HEADERS} DESTINATION include/mruby)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
* Prerequisites
|
||||
|
||||
1. Make sure you have bison (http://www.gnu.org/software/bison/) installed in your system.
|
||||
2 Make sure you have cmake (http://www.cmake.org version 2.8.8 or
|
||||
later installed).
|
||||
|
||||
|
||||
* Compilation and Installation
|
||||
|
||||
1. Run make in the top directory.
|
||||
|
||||
1. Run cmake . ; make ; make install in the top directory.
|
||||
|
||||
|
||||
This command will create the following directories and
|
||||
store libraries and binaries files into them.
|
||||
|
||||
* bin
|
||||
* lib
|
||||
* include
|
||||
* /usr/local/bin
|
||||
* /usr/local/lib
|
||||
* /usr/local/include
|
||||
|
||||
If an error occurs when compiling mruby, it will be helpful for others if you
|
||||
send a detailed report to the developers that includes the error log, machine,
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# build mrblib
|
||||
# need custom commands
|
||||
# Compile C source from merged mruby source
|
||||
|
||||
file(GLOB MRBLIB_SRC_RB "*.rb")
|
||||
|
||||
# generate the a single rubu file from all the existing ones.
|
||||
add_custom_command(OUTPUT mrblib.rbtmp
|
||||
COMMAND cat ${MRBLIB_SRC_RB} > mrblib.rbtmp
|
||||
DEPENDS ${MRBLIB_SRC_RB}
|
||||
)
|
||||
|
||||
# generate the intermediate representation in C
|
||||
add_custom_command(OUTPUT mrblib_irep.c
|
||||
COMMAND echo -B mrblib_irep -o mrblib_irep.c mrblib.rbtmp
|
||||
COMMAND mrbc -Bmrblib_irep -omrblib_irep.c mrblib.rbtmp
|
||||
DEPENDS mrblib.rbtmp
|
||||
)
|
||||
|
||||
# finally generate the library's c file
|
||||
add_custom_command(OUTPUT mrblib.c
|
||||
COMMAND cat init_mrblib.c mrblib_irep.c > mrblib.c
|
||||
DEPENDS init_mrblib.c mrblib_irep.c
|
||||
)
|
||||
|
||||
# only use this C file to generate mrblib.
|
||||
set(MRBLIB_SRC_C mrblib.c)
|
||||
# add_library(mrblib_static STATIC ${MRBLIB_SRC_C})
|
||||
add_library(mrblib_object OBJECT ${MRBLIB_SRC_C})
|
||||
# target_link_libraries(mrblib ritevm ${MRUBY_LIBS})
|
||||
# target_link_libraries(mrblib_static ritevm_static ${MRUBY_LIBS})
|
||||
# install(TARGETS mrblib mrblib_static
|
||||
# LIBRARY DESTINATION lib
|
||||
# ARCHIVE DESTINATION lib)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Build the C files in the mruby src directory
|
||||
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
if(CMAKE_VERSION VERSION_GREATER "2.8.0")
|
||||
cmake_policy(SET CMP0012 OLD)
|
||||
endif()
|
||||
|
||||
find_package(BISON)
|
||||
BISON_TARGET(mruby parse.y ${CMAKE_CURRENT_BINARY_DIR}/parse.c)
|
||||
|
||||
# configure_file("config.in.h" "config.h")
|
||||
file(GLOB MRUBY_SRC_C "*.c")
|
||||
add_library(ritevm_object OBJECT ${MRUBY_SRC_C})
|
||||
add_library(ritevm_static STATIC $<TARGET_OBJECTS:ritevm_object>)
|
||||
add_library(ritevm SHARED $<TARGET_OBJECTS:ritevm_object>)
|
||||
|
||||
|
||||
# target_link_libraries(ritevm ${MRUBY_LIBS})
|
||||
# target_link_libraries(ritevm_static ${MRUBY_LIBS})
|
||||
# install(TARGETS ritevm ritevm_static
|
||||
# LIBRARY DESTINATION lib
|
||||
# ARCHIVE DESTINATION lib)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# builds tools/mrbc
|
||||
file(GLOB MRBC_SRC_C "*.c")
|
||||
add_executable(mrbc ${MRBC_SRC_C})
|
||||
target_link_libraries(mrbc ritevm_static ${MRUBY_LIBS})
|
||||
install(TARGETS mrbc RUNTIME DESTINATION bin)
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# builds tools/mrbc
|
||||
file(GLOB MRUBYBIN_SRC_C "*.c")
|
||||
add_executable(mruby ${MRUBYBIN_SRC_C})
|
||||
target_link_libraries(mruby mrubylib_static ${MRUBY_LIBS})
|
||||
install(TARGETS mruby RUNTIME DESTINATION bin)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user