summaryrefslogtreecommitdiffhomepage
path: root/mrblib
diff options
context:
space:
mode:
authorJon <[email protected]>2012-05-02 20:46:09 -0400
committerJon <[email protected]>2012-05-22 10:50:28 -0400
commit9f89da6eef2c830db6fc3abb08fe755ae7ce9b6c (patch)
treed1feb367d93853b5f05ce2bbed2171a561631b31 /mrblib
parentb5dcb7128d7d235b66b4d9be879d26364dd1e3e9 (diff)
downloadmruby-9f89da6eef2c830db6fc3abb08fe755ae7ce9b6c.tar.gz
mruby-9f89da6eef2c830db6fc3abb08fe755ae7ce9b6c.zip
Add native and cross compiling CMake build support
Diffstat (limited to 'mrblib')
-rw-r--r--mrblib/CMakeLists.txt89
-rw-r--r--mrblib/Makefile (renamed from mrblib/Makefile.orig)0
2 files changed, 58 insertions, 31 deletions
diff --git a/mrblib/CMakeLists.txt b/mrblib/CMakeLists.txt
index 30881c611..b9fa22587 100644
--- a/mrblib/CMakeLists.txt
+++ b/mrblib/CMakeLists.txt
@@ -1,35 +1,62 @@
-# build mrblib
-# need custom commands
-# Compile C source from merged mruby source
+# transform mruby's standard lib into a C library
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)
+if(CMAKE_CROSSCOMPILING)
+ # create native tools and `mrblib.ctmp` required to build `mrblib.c`
+ include(ExternalProject)
+ ExternalProject_Add(mruby-native
+ DOWNLOAD_COMMAND ""
+ SOURCE_DIR "${CMAKE_SOURCE_DIR}"
+ CONFIGURE_COMMAND "${CMAKE_COMMAND}" "${CMAKE_SOURCE_DIR}"
+ INSTALL_COMMAND ""
+ BINARY_DIR "${CMAKE_BINARY_DIR}/native"
+ )
+ # aggregate mruby's standard library as a single C file
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/mrblib.c"
+ DEPENDS mruby-native init_mrblib.c "${CMAKE_BINARY_DIR}/native/mrblib/mrblib.ctmp"
+ COMMAND "${CMAKE_BINARY_DIR}/native/tools/xpcat/xpcat"
+ -o "${CMAKE_CURRENT_BINARY_DIR}/mrblib.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/init_mrblib.c"
+ "${CMAKE_BINARY_DIR}/native/mrblib/mrblib.ctmp"
+ )
+else()
+ # generate a single rb file from all existing ones
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/mrblib.rbtmp"
+ DEPENDS xpcat
+ COMMAND xpcat -o "${CMAKE_CURRENT_BINARY_DIR}/mrblib.rbtmp" ${MRBLIB_SRC_RB}
+ )
+
+ # mruby compile and generate C byte array representation
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/mrblib.ctmp"
+ DEPENDS mrbc "${CMAKE_CURRENT_BINARY_DIR}/mrblib.rbtmp"
+ COMMAND mrbc -Bmrblib_irep -o"${CMAKE_CURRENT_BINARY_DIR}/mrblib.ctmp"
+ "${CMAKE_CURRENT_BINARY_DIR}/mrblib.rbtmp"
+ )
+
+ # aggregate mruby's standard library as a single C file
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/mrblib.c"
+ DEPENDS xpcat init_mrblib.c "${CMAKE_CURRENT_BINARY_DIR}/mrblib.ctmp"
+ COMMAND xpcat -o "${CMAKE_CURRENT_BINARY_DIR}/mrblib.c"
+ "${CMAKE_CURRENT_SOURCE_DIR}/init_mrblib.c"
+ "${CMAKE_CURRENT_BINARY_DIR}/mrblib.ctmp"
+ )
+endif()
+
+
+add_library(mrblib_object OBJECT mrblib.c)
+
+# generate final static libmruby archive library
+add_library(libmruby_static STATIC
+ $<TARGET_OBJECTS:mruby_object>
+ $<TARGET_OBJECTS:mrblib_object>
+ )
+set_target_properties(libmruby_static PROPERTIES OUTPUT_NAME mruby)
+
+install(TARGETS libmruby_static
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ )
+
+# vim: ts=2 sts=2 sw=2 et
diff --git a/mrblib/Makefile.orig b/mrblib/Makefile
index d22c4509f..d22c4509f 100644
--- a/mrblib/Makefile.orig
+++ b/mrblib/Makefile