Skip to content

Commit

Permalink
First cmake build system. Works on Linux.
Browse files Browse the repository at this point in the history
  • Loading branch information
Beoran authored and jonforums committed May 22, 2012
1 parent abacbf6 commit b5dcb71
Show file tree
Hide file tree
Showing 12 changed files with 205 additions and 5 deletions.
124 changes: 124 additions & 0 deletions CMakeLists.txt
Original file line number Original file line Diff line number Diff line change
@@ -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)





14 changes: 9 additions & 5 deletions INSTALL
Original file line number Original file line Diff line number Diff line change
@@ -1,17 +1,21 @@
* Prerequisites * Prerequisites


1. Make sure you have bison (http://www.gnu.org/software/bison/) installed in your system. 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 * 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 This command will create the following directories and
store libraries and binaries files into them. store libraries and binaries files into them.


* bin * /usr/local/bin
* lib * /usr/local/lib
* include * /usr/local/include


If an error occurs when compiling mruby, it will be helpful for others if you 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, send a detailed report to the developers that includes the error log, machine,
Expand Down
File renamed without changes.
Empty file added build/.gitkeep
Empty file.
35 changes: 35 additions & 0 deletions mrblib/CMakeLists.txt
Original file line number Original file line Diff line number Diff line change
@@ -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)

File renamed without changes.
23 changes: 23 additions & 0 deletions src/CMakeLists.txt
Original file line number Original file line Diff line number Diff line change
@@ -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)

File renamed without changes.
7 changes: 7 additions & 0 deletions tools/mrbc/CMakeLists.txt
Original file line number Original file line Diff line number Diff line change
@@ -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)


File renamed without changes.
7 changes: 7 additions & 0 deletions tools/mruby/CMakeLists.txt
Original file line number Original file line Diff line number Diff line change
@@ -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)


File renamed without changes.

0 comments on commit b5dcb71

Please sign in to comment.