# These are platform dependant, so this is the file used to specify these
# system dependant operations.
#
-# The following functionality may be set by setting incoming variables:
+# The following functionality can be set by setting incoming variables.
+# The variable $(LEVEL) *must* be set:
#
# 1. LEVEL - The level of the current subdirectory from the top of the
# MagicStats view. This level should be expressed as a path, for
#
#===-----------------------------------------------------------------------====
+# Configuration file to set paths specific to local installation of LLVM
+#
+include $(LEVEL)/Makefile.config
+
# These are options that can either be enabled here, or can be enabled on the
# make command line (ie, make ENABLE_PROFILING=1)
#
#
#ENABLE_OPTIMIZED = 1
-# If you do not want to build into /shared, uncomment this
+
+# Figure out how to do platform specific stuff on this platform. This is really
+# gross and should be autoconfiscated (automake actually), but should hopefully
+# work on Linux and solaris (SunOS).
#
-#BUILD_ROOT = .
+UNAME := $(shell uname)
+include $(LEVEL)/Makefile.$(UNAME)
ifdef SHARED_LIBRARY
# if SHARED_LIBRARY is specified, the default is to build the dynamic lib
# /shared directory by default because it is guaranteed to be local to the
# current machine.
#
-ifdef BUILD_ROOT
-BUILD_ROOT_TOP := $(LEVEL)
+ifeq ($(LLVM_OBJ_DIR),.)
+BUILD_ROOT = $(LLVM_OBJ_DIR)
+BUILD_ROOT_TOP = $(LEVEL)
else
-LOGIN_NAME := $(shell whoami)
-CUR_DIRECTORY := $(shell pwd)
-BUILD_ROOT := /shared/$(LOGIN_NAME)$(patsubst $(HOME)%,%,$(CUR_DIRECTORY))
+BUILD_ROOT := $(LLVM_OBJ_DIR)$(patsubst $(HOME)%,%,$(shell pwd))
# Calculate the BUILD_ROOT_TOP variable, which is the top of the llvm/ tree.
# Note that although this is just equal to $(BUILD_ROOT)/$(LEVEL), we cannot use
# the directory to eliminate the ../'s
#
TOP_DIRECTORY := $(shell cd $(LEVEL); pwd)
-BUILD_ROOT_TOP := /shared/$(LOGIN_NAME)$(patsubst $(HOME)%,%,$(TOP_DIRECTORY))
+BUILD_ROOT_TOP := $(LLVM_OBJ_DIR)$(patsubst $(HOME)%,%,$(TOP_DIRECTORY))
endif
#--------------------------------------------------------------------
-# Installation configuration options...
+# Variables derived from configuration options...
#--------------------------------------------------------------------
#BinInstDir=/usr/local/bin
#LibInstDir=/usrl/local/lib/xxx
#DocInstDir=/usr/doc/xxx
-BURG = /home/vadve/vadve/Research/DynOpt/Burg/burg
BURG_OPTS = -I
-
-PURIFY = /usr/dcs/applications/purify/bin/purify -cache-dir="$(HOME)/purifycache" -chain-length="30" -messages=all
+PURIFY := $(PURIFY) -cache-dir="$(BUILD_ROOT_TOP)/../purifycache" -chain-length="30" -messages=all
# Shorthand for commonly accessed directories
LIBDEBUG := $(BUILD_ROOT_TOP)/lib/Debug
TOOLDEBUG := $(BUILD_ROOT_TOP)/tools/Debug
TOOLRELEASE := $(BUILD_ROOT_TOP)/tools/Release
+# Verbosity levels
+ifdef VERBOSE
+VERB :=
+else
+VERB := @
+endif
+
#---------------------------------------------------------
# Compilation options...
#---------------------------------------------------------
PROFILE =
endif
+# Allow gnu extensions...
+CPPFLAGS += -D_GNU_SOURCE
+
# -Wno-unused-parameter
CompileCommonOpts := $(PROFILE) -Wall -W -Wwrite-strings -Wno-unused -I$(LEVEL)/include
LinkG := $(Link) -g -L $(LIBDEBUG)
LinkO := $(Link) -O3 -L $(LIBRELEASE)
-# Create a .so file from a .o files...
-#MakeSO := $(CXX) -shared $(PROFILE)
-MakeSO := $(CXX) -G $(PROFILE)
-MakeSOO := $(MakeSO) -O3
-
# Create one .o file from a bunch of .o files...
Relink = ld -r
+# MakeSO - Create a .so file from a .o files...
+MakeSO := $(CXX) $(MakeSharedObjectOption) $(PROFILE)
+MakeSOO := $(MakeSO) -O3
+
# Create dependancy file from CPP file, send to stdout.
Depend := $(CXX) -MM -I$(LEVEL)/include $(CPPFLAGS)
clean :: $(addsuffix /.makeclean , $(DIRS))
%/.makeall %/.makeclean %/.makeinstall:
- cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@)
+ $(VERB) cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@)
endif
#---------------------------------------------------------
ifdef LIBRARYNAME
+# Make sure there isn't any extranous whitespace on the LIBRARYNAME option
+LIBRARYNAME := $(strip $(LIBRARYNAME))
+
LIBNAME_O := $(LIBRELEASE)/lib$(LIBRARYNAME).so
LIBNAME_G := $(LIBDEBUG)/lib$(LIBRARYNAME).so
LIBNAME_AO := $(LIBRELEASE)/lib$(LIBRARYNAME).a
$(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(LIBRELEASE)/.dir
@echo ======= Linking $(LIBRARYNAME) release library =======
- $(MakeSOO) -o $@ $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
+ $(VERB) $(MakeSOO) -o $@ $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
$(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(LIBDEBUG)/.dir
@echo ======= Linking $(LIBRARYNAME) debug library =======
- $(MakeSO) -g -o $@ $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
+ $(VERB) $(MakeSO) -g -o $@ $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
$(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(LIBRELEASE)/.dir
@echo ======= Linking $(LIBRARYNAME) release library =======
@rm -f $@
- $(AR) $@ $(ObjectsO) $(LibSubDirs)
+ $(VERB) $(AR) $@ $(ObjectsO) $(LibSubDirs)
$(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(LIBDEBUG)/.dir
@echo ======= Linking $(LIBRARYNAME) debug library =======
@rm -f $@
- $(AR) $@ $(ObjectsG) $(LibSubDirs)
+ $(VERB) $(AR) $@ $(ObjectsG) $(LibSubDirs)
$(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(LIBRELEASE)/.dir
- $(Relink) -o $@ $(ObjectsO) $(LibSubDirs)
+ @echo "Linking $@"
+ $(VERB) $(Relink) -o $@ $(ObjectsO) $(LibSubDirs)
$(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(LIBDEBUG)/.dir
- $(Relink) -o $@ $(ObjectsG) $(LibSubDirs)
+ $(VERB) $(Relink) -o $@ $(ObjectsG) $(LibSubDirs)
endif
all:: $(TOOLEXENAMES)
clean::
- rm -f $(TOOLEXENAMES)
+ $(VERB) rm -f $(TOOLEXENAMES)
$(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(BUILD_ROOT_TOP)/tools/Debug/.dir
- $(LinkG) -o $@ $(ObjectsG) $(USED_LIBS_OPTIONS_G) $(TOOLLINKOPTS)
+ @echo ======= Linking $(TOOLNAME) debug executable =======
+ $(VERB) $(LinkG) -o $@ $(ObjectsG) $(USED_LIBS_OPTIONS_G) $(TOOLLINKOPTS)
$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(BUILD_ROOT_TOP)/tools/Release/.dir
- $(LinkO) -o $@ $(ObjectsG) $(USED_LIBS_OPTIONS_O) $(TOOLLINKOPTS)
+ @echo ======= Linking $(TOOLNAME) release executable =======
+ $(VERB) $(LinkO) -o $@ $(ObjectsG) $(USED_LIBS_OPTIONS_O) $(TOOLLINKOPTS)
endif
# Create dependencies for the *.cpp files...
$(BUILD_ROOT)/Depend/%.d: %.cpp $(BUILD_ROOT)/Depend/.dir
- $(Depend) $< | sed 's|$*\.o *|$(BUILD_ROOT)/Release/& $(BUILD_ROOT)/Debug/& $(BUILD_ROOT)/Depend/$(@F)|g' > $@
+ $(VERB) $(Depend) $< | sed 's|$*\.o *|$(BUILD_ROOT)/Release/& $(BUILD_ROOT)/Debug/& $(BUILD_ROOT)/Depend/$(@F)|g' > $@
# Create dependencies for the *.c files...
$(BUILD_ROOT)/Depend/%.d: %.c $(BUILD_ROOT)/Depend/.dir
- $(Depend) $< | sed 's|$*\.o *|Release/& Debug/& Depend/$(@F)|g' > $@
+ $(VERB) $(Depend) $< | sed 's|$*\.o *|Release/& Debug/& Depend/$(@F)|g' > $@
# Create .o files in the ObjectFiles directory from the .cpp and .c files...
$(BUILD_ROOT)/Release/%.o: %.cpp $(BUILD_ROOT)/Release/.dir
- $(CompileO) $< -o $@
+ @echo "Compiling $<"
+ $(VERB) $(CompileO) $< -o $@
#Release/%.o: %.c Release/.dir Depend/.dir
# $(CompileOC) $< -o $@
$(BUILD_ROOT)/Debug/%.o: %.cpp $(BUILD_ROOT)/Debug/.dir
- $(CompileG) $< -o $@
+ @echo "Compiling $<"
+ $(VERB) $(CompileG) $< -o $@
#Debug/%.o: %.c Debug/.dir
# $(CompileGC) $< -o $@
# Rule for building the bison parsers...
%.cpp %.h : %.y
- bison -v -d -p $(<:%Parser.y=%) $(basename $@).y
- mv -f $(basename $@).tab.c $(basename $@).cpp
- mv -f $(basename $@).tab.h $(basename $@).h
+ $(VERB) bison -v -d -p $(<:%Parser.y=%) $(basename $@).y
+ $(VERB) mv -f $(basename $@).tab.c $(basename $@).cpp
+ $(VERB) mv -f $(basename $@).tab.h $(basename $@).h
# To create the directories...
%/.dir:
- mkdir -p $(@D)
+ $(VERB) mkdir -p $(@D)
@date > $@
# Clean nukes the tree
clean::
- rm -rf Debug Release Depend
- rm -f core *.o *.d *.so *~ *.flc
+ $(VERB) rm -rf $(BUILD_ROOT)/Debug $(BUILD_ROOT)/Release $(BUILD_ROOT)/Depend
+ $(VERB) rm -f core *.o *.d *.so *~ *.flc
# If dependancies were generated for the file that included this file,
# include the dependancies now...