this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Simplify mruby build system

* Genericize cross compilation
* Clean mruby build artifacts with make/ninja clean

+28 -33
+19 -7
CMakeLists.txt
··· 242 242 set(MRUBY_DIR ${THIRDPARTY_DIR}/mruby) 243 243 set(MRUBY_CONFIG ${CMAKE_SOURCE_DIR}/mruby/tic_default.rb) 244 244 set(MRUBY_LIB ${MRUBY_DIR}/build/target/lib/libmruby.a) 245 - if(EMSCRIPTEN) 246 - set(MRUBY_TOOLCHAIN emscripten) 247 - set(MRUBY_CROSS_TOOLCHAIN emscripten) 248 - elseif(MSVC) 245 + if(MSVC) 249 246 set(MRUBY_TOOLCHAIN visualcpp) 247 + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") 248 + set(MRUBY_TOOLCHAIN clang) 249 + else() 250 + set(MRUBY_TOOLCHAIN gcc) 250 251 endif() 252 + message(NOTICE "\ 253 + Caveat:\n\ 254 + * mruby target (\"target\") will attempt to use the same toolchain as \ 255 + CMake, namely \"${MRUBY_TOOLCHAIN}\".\n\ 256 + * mruby bootstrap (\"host\") will automatically detect a usable toolchain, \ 257 + which may be different than the one used by CMake.") 251 258 252 259 ExternalProject_Add(mruby_vendor 253 260 SOURCE_DIR ${MRUBY_DIR} ··· 256 263 BUILD_COMMAND 257 264 ${RAKE} "MRUBY_CONFIG=${MRUBY_CONFIG}" 258 265 "TARGET_CC=${CMAKE_C_COMPILER}" 259 - "TARGET_CXX=${CMAKE_CXX_COMPILER}" 260 266 "TARGET_LD=${CMAKE_C_LINK_EXECUTABLE}" 261 267 "TARGET_AR=${CMAKE_AR}" 262 268 "TARGET_CFLAGS=${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BUILD_TYPE_UC}}" 263 - "TARGET_CXXFLAGS=${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BUILD_TYPE_UC}}" 264 269 "TARGET_LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_LINKER_FLAGS_${BUILD_TYPE_UC}}" 265 270 "BUILD_TYPE=${BUILD_TYPE_UC}" 266 271 "MRUBY_TOOLCHAIN=${MRUBY_TOOLCHAIN}" 267 - "MRUBY_CROSS_TOOLCHAIN=${MRUBY_CROSS_TOOLCHAIN}" 268 272 INSTALL_COMMAND "" 269 273 BUILD_BYPRODUCTS ${MRUBY_LIB} 274 + ) 275 + set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES 276 + "${MRUBY_DIR}/build" 277 + "${MRUBY_DIR}/bin" 278 + ) 279 + set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES 280 + "${MRUBY_DIR}/build" 281 + "${MRUBY_DIR}/bin" 270 282 ) 271 283 272 284 add_library(mruby STATIC IMPORTED GLOBAL)
+9 -26
mruby/tic_default.rb
··· 1 1 MRuby::Build.new do |conf| 2 - # load specific toolchain settings 3 2 conf.toolchain 4 3 5 - # include the GEM box 6 4 conf.gembox 'default' 7 5 8 6 conf.enable_bintest 9 7 conf.enable_test 10 8 end 11 9 12 - MRuby::Toolchain.new('emscripten') do |conf| 13 - toolchain :clang 14 - 15 - conf.cc.command = ENV['TARGET_CC'] || 'emcc' 16 - conf.cxx.command = ENV['TARGET_CXX'] || 'emcc' 17 - conf.linker.command = ENV['TARGET_LD'] || 'emcc' 18 - conf.archiver.command = ENV['TARGET_AR'] || 'emar' 19 - end 20 - 21 - BuildClazz = (ENV['MRUBY_CROSS_TOOLCHAIN'] || '').empty? ? MRuby::Build : MRuby::CrossBuild 10 + MRuby::CrossBuild.new('target') do |conf| 11 + toolchain ENV['MRUBY_TOOLCHAIN'] 22 12 23 - BuildClazz.new('target') do |conf| 24 - # load specific toolchain settings 25 - if (ENV['MRUBY_TOOLCHAIN'] || '').empty? 26 - conf.toolchain 27 - else 28 - toolchain ENV['MRUBY_TOOLCHAIN'] 29 - end 30 - 31 - # include the GEM box 32 13 conf.gembox File.expand_path('tic', File.dirname(__FILE__)) 33 14 34 - # C compiler settings 35 15 conf.cc do |cc| 16 + cc.command = ENV["TARGET_CC"] || 'cc' 36 17 cc.flags = [ENV["TARGET_CFLAGS"] || %w()] 37 18 unless ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] 38 19 cc.flags << '-fPIC' 39 20 end 40 21 end 41 22 42 - # Linker settings 43 23 conf.linker do |linker| 44 - linker.flags = [ENV['TARGET_LDFLAGS'] || []] 24 + linker.command = ENV['TARGET_LD'] || 'ld' 25 + linker.flags = [ENV['TARGET_LDFLAGS'] || %w()] 45 26 end 46 27 47 - # file extensions 28 + conf.archiver do |archiver| 29 + archiver.command = ENV['TARGET_AR'] || 'ar' 30 + end 31 + 48 32 conf.exts do |exts| 49 33 exts.object = '.o' 50 34 exts.library = '.a' 51 35 # exts.executable = '' # '.exe' if Windows 52 36 end 53 37 54 - # Turn on `enable_debug` for better debugging 55 38 conf.enable_debug if /DEBUG/ =~ ENV["BUILD_TYPE"] 56 39 conf.enable_bintest 57 40 conf.enable_test