diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-05-23 02:20:13 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-05-23 02:20:13 +0900 |
| commit | df25301d8081b9351d8a2a9910c2f1d36de3f134 (patch) | |
| tree | 4f9cb83bab56b02a41a6139c8d23d7b071529845 /mrblib | |
| parent | f44acf7bf87c8f4ad258a41bb7884c1f09a8aab9 (diff) | |
| parent | 0dc183b8f473e1398b1aeada9a39d96ad4d81518 (diff) | |
| download | mruby-df25301d8081b9351d8a2a9910c2f1d36de3f134.tar.gz mruby-df25301d8081b9351d8a2a9910c2f1d36de3f134.zip | |
Merge branch 'master' of github.com:mruby/mruby
Diffstat (limited to 'mrblib')
| -rw-r--r-- | mrblib/CMakeLists.txt | 62 |
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 |
