diff options
| author | Jon <[email protected]> | 2012-05-02 20:46:09 -0400 |
|---|---|---|
| committer | Jon <[email protected]> | 2012-05-22 10:50:28 -0400 |
| commit | 9f89da6eef2c830db6fc3abb08fe755ae7ce9b6c (patch) | |
| tree | d1feb367d93853b5f05ce2bbed2171a561631b31 /mrblib | |
| parent | b5dcb7128d7d235b66b4d9be879d26364dd1e3e9 (diff) | |
| download | mruby-9f89da6eef2c830db6fc3abb08fe755ae7ce9b6c.tar.gz mruby-9f89da6eef2c830db6fc3abb08fe755ae7ce9b6c.zip | |
Add native and cross compiling CMake build support
Diffstat (limited to 'mrblib')
| -rw-r--r-- | mrblib/CMakeLists.txt | 89 | ||||
| -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 |
