--- trunk/OOPSE-4/make/Makefile 2004/09/24 04:16:43 1490 +++ trunk/OOPSE-4/make/Makefile 2004/09/30 15:41:35 1514 @@ -33,6 +33,59 @@ # $< - Current dependency # #--------------------------------------------------------------------------- +IS_UNIX=1 +#packages to be made +Packages = \ + utils \ + math \ + types \ + primitives \ + visitors \ + UseTheForce/DarkSide \ + UseTheForce \ + brains \ + io \ + integrators \ + minimizers \ + constraints \ + profiling \ + restraints \ + applications/oopse \ + applications/dump2Xyz \ + applications/simpleBuilder \ + +#packages contain libraries +PackageLibs = \ + utils \ + math \ + types \ + primitives \ + visitors \ + UseTheForce/DarkSide \ + UseTheForce \ + brains \ + io \ + integrators \ + minimizers \ + constraints \ + profiling \ + restraints \ + +IncludeDirs = \ + /usr/include \ + /usr/local/include \ + +LibraryDirs = \ + /usr/lib \ + /usr/local/mpich/lib \ + /usr/local/lib \ + /usr/local/intel/compiler80/lib \ + +Libraries = \ + mpich \ + sprng \ + ifcore \ + #--------------------------------------------------------------------------- # # Directories @@ -47,16 +100,21 @@ Package = $(subst $(SourceDir)/,,$(CurrentDir CurrentDir = $(CURDIR) ifdef Source -Package = $(subst $(SourceDir)/,,$(CurrentDir)) +#get the relative path of current package to source directory +# /home/maul/gezelter/src/code/src/UseTheForce/Darkside --> UseTheForce/Darkside +#Package = $(shell echo $(CurrentDir) | sed -e 's/^.*\/src\/\(.*\)/\1/g') +Package = $(subst $(shell cd $(SourceDir); pwd)/,,$(CurrentDir)) + PackageList = $(Package) PackageSourceDir = $(SourceDir)/$(Package) -PackageTargetDir = $(TargetDir)/$(Package) +PackageTargetDir = $(TargetDir) JavaMainClass = $(subst /,.,$(Package)).$(Main) else PackageList = $(Packages) $(JavaPackages) endif PackageListLoop = $(patsubst %,$(SourceDir)/%/.loop,$(PackageList)) +#PackageListLoop = $(PackageList) JRE = $(JAVA_HOME)/jre/lib/rt.jar @@ -79,16 +137,29 @@ OtherSourceFiles = $(filter-out $(JavaFiles) $(C FortranFiles = $(filter %.f, $(Source)) F90Files = $(filter %.F90, $(Source)) CorbaFiles = $(filter %.idl, $(Source)) +LexFiles = $(filter %.l, $(Source)) +YaccFiles = $(filter %.y, $(Source)) OtherSourceFiles = $(filter-out $(JavaFiles) $(CppFiles) $(CFiles) \ - $(FortranFiles) $(F90Files) \ - $(CorbaFiles), \ + $(FortranFiles) $(F90Files) $(LexFiles) \ + $(YaccFiles) $(CorbaFiles), \ $(Source)) ManifestFile = $(PackageSourceDir)/Manifest -SourceFiles = $(JavaFiles:%.java= $(PackageSourceDir)/%.java)\ + +SourceFiles = $(JavaFiles)\ + $(CppFiles)\ + $(CFiles)\ + $(FortranFiles)\ + $(F90Files)\ + $(LexFiles)\ + $(YaccFiles) + +#SourceFiles = $(JavaFiles:%.java= $(PackageSourceDir)/%.java)\ $(CppFiles:%.cpp= $(PackageSourceDir)/%.cpp)\ $(CFiles:%.c= $(PackageSourceDir)/%.c)\ $(FortranFiles:%.f= $(PackageSourceDir)/%.f)\ - $(F90Files:%.F90= $(PackageSourceDir)/%.F90) + $(F90Files:%.F90= $(PackageSourceDir)/%.F90)\ + $(LexFiles:%.l= $(PackageSourceDir)/%.l)\ + $(YaccFiles:%.y= $(PackageSourceDir)/%.y)\ # Target JavaClassFiles = $(JavaFiles:%.java= $(PackageTargetDir)/%.class) @@ -100,7 +171,17 @@ ObjectFiles = $(CFiles:%.c= $(Packag ObjectFiles = $(CFiles:%.c= $(PackageTargetDir)/%.o)\ $(CppFiles:%.cpp= $(PackageTargetDir)/%.o)\ $(FortranFiles:%.f= $(PackageTargetDir)/%.o)\ - $(F90Files:%.F90= $(PackageTargetDir)/%.o) + $(F90Files:%.F90= $(PackageTargetDir)/%.o)\ + $(LexFiles:%.l= $(PackageTargetDir)/%.o)\ + $(YaccFiles:%.y= $(PackageTargetDir)/%.o) + +DerivedSource = $(YaccFiles:%.y= %.h) \ + $(YaccFiles:%.y= %.c) \ + $(LexFiles:%.l= %.c) + +DerivedCFiles = $(YaccFiles:%.y= %.c) \ + $(LexFiles:%.l= %.c) + OtherTargetFiles = $(OtherSourceFiles:%=$(PackageTargetDir)/%) ThirdPartyJarsTmp = $(patsubst %,$(LibDir)/%,$(JavaLibraries)) @@ -110,12 +191,15 @@ ifneq "$(words $(ObjectFiles))" "0" JavaPackageName = $(subst /,.,$(Package)) JarFile = $(LibDir)/$(subst /,,$(Package)).jar endif + +#if Main is defined, do not build library. It may not be true sometimes ifneq "$(words $(ObjectFiles))" "0" DependencyFile = $(PackageSourceDir)/Makedepend - SharedLibrary = $(LibDir)/lib$(subst /,,$(Package)).so - StaticLibrary = $(LibDir)/lib$(subst /,,$(Package)).a ifneq "$(Main)" "" Executable = $(BinDir)/$(Main) + else + SharedLibrary = $(LibDir)/lib$(subst /,,$(Package)).so + StaticLibrary = $(LibDir)/lib$(subst /,,$(Package)).a endif endif # @@ -125,7 +209,7 @@ LocalLibs = $(subst /,,$(Packages)) JavaPackageNames = $(subst /,.,$(JavaPackages)) IncludePath = -I$(SourceDir) $(IncludeDirs:%=-I%) LibDirs = -L$(LibDir) $(LibraryDirs:%=-L%) -LocalLibs = $(subst /,,$(Packages)) +LocalLibs = $(subst /,,$(PackageLibs)) LibList = $(LocalLibs:%=-l%) $(Libraries:%=-l%) @@ -135,17 +219,18 @@ Copy = cp # #--------------------------------------------------------------------------- Print = @echo +Move = mv Copy = cp -CCompiler = gcc -CppCompiler = gcc -Linker = gcc +CCompiler = icc +CppCompiler = icpc +Linker = icpc MakeDepend = makedepend MakeDir = mkdir -p Delete = rm -fr StaticArchiver = ar -DynamicArchiver = gcc -FortranCompiler = f77 -F90Compiler = f90 +DynamicArchiver = icc +FortranCompiler = ifort +F90Compiler = ifort JavaCompiler = $(JAVA_HOME)/bin/javac JavaArchiver = $(JAVA_HOME)/bin/jar JarSigner = $(JAVA_HOME)/bin/jarsigner @@ -156,8 +241,11 @@ List = cat Purify = purify WordCount = wc List = cat +Yacc = bison -y +Lex = flex -MakeOptions = -k -s + +MakeOptions = -k MakeDependOptions = StaticArchiverOptions = rc DynamicArchiverOptions = -shared @@ -166,7 +254,7 @@ F90Options = RmiOptions = -d $(TargetDir) -classpath $(ClassPath) \ -sourcepath $(SourceDir) FortranOptions = -F90Options = +F90Options = -I$(SourceDir) -module $(TargetDir) JavaCompilerOptions = -d $(TargetDir) -classpath $(ClassPath) \ -sourcepath $(SourceDir) -deprecation JavaRunOptions = -classpath $(ClassPath) @@ -205,40 +293,39 @@ $(PackageTargetDir)/%.o : $(PackageTargetDir) $(Packag $(MakeDir) $@ # .c -> .o -$(PackageTargetDir)/%.o : $(PackageTargetDir) $(PackageSourceDir)/%.c - $(Print) $@ - @$(CCompiler) $(COptions) -c $(IncludePath) $< -o $@ +$(PackageTargetDir)/%.o : %.c + $(CCompiler) $(COptions) -c $(IncludePath) $< -o $@ -%.o : $(PackageSourceDir)/%.c +%.o : %.c $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ -# .cc -> .o -$(PackageTargetDir)/%.o : $(PackageSourceDir)/%.cc - $(Print) $@ +# .cpp -> .o +$(PackageTargetDir)/%.o : %.cpp $(CppCompiler) $(CppOptions) -c $(IncludePath) $< -o $@ -%.o : $(PackageSourceDir)/%.cc +%.o : %.cpp $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .f -> .o -$(PackageTargetDir)/%.o : $(PackageSourceDir)/%.f +$(PackageTargetDir)/%.o : %.f $(Print) $@ + $(Print) $(FortranCompiler) $(FortranOptions) -c $< -o $@ @$(FortranCompiler) $(FortranOptions) -c $< -o $@ -%.o : $(PackageSourceDir)/%.f +%.o : %.f $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .F90 -> .o -$(PackageTargetDir)/%.o : $(PackageSourceDir)/%.F90 - $(Print) $@ - @$(F90Compiler) $(F90Options) -c $< -o $@ +$(PackageTargetDir)/%.o : %.F90 + $(F90Compiler) $(F90Options) -c $< -o $@ -%.o : $(PackageSourceDir)/%.F90 +%.o : %.F90 $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .java -> .class $(PackageTargetDir)/%.class : $(PackageSourceDir)/%.java $(Print) $@ + $(Print) $(JavaCompiler) $(JavaCompilerOptions) $< @$(JavaCompiler) $(JavaCompilerOptions) $< %.class : $(PackageSourceDir)/%.java @@ -247,14 +334,38 @@ $(PackageSourceDir)/%.h : $(PackageTargetDir)/%.class # .class -> .h $(PackageSourceDir)/%.h : $(PackageTargetDir)/%.class $(Print) $@ + $(Print) $(JniCompiler) $(JniOptions) $(JavaPackageName).$* $(JniCompiler) $(JniOptions) $(JavaPackageName).$* %.h : %.class $(MAKE) $(MakeOptions) $(PackageSourceDir)/$@ +#.y -> .h +%.h : %.y + $(Print) $@ + $(Print) @$(Yacc) -d $? + @$(Yacc) -d $? + @$(Move) y.tab.h $*.h + @$(Delete) y.tab.c + +#.y -> .c +%.c : %.y + $(Print) $@ + $(Print) $(Yacc) -d $? + @$(Yacc) -d $? + @$(Move) y.tab.c $*.c + @$(Delete) y.tab.h + +# .l -> .c +%.c : %.l + $(Print) $@ + $(Print) $(Lex) -o$@ $? + @$(Lex) -o$@ $? + # .o -> .a $(LibDir)/%.a : $(ObjectFiles) $(Print) $@ + $(Print) $(StaticArchiver) $(StaticArchiverOptions) $@ $(ObjectFiles) @$(StaticArchiver) $(StaticArchiverOptions) $@ $(ObjectFiles) %.a : $(ObjectFiles) @@ -263,6 +374,7 @@ $(LibDir)/%.so : $(ObjectFiles) # .o -> .so $(LibDir)/%.so : $(ObjectFiles) $(Print) $@ + $(Print) $(DynamicArchiver) $(ObjectFiles) $(DynamicArchiverOptions) -o $@ $(DynamicArchiver) $(ObjectFiles) $(DynamicArchiverOptions) -o $@ %.so : $(ObjectFiles) @@ -271,6 +383,7 @@ $(LibDir)/%.jar : $(JavaClassFiles) $(OtherTargetFiles # .class -> .jar $(LibDir)/%.jar : $(JavaClassFiles) $(OtherTargetFiles) $(Print) $@ + $(Print) $(JavaArchiver) -cf $@ $(JavaClassFilesRel) $(OtherTargetFiles) @cd $(TargetDir); $(JavaArchiver) -cf $@ \ $(JavaClassFilesRel) $(OtherTargetFiles) @@ -303,6 +416,7 @@ $(Executable) : $(ObjectFiles) # Executable $(Executable) : $(ObjectFiles) $(Print) $@ + $(Print) $(Linker) $(LinkOptions) $(LibDirs) $(LibList) $(ObjectFiles) -o $@ $(Linker) $(LinkOptions) $(LibDirs) $(LibList) $(ObjectFiles) -o $@ # Anything else is just copied from source to target @@ -335,11 +449,22 @@ _cleanall : $(Print) Done clean. _cleanall : - $(Delete) $(PackageTargetDir)/* \ + $(Delete) $(ObjectFiles) $(ParallelObjectFiles) + +# make distclean +distclean : $(PackageListLoop) + $(Print) Done clean. + +_distcleanall : + $(Delete) $(ObjectFiles) \ + $(ParallelObjectFiles) \ $(JarFile) \ $(SharedLibrary) \ $(StaticLibrary) \ + $(ParallelSharedLibrary) \ + $(ParallelStaticLibrary) \ $(Executable) \ + $(ParallelExecutable) \ $(DependencyFile) @@ -349,12 +474,37 @@ $(DependencyFile) : _dependall : $(DependencyFile) -$(DependencyFile) : - $(Print) $@ - @cd $(PackageSourceDir); \ - $(MakeDepend) $(MakeDependOptions) -f- -p$(PackageTargetDir)/ \ - $(IncludePath) $(Source) > $(DependencyFile) +$(DependencyFile) : $(DerivedSource) + $(Print) $@ + @cd $(PackageSourceDir) + touch Make.ctemp + touch Make.ctemp + +ifneq "$(words $(CppFiles))" "0" + $(Print) Make dependencies for $(CppFiles) + $(Print) $(CppCompiler) $(IncludePath) -MM $(CppFiles) > Make.cpptemp + $(CppCompiler) $(IncludePath) -MM $(CppFiles) > Make.cpptemp + cat Make.cpptemp | sed 's/^[a-zA-Z0-9]/$$\(DEV_ROOT\)\/obj\/&/g' >> $(DependencyFile) + cat Make.cpptemp | sed 's/^[a-zA-Z0-9]/$$\(DEV_ROOT\)\/MPIobj\/&/g' >> $(DependencyFile) +endif + +ifneq "$(words $(CFiles))" "0" + $(Print) Make dependencies for $(CFiles) + $(Print) $(CCompiler) $(IncludePath) -MM $(CFiles) $(DerivedCFiles) > Make.ctemp + $(CCompiler) $(IncludePath) -MM $(CFiles) $(DerivedCFiles) > Make.ctemp + cat Make.ctemp | sed 's/^[a-zA-Z0-9]/$$\(DEV_ROOT\)\/obj\/&/g' >> $(DependencyFile) + cat Make.ctemp | sed 's/^[a-zA-Z0-9]/$$\(DEV_ROOT\)\/MPIobj\/&/g' >> $(DependencyFile) + +endif + +ifneq "$(words $(F90Files))" "0" + $(Print) Make dependencies for $(F90Files) + $(DEV_ROOT)/scripts/sfmakedepend -I $(DEV_ROOT)/src -d '$$(DEV_ROOT)/obj' -f ./Make.ftemp -h *.F90 + cat Make.ftemp >> $(DependencyFile) +endif + $(Delete) Make.cpptemp Make.ctemp Make.ftemp + # make lib lib : $(PackageListLoop) $(Print) Libraries built.