summaryrefslogtreecommitdiffhomepage
path: root/mrblib
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-23 02:20:13 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-23 02:20:13 +0900
commitdf25301d8081b9351d8a2a9910c2f1d36de3f134 (patch)
tree4f9cb83bab56b02a41a6139c8d23d7b071529845 /mrblib
parentf44acf7bf87c8f4ad258a41bb7884c1f09a8aab9 (diff)
parent0dc183b8f473e1398b1aeada9a39d96ad4d81518 (diff)
downloadmruby-df25301d8081b9351d8a2a9910c2f1d36de3f134.tar.gz
mruby-df25301d8081b9351d8a2a9910c2f1d36de3f134.zip
Merge branch 'master' of github.com:mruby/mruby
Diffstat (limited to 'mrblib')
-rw-r--r--mrblib/CMakeLists.txt62
1 files changed, 62 insertions, 0 deletions
diff --git a/mrblib/CMakeLists.txt b/mrblib/CMakeLists.txt
new file mode 100644
index 000000000..b9fa22587
--- /dev/null
+++ b/mrblib/CMakeLists.txt
@@ -0,0 +1,62 @@
+# transform mruby's standard lib into a C library
+
+file(GLOB MRBLIB_SRC_RB "*.rb")
+
+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