From 35e65b0420e1c815a31505d42a5dd514ba778bd3 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 9 Mar 2010 17:14:35 +0200 Subject: Establish the build system --- build/bootstrap.make | 86 +++++++++++++++++++++ build/import/libcutl/LICENSE | 21 ++++++ build/import/libcutl/configuration-rules.make | 15 ++++ build/import/libcutl/configure | 55 ++++++++++++++ build/import/libcutl/stub.make | 30 ++++++++ odb/makefile | 105 ++++++++++++++++++++++---- 6 files changed, 297 insertions(+), 15 deletions(-) create mode 100644 build/bootstrap.make create mode 100644 build/import/libcutl/LICENSE create mode 100644 build/import/libcutl/configuration-rules.make create mode 100755 build/import/libcutl/configure create mode 100644 build/import/libcutl/stub.make diff --git a/build/bootstrap.make b/build/bootstrap.make new file mode 100644 index 0000000..8522153 --- /dev/null +++ b/build/bootstrap.make @@ -0,0 +1,86 @@ +# file : build/bootstrap.make +# author : Boris Kolpackov +# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +project_name := odb + +# First try to include the bundled bootstrap.make if it exist. If that +# fails, let make search for the external bootstrap.make. +# +build := build-0.3 + +-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make + +ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),) +include $(build)/bootstrap.make +endif + +def_goal := $(.DEFAULT_GOAL) + +# Include C++ configuration. We need to know if we are using the generic +# C++ compiler in which case we need to compensate for missing dependency +# auto-generation (see below). +# +$(call include,$(bld_root)/cxx/configuration.make) + +# Aliases +# +.PHONY: $(out_base)/ \ + $(out_base)/.test \ + $(out_base)/.install \ + $(out_base)/.clean \ + $(out_base)/.cleandoc + +ifdef %interactive% + +.PHONY: test install clean cleandoc + +test: $(out_base)/.test +install: $(out_base)/.install +clean: $(out_base)/.clean +cleandoc: $(out_base)/.cleandoc + +endif + +# If we don't have dependency auto-generation then we need to manually +# make sure that C++ header files are compiled before C++ source files. +# To do this we make the object files ($2) depend in order-only on +# generated files ($3). +# +ifeq ($(cxx_id),generic) + +define include-dep +$(if $2,$(eval $2: | $3)) +endef + +else + +define include-dep +$(call -include,$1) +endef + +endif + + +# Don't include dependency info for certain targets. +# +ifneq ($(filter $(MAKECMDGOALS),clean cleandoc disfigure),) +include-dep = +endif + +# For install, don't include dependecies in examples, and tests. +# +ifneq ($(filter $(MAKECMDGOALS),install),) + +ifneq ($(subst $(src_root)/tests/,,$(src_base)),$(src_base)) +include-dep = +endif + +ifneq ($(subst $(src_root)/examples/,,$(src_base)),$(src_base)) +include-dep = +endif + +endif + +.DEFAULT_GOAL := $(def_goal) diff --git a/build/import/libcutl/LICENSE b/build/import/libcutl/LICENSE new file mode 100644 index 0000000..5306eea --- /dev/null +++ b/build/import/libcutl/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) Code Synthesis Tools CC, 2009. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/build/import/libcutl/configuration-rules.make b/build/import/libcutl/configuration-rules.make new file mode 100644 index 0000000..9f62e17 --- /dev/null +++ b/build/import/libcutl/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libcutl/configuration-rules.make +# author : Boris Kolpackov +# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + +$(dcf_root)/import/libcutl/configuration-dynamic.make: | $(dcf_root)/import/libcutl/. + $(call message,,$(scf_root)/import/libcutl/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libcutl/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libcutl/configuration-dynamic.make) + +endif diff --git a/build/import/libcutl/configure b/build/import/libcutl/configure new file mode 100755 index 0000000..34903a9 --- /dev/null +++ b/build/import/libcutl/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libcutl/configure +# author : Boris Kolpackov +# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libcutl' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libcutl' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libcutl'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libcutl'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libcutl_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/build/import/libcutl/stub.make b/build/import/libcutl/stub.make new file mode 100644 index 0000000..3267822 --- /dev/null +++ b/build/import/libcutl/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libcutl/stub.make +# author : Boris Kolpackov +# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libcutl/configuration-rules.make,$(dcf_root)) + +libcutl_installed := + +$(call -include,$(dcf_root)/import/libcutl/configuration-dynamic.make) + +ifdef libcutl_installed + +ifeq ($(libcutl_installed),y) + +$(call export,l: -lcutl,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libcutl/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/odb/makefile b/odb/makefile index 9a5fab9..c0c0888 100644 --- a/odb/makefile +++ b/odb/makefile @@ -1,23 +1,98 @@ -GXX=g++-4.5 -PLUGIN_INC := $(shell $(GXX) -print-file-name=plugin) +# file : odb/makefile +# author : Boris Kolpackov +# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file -src := plugin.cxx -obj := $(src:.cxx=.o) +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make -odb.so: $(obj) - $(GXX) -shared -o $@ $(CXXFLAGS) $(LDFLAGS) $^ $(LIBS) +# Plugin units. +# +cxx_ptun := plugin.cxx +cxx_ptun += + +# Driver units +# +cxx_dtun := odb.cxx + +# +# +cxx_pobj := $(addprefix $(out_base)/,$(cxx_ptun:.cxx=.o)) +cxx_dobj := $(addprefix $(out_base)/,$(cxx_dtun:.cxx=.o)) +cxx_pod := $(cxx_pobj:.o=.o.d) +cxx_dod := $(cxx_dobj:.o=.o.d) + +odb := $(out_base)/odb +odb_so := $(out_base)/odb.so +clean := $(out_base)/.clean +install := $(out_base)/.install + +# Import. +# +$(call import,\ + $(scf_root)/import/libcutl/stub.make,\ + l: cutl.l,cpp-options: cutl.l.cpp-options) + +# Build. +# +$(odb): $(cxx_dobj) $(cutl.l) | $(odb_so) +$(odb_so): $(cxx_pobj) $(cutl.l) + +$(cxx_dobj) $(cxx_dod): cpp_options := -I$(src_base) +$(cxx_pobj) $(cxx_dobj) $(cxx_pod) $(cxx_dod): $(cutl.l.cpp-options) + +$(call include-dep,$(cxx_pod)) +$(call include-dep,$(cxx_dod)) -%.o: %.cxx - $(GXX) -c -o $@ -fPIC $(CPPFLAGS) -I$(PLUGIN_INC)/include $(CXXFLAGS) $< +# Alias for default target. +# +$(out_base)/: $(odb) -# Test. +# Install. # -.PHONY: test -test: odb.so test.cxx - $(GXX) -x c++ -S -fplugin=./odb.so test.cxx +$(install): $(odb) + $(call install-exec,$<,$(install_bin_dir)/odb) + $(call install-exec,$<.so,$(install_bin_dir)/odb.so) # Clean. # -.PHONY: clean -clean: - rm -f *.o odb.so +$(clean): \ + $(odb).o.clean \ + $(addsuffix .cxx.clean,$(cxx_pobj)) \ + $(addsuffix .cxx.clean,$(cxx_dobj)) \ + $(addsuffix .cxx.clean,$(cxx_pod)) \ + $(addsuffix .cxx.clean,$(cxx_dod)) + $(call message,rm $$1,rm -f $$1,$(out_base)/odb.so) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(odb): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := odb odb.so +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# Rules. +# +$(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/o-e.make) + +# Custom rules for the plugin. +# +ifdef cxx_id + +$(cxx_pobj): cxx_pic_options := -fPIC + +$(cxx_pobj) $(cxx_pod): cpp_options := -I$(src_base) \ +-I$(shell $(cxx_gnu) -print-file-name=plugin)/include + +$(odb_so): + $(call message,ld $@,$(ld) \ +$(cxx_extra_options) $(ld_options) $(cxx_ld_extra_options) -shared -o $@ \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(cxx_extra_libs)) + +endif -- cgit v1.1