From 91197f5734c4a3aa7c030c8a50df170c959940d1 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Fri, 31 Oct 2014 15:33:41 -0400 Subject: [PATCH] Updated build-system to migrate away from rake --- Gemfile | 8 ++--- Gemfile.lock | 6 ++-- build-system | 2 +- build.rb | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 build.rb diff --git a/Gemfile b/Gemfile index 2787500..1750c4a 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ -source 'http://rubygems.org' -gem 'rscons' -gem 'rake' -gem 'rspec' +gem 'rake', '>= 0' +gem 'rscons', '>= 0' +gem 'rspec', '>= 0' +gem 'trollop', '>= 0' diff --git a/Gemfile.lock b/Gemfile.lock index 03860b2..935b02b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,10 +1,9 @@ GEM - remote: http://rubygems.org/ specs: diff-lcs (1.2.5) json (1.8.1) rake (10.3.2) - rscons (1.7.0) + rscons (1.8.1) json (~> 1.0) rspec (3.1.0) rspec-core (~> 3.1.0) @@ -18,12 +17,13 @@ GEM rspec-mocks (3.1.3) rspec-support (~> 3.1.0) rspec-support (3.1.2) + trollop (2.0) PLATFORMS - ruby x86-mingw32 DEPENDENCIES rake rscons rspec + trollop diff --git a/build-system b/build-system index 727e6f5..35189ce 160000 --- a/build-system +++ b/build-system @@ -1 +1 @@ -Subproject commit 727e6f5ffd84778e13f16fffafbc42a987dd1796 +Subproject commit 35189ce8dadd9924e8f2eddb35ed1d3167a6cb42 diff --git a/build.rb b/build.rb new file mode 100644 index 0000000..f950738 --- /dev/null +++ b/build.rb @@ -0,0 +1,84 @@ +#!/bin/env ruby +require './build-system/setup' + +def windows? + RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/ +end + +#------------------------------------------------------------------------------ +# Environment Definitions +#------------------------------------------------------------------------------ +# Define the default compiler environment +base_env = BuildEnv.new do |env| + # Move the object files to the build dir + env.build_dir('source','build/obj/source') + env.build_dir('modules','build/obj/modules') + + # 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) + 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' + + # Compiler options + env["CFLAGS"] += ['-DLEAK_DETECT_LEVEL=1', '--std=c99', '-Wall', '-Wextra']#, '-Werror'] + env["CPPPATH"] += ['modules/libopts/source'] + Dir['modules/libcds/source/**/'] +end + +# Define the release environment +main_env = base_env.clone do |env| + # Move the object files to the build dir + env.build_dir('source','build/obj/source') + env.build_dir('modules','build/obj/modules') + env["CFLAGS"] += ['-O3'] +end + +# Define the test environment +test_env = base_env.clone do |env| + # Move the object files to the build dir + env.build_dir('source','build/obj_test/source') + env.build_dir('modules','build/obj_test/modules') + env['CFLAGS'] += ['-O0', '--coverage'] + env['LDFLAGS'] += ['--coverage'] +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}']) + +# Register clang with the environment +ENV['PATH'] = "build/llvm/bin/#{windows? ? ';':':'}#{ENV['PATH']}" + +#------------------------------------------------------------------------------ +# Release Build Targets +#------------------------------------------------------------------------------ +main_env.Library('build/lib/libcds.a', FileList['modules/libcds/source/**/*.c']) +main_env.Library('build/lib/libopts.a', FileList['modules/libopts/source/**/*.c']) +main_env.Program('build/bin/sclpl', + FileList['source/sclpl/*.c', 'build/lib/libopts.a', 'build/lib/libcds.a']) + +#------------------------------------------------------------------------------ +# Test Build Targets +#------------------------------------------------------------------------------ +test_env.Program('build/bin/sclpl-test', + FileList['source/sclpl/*.c', 'build/lib/libopts.a', 'build/lib/libcds.a']) +test_env.Command('RSpec', [], 'CMD' => [ + 'rspec', '--pattern', 'spec/**{,/*/**}/*_spec.rb', '--format', 'documentation']) + -- 2.55.0