Files
CoolProp/dev/Tickets/makefile
2014-05-14 12:46:24 +02:00

191 lines
6.5 KiB
Makefile

# ============================================================================
# Name : Makefile
# Author : Jorrit Wronski (jowr@mek.dtu.dk)
# Version : 0.1
# Copyright : Use and modify at your own risk.
# Description : Makefile for a CoolProp solver based on ExternalMedia.
# ============================================================================
# The installation procedure should be as follows:
# 1) make header library
# 2) sudo make install
# ============================================================================
# general commands:
RM := rm -f
CP := cp
CH := chmod 0644
MK := mkdir -p
LD := ldconfig
LN := ln -sf
LT := libtool
AR := ar rvs
# used for the output
MAJORVERSION =3
MINORVERSION =3
THENAME =CoolPropLib
LIBRARYEXTENSION =.a
THETEST =coolPropLibTest
###########################################################
# Setting the directories for library, header and
# binary files created in this makefile.
###########################################################
SRCDIR =oFiles
# For Dymola integration
DYMDIR =/opt/dymola
LIBINST =$(DYMDIR)/bin/lib
HEADINST =$(DYMDIR)/source
# For OpenModelica integration
# LIBINST =/usr/lib/omc
# HEADINST =/usr/include/omc
# For system-wide installation
# LIBINST =/usr/local/lib
# HEADINST =/usr/local/include
BINDIR =./bin/LinuxGCC
COOLPROPDIR=../../CoolProp
LIBS =
OPTFLAGS =-O3 -funroll-loops -ffast-math# -ffloat-store # optimisation, remove for debugging
# List of files to compile
OBJS = \
$(SRCDIR)/basesolver.o \
$(SRCDIR)/coolpropsolver.o \
$(SRCDIR)/errorhandling.o \
$(SRCDIR)/solvermap.o \
$(SRCDIR)/testsolver.o
###########################################################
# Change these lines if you are using a different C++
# compiler or if you would like to use other flags.
###########################################################
CPPC =g++
DEBUGFLAGS =-g -O3
CPPFLAGS =$(OPTFLAGS)# -Wall -pedantic -fbounds-check -ansi -Wpadded -Wpacked -malign-double -mpreferred-stack-boundary=8
.PHONY : install
LIBFILE =$(THENAME)
LIBRARY =lib$(THENAME)
HEADERFILE =$(THENAME)
HEADEREXTENSION =.h
###########################################################
# Change these lines if you have other needs regarding
# the generated shared library file.
###########################################################
ifeq ($(LIBRARYEXTENSION),.so)
install : install_dynamic
LIBFLAGS =-rdynamic -fPIC -shared -Wl,-soname,$(LIBRARY)$(LIBRARYEXTENSION).$(MAJORVERSION)
endif
###########################################################
# Change these lines if you have other needs regarding
# the generated static library file.
###########################################################
ifeq ($(LIBRARYEXTENSION),.a)
install : install_static
LIBFLAGS =-fPIC -static
endif
###########################################################
# Copy files to places recognised by the system.
###########################################################
.PHONY : install_dynamic
install_dynamic : header library
$(MK) $(HEADINST) $(LIBINST)
$(CP) $(BINDIR)/$(HEADERFILE)$(HEADEREXTENSION) $(HEADINST)/$(HEADERFILE)$(HEADEREXTENSION)
$(CP) $(BINDIR)/$(LIBRARY).so $(LIBINST)/$(LIBRARY).so.$(MAJORVERSION).$(MINORVERSION)
$(CH) $(HEADINST)/$(HEADERFILE)$(HEADEREXTENSION)
$(CH) $(LIBINST)/$(LIBRARY).so.$(MAJORVERSION).$(MINORVERSION)
$(LD) -l $(LIBINST)/$(LIBRARY).so.$(MAJORVERSION).$(MINORVERSION)
$(LN) $(LIBINST)/$(LIBRARY).so.$(MAJORVERSION) $(LIBINST)/$(LIBRARY).so
$(LD)
.PHONY : install_static
install_static : header library
$(MK) $(HEADINST) $(LIBINST)
$(CP) $(BINDIR)/$(HEADERFILE)$(HEADEREXTENSION) $(HEADINST)/$(HEADERFILE)$(HEADEREXTENSION)
$(CP) $(BINDIR)/$(LIBRARY).a $(LIBINST)/$(LIBRARY).a
$(CH) $(HEADINST)/$(HEADERFILE)$(HEADEREXTENSION)
$(CH) $(LIBINST)/$(LIBRARY).a
$(LD)
.PHONY : uninstall
uninstall :
$(RM) $(HEADINST)/$(HEADERFILE)$(HEADEREXTENSION)
$(RM) $(LIBINST)/$(LIBRARY)$(LIBRARYEXTENSION)*
$(RM) $(LIBINST)/$(LIBRARY).a
.PHONY : all
all : header library
############################################################
## Compile coolprop sources to static files
############################################################
#COOLCPP_FILES := $(shell find $(COOLPROPDIR)/ -type f -name '*.cpp')
COOLCPP_FILES := $(wildcard $(COOLPROPDIR)/*.cpp)
COOLOBJ_FILES := $(addprefix $(SRCDIR)/,$(notdir $(COOLCPP_FILES:.cpp=.o)))
# Define search path for prerequisite files
vpath %.cpp $(COOLPROPDIR):$(COOLPROPDIR)/purefluids:$(COOLPROPDIR)/pseudopurefluids:$(SRCDIR)
.PHONY : coolprop
coolprop : $(COOLOBJ_FILES)
##########################################################
# Compile the C++ sources into a library file that can
# be used as shared or static object.
###########################################################
.PHONY : header
header : $(BINDIR)/$(HEADERFILE)$(HEADEREXTENSION)
$(BINDIR)/$(HEADERFILE)$(HEADEREXTENSION): $(SRCDIR)/$(HEADERFILE)$(HEADEREXTENSION)
$(MK) $(BINDIR)
$(CP) $(SRCDIR)/$(HEADERFILE)$(HEADEREXTENSION) $(BINDIR)
.PHONY : library
library : $(BINDIR)/$(LIBRARY)$(LIBRARYEXTENSION)
$(BINDIR)/$(LIBRARY).so: $(OBJS) $(COOLOBJ_FILES) $(SRCDIR)/$(LIBFILE).o
$(MK) $(BINDIR)
$(CPPC) $(LIBFLAGS) $(CPPFLAGS) -o $(BINDIR)/$(LIBRARY).so $(SRCDIR)/$(LIBFILE).o $(OBJS)
$(BINDIR)/$(LIBRARY).a: $(OBJS) $(COOLOBJ_FILES) $(SRCDIR)/$(LIBFILE).o
$(MK) $(BINDIR)
$(AR) $(BINDIR)/$(LIBRARY).a $^
###########################################################
# General rulesets for compilation.
###########################################################
.PHONY: clean
clean:
$(RM) **.o **.so **.a **.mod $(BINDIR)/* $(SRCDIR)/*.o
$(SRCDIR)/%.o : %.cpp
$(CPPC) $(CPPFLAGS) -o $(SRCDIR)/$*.o -I$(COOLPROPDIR) -I$(COOLPROPDIR)/purefluids -I$(COOLPROPDIR)/pseudopurefluids -I$(SRCDIR) -c $<
###########################################################
# Test cases
###########################################################
60 : 60.cpp $(COOLOBJ_FILES)
$(CPPC) $(CPPFLAGS) -g -o 60 -I$(COOLPROPDIR) -I$(COOLPROPDIR)/purefluids -I$(COOLPROPDIR)/pseudopurefluids -I$(SRCDIR) $< $(COOLOBJ_FILES) -ldl
############################################################
## Create the documentation from annotations in the source
## files with DOXYGEN, a configuration file is needed.
############################################################
#.PHONY : doc
#doc : doc/Doxyfile
# doxygen doc/Doxyfile
# cd doc/latex ; \
# make all