-
Notifications
You must be signed in to change notification settings - Fork 784
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First cmake build system. Works on Linux.
- Loading branch information
Showing
12 changed files
with
205 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |||
|
|||
|
|||
|
|||
|
|||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.