From: Michael D. Lowis Date: Sat, 1 Nov 2014 01:53:33 +0000 (-0400) Subject: Updated build.rb to use CMake and Make builders for building clang X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=2a40e65c275cbfa6eaf4453b52080e21f7348018;p=proto%2Fsclpl.git Updated build.rb to use CMake and Make builders for building clang --- diff --git a/Gemfile.lock b/Gemfile.lock index 67f7436..dbafdb2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -21,6 +21,7 @@ GEM trollop (2.0) PLATFORMS + ruby x86-mingw32 DEPENDENCIES diff --git a/build.rb b/build.rb old mode 100644 new mode 100755 index f950738..6087291 --- a/build.rb +++ b/build.rb @@ -1,4 +1,4 @@ -#!/bin/env ruby +#!/usr/bin/env ruby require './build-system/setup' def windows? @@ -17,17 +17,34 @@ base_env = BuildEnv.new do |env| # Use gcc toolchain env.set_toolset(:gcc) - # Add a builder for creating directories - env.add_builder :MakeDir do |target, sources, cache, env, vars| - cache.mkdir_p(target) - target if Dir.exists?(target) + # Add a builder for creating a CMake project + env.add_builder :CMake do |target, sources, cache, env, vars| + target_dir = File.dirname(target) + source_dir = "../" * target_dir.split(/\\|\//).length + File.dirname(sources.first) + cmd = env.expand_varref("${CMAKE_CMD}", vars.merge('_SOURCES' => source_dir)) + unless cache.up_to_date?(target, cmd, sources, env) + cache.mkdir_p(target_dir) + Dir.chdir(target_dir) { env.execute("CMake #{target}", cmd) } + cache.register_build(target, cmd, sources, env) + end + target if File.exists? target + end + + env.add_builder :Make do |target, sources, cache, env, vars| + working_dir = File.dirname(sources.first) + cmd = env.expand_varref("${MAKE_CMD}", vars) + unless cache.up_to_date?(target, cmd, sources, env) + Dir.chdir(working_dir) { env.execute("Make #{target}", cmd) } + cache.register_build(target, cmd, sources, env) + end + target if File.exists? target end # CMake Configuration env['CMAKE_GENERATOR'] = ENV['CMAKE_GENERATOR'] || "#{windows? ? 'NMake' : 'Unix'} Makefiles" env['CMAKE_FLAGS'] = [] - env['CMAKE_CMD'] = ['cmake', '-G', '${CMAKE_GENERATOR}', '${CMAKE_FLAGS}'] - env['MAKE_CMD'] = windows? ? 'nmake' : 'make' + env['CMAKE_CMD'] = ['cmake', '-G', '${CMAKE_GENERATOR}', '${CMAKE_FLAGS}', '${_SOURCES}'] + env['MAKE_CMD'] = [windows? ? 'nmake' : 'make'] # Compiler options env["CFLAGS"] += ['-DLEAK_DETECT_LEVEL=1', '--std=c99', '-Wall', '-Wextra']#, '-Werror'] @@ -54,14 +71,11 @@ end #------------------------------------------------------------------------------ # Clang Toolchain Targets #------------------------------------------------------------------------------ -main_env.MakeDir('build/llvm', []) -main_env.Command('build/llvm/Makefile', - Dir['source/vendor/llvm-3.4.2/CMakeLists.txt', - 'source/vendor/llvm-3.4.2/cmake/**/*/'], - 'CMD' => ['cd', 'build/llvm/', '&&', '${CMAKE_CMD}', '../../source/vendor/llvm-3.4.2/']) -main_env.Command("build/llvm/bin/clang#{windows? ? '.exe':''}", - Dir['source/vendor/llvm-3.4.2/tools/**/*.*'], - 'CMD' => ['cd', 'build/llvm', '&&', '${MAKE_CMD}']) +main_env.CMake('build/llvm/Makefile', + Dir['source/vendor/llvm-3.4.2/CMakeLists.txt', + 'source/vendor/llvm-3.4.2/cmake/**/*/']) +main_env.Make("build/llvm/bin/clang#{windows? ? '.exe':''}", + ['build/llvm/Makefile'] + Dir['source/vendor/llvm-3.4.2/tools/**/*.*']) # Register clang with the environment ENV['PATH'] = "build/llvm/bin/#{windows? ? ';':':'}#{ENV['PATH']}"