mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-23 12:58:03 -05:00
236 lines
6.2 KiB
Makefile
236 lines
6.2 KiB
Makefile
# ============================================================================
|
|
# Name : Makefile
|
|
# Author : Rod Persky (rodney.persky@connect.qut.edu.au)
|
|
# Jorrit Wronski (jowr@mek.dtu.dk)
|
|
# Version : 0.1
|
|
# Copyright : Use and modify at your own risk.
|
|
# Description : Makefile for CoolProp shared library
|
|
# ============================================================================
|
|
# The installation procedure should be as follows:
|
|
# 1) make
|
|
# 2) sudo make install
|
|
|
|
# If you want a static library then add LIBTYPE=a to *ALL* of the
|
|
# make and install commands. Also whilst you're adding commands may as well
|
|
# include -j $(nproc) to increase build speed. So for a static library use:
|
|
# make LIBTYPE=a -j $(nproc)
|
|
# sudo make LIBTYPE=a install
|
|
#
|
|
# If you need a clean install use:
|
|
# sudo make uninstall install
|
|
#
|
|
# You can simply uninstall by using:
|
|
# sudo make uninstall
|
|
#
|
|
# When using the library in Eclipse in your source files add:
|
|
# #include <CoolProp/CoolProp.h>
|
|
#
|
|
# And in the linker Librarys add (dl is only needed for the static library):
|
|
# CoolProp
|
|
# dl
|
|
#
|
|
# Header files are going to be installed into
|
|
# /usr/local/include
|
|
# while the libraries will reside in
|
|
# /usr/local/lib
|
|
# ============================================================================
|
|
# General commands:
|
|
# These commands are faily generic accross all platforms
|
|
|
|
CC := g++
|
|
RM := rm -f
|
|
CP := cp
|
|
CD := cd
|
|
CHF := chmod 0644
|
|
CHD := chmod 0655
|
|
MK := mkdir -p -m 655
|
|
RS := rsync -Rq
|
|
FN := find
|
|
LD := ldconfig
|
|
LN := ln -sf
|
|
LT := libtool
|
|
AR := ar rvs
|
|
MV := mv
|
|
PUD := pushd
|
|
POD := popd
|
|
SHELL := /bin/sh
|
|
DEST := /usr/local
|
|
UNAME := $(shell uname)
|
|
|
|
# What library type are we going to build by default (shared)
|
|
LIBTYPE = so
|
|
|
|
# We're going to install into /usr/local/include
|
|
INCDIR = $(DEST)/include/$(BASENAME)
|
|
LIBDIR = $(DEST)/lib
|
|
COOLPROPDIR = ../../CoolProp/
|
|
BINDIR = ./build
|
|
|
|
# Optimisation flags, change to your wants and desires
|
|
USER_OPTFLAGS = -O0 #-funroll-loops -ffast-math -ffloat-store
|
|
|
|
# Language specific flags use -D COOLPROP_LIB to build a C library
|
|
LANG_FLAGS = -D COOLPROP_LIB
|
|
|
|
# Debug flags
|
|
DBGFLAGS = -O0 -g3
|
|
WRNFLAGS = -Wall -Wpedantic -Wextra
|
|
|
|
# =============================
|
|
# ~ END OF CUSTOMISABLE CODE ~
|
|
# =============================
|
|
# Sort out exactly what we want to do,
|
|
# shared or static, debug or standard
|
|
# build. Get the final names of the execs
|
|
# =============================
|
|
|
|
BASENAME=CoolProp
|
|
VFILE = $(COOLPROPDIR)/version.h
|
|
VERSION=$(shell cut -d'"' -f2 $(VFILE))
|
|
MAJOR=$(shell echo $(VERSION) | cut -d'.' -f1 - )
|
|
MINOR=$(shell echo $(VERSION) | cut -d'.' -f2 - )
|
|
|
|
ifeq ($(LIBTYPE),a)
|
|
LIBTYPECLEAN=a
|
|
else
|
|
ifeq ($(UNAME), Linux)
|
|
LIBTYPECLEAN=so
|
|
endif
|
|
ifeq ($(UNAME), Darwin)
|
|
LIBTYPECLEAN=dylib
|
|
endif
|
|
endif
|
|
ifeq ($(DEBUG),debug)
|
|
DEBUGCLEAN=_dbg
|
|
endif
|
|
|
|
|
|
EXECUTABLE=lib$(BASENAME)$(DEBUGCLEAN).$(LIBTYPECLEAN).$(VERSION)
|
|
LIBNAME=lib$(BASENAME)$(DEBUGCLEAN).$(LIBTYPECLEAN).$(MAJOR).$(MINOR)
|
|
EXECUTABLE_MAJOR=lib$(BASENAME)$(DEBUGCLEAN).$(LIBTYPECLEAN).$(MAJOR)
|
|
EXECUTABLE_BASE=lib$(BASENAME)$(DEBUGCLEAN).$(LIBTYPECLEAN)
|
|
|
|
|
|
# ======================
|
|
# Compile all the flags
|
|
# ======================
|
|
|
|
# The standard flags are meant to represent the safest compilation,
|
|
# not fastest resulting library speed.
|
|
|
|
_LIBRARIES = -ldl
|
|
_INCLUDES = -I$(COOLPROPDIR)
|
|
|
|
|
|
STD_OPTFLAGS = -fPIC
|
|
_CPPFLAGS=$(_LIBRARIES) $(STD_OPTFLAGS) $(LANG_FLAGS) $(USER_OPTFLAGS)
|
|
|
|
ifeq ($(LIBTYPE),a)
|
|
#AR doesn't take flags
|
|
else
|
|
ifeq ($(UNAME), Linux)
|
|
_LIBFLAGS=-shared -Wl,-soname,$(LIBNAME)
|
|
endif
|
|
ifeq ($(UNAME), Darwin)
|
|
_LIBFLAGS=-dynamiclib -Wl,-headerpad_max_install_names,-undefined,dynamic_lookup,-compatibility_version,$(MAJOR).$(MINOR),-current_version,$(MAJOR).$(MINOR),-install_name,$(LIBNAME)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(DEBUG),debug)
|
|
_CPPFLAGS=$(STD_OPTFLAGS) $(DBGFLAGS) $(WRNFLAGS)
|
|
endif
|
|
|
|
#Get sources
|
|
COOLCPP_FILES=$(shell echo $(COOLPROPDIR)*.cpp)
|
|
COOLOBJ_FILES := $(addprefix $(BINDIR)/,$(notdir $(COOLCPP_FILES:.cpp=.o)))
|
|
|
|
# Path for prerequisite files
|
|
vpath %.cpp $(COOLPROPDIR)
|
|
|
|
# ========================
|
|
# Compile coolprop sources
|
|
# ========================
|
|
|
|
.PHONY: all
|
|
all: $(COOLOBJ_FILES) $(BINDIR)/$(EXECUTABLE)
|
|
|
|
$(COOLOBJ_FILES): | $(BINDIR)
|
|
|
|
$(BINDIR):
|
|
$(MK) -m 755 $(BINDIR)
|
|
|
|
# Make the .o files (for both static and shared)
|
|
$(BINDIR)/%.o : %.cpp
|
|
$(CC) $(_CPPFLAGS) -c $(_INCLUDES) $< -o $@
|
|
|
|
# Link shared library
|
|
$(BINDIR)/lib$(BASENAME)$(DEBUGCLEAN).so.$(VERSION): $(COOLOBJ_FILES)
|
|
$(CC) $(_LIBFLAGS) $(COOLOBJ_FILES) -o $@
|
|
|
|
# Link shared library on Mac
|
|
$(BINDIR)/lib$(BASENAME)$(DEBUGCLEAN).dylib.$(VERSION): $(COOLOBJ_FILES)
|
|
$(CC) $(_LIBFLAGS) $(COOLOBJ_FILES) -o $@
|
|
|
|
# Link static library
|
|
$(BINDIR)/lib$(BASENAME)$(DEBUGCLEAN).a.$(VERSION): $(COOLOBJ_FILES)
|
|
$(AR) $@ $^
|
|
|
|
# ========================
|
|
# Install and Uninstall
|
|
# ========================
|
|
|
|
.PHONY : install
|
|
install: $(BINDIR)/$(EXECUTABLE)
|
|
$(MK) $(INCDIR) $(LIBDIR)
|
|
($(CD) $(COOLPROPDIR) && $(FN) . -name '*.h' -exec $(RS) {} $(INCDIR)/ \; )
|
|
$(FN) $(INCDIR) -type d -exec $(CHD) {} \;
|
|
$(FN) $(INCDIR) -type f -exec $(CHF) {} \;
|
|
ifeq ($(UNAME), Linux)
|
|
$(CP) $(BINDIR)/$(EXECUTABLE) $(LIBDIR)
|
|
endif
|
|
ifeq ($(UNAME), Darwin)
|
|
install -m 644 -o root -g wheel $(BINDIR)/$(EXECUTABLE) $(LIBDIR)/
|
|
endif
|
|
$(CHF) $(LIBDIR)/$(EXECUTABLE)
|
|
($(CD) $(LIBDIR) && $(LN) $(EXECUTABLE) $(LIBNAME) )
|
|
($(CD) $(LIBDIR) && $(LN) $(LIBNAME) $(EXECUTABLE_MAJOR) )
|
|
($(CD) $(LIBDIR) && $(LN) $(EXECUTABLE_MAJOR) $(EXECUTABLE_BASE) )
|
|
ifeq ($(UNAME), Linux)
|
|
$(LD) -n $(INCDIR)
|
|
$(LD) -l $(LIBDIR)/$(EXECUTABLE)
|
|
$(LD)
|
|
endif
|
|
|
|
.PHONY : uninstall
|
|
uninstall:
|
|
$(RM)r $(INCDIR)
|
|
$(RM) $(LIBDIR)/$(EXECUTABLE)
|
|
$(RM) $(LIBDIR)/$(LIBNAME)
|
|
$(RM) $(LIBDIR)/$(EXECUTABLE_MAJOR)
|
|
$(RM) $(LIBDIR)/$(EXECUTABLE_BASE)
|
|
ifeq ($(UNAME), Linux)
|
|
$(LD)
|
|
endif
|
|
|
|
# ========================
|
|
# Accessory functions
|
|
# ========================
|
|
|
|
.PHONY : clean
|
|
clean:
|
|
$(RM) $(BINDIR)/*
|
|
|
|
.PHONY : check_flags
|
|
check_flags:
|
|
@printf "\nBuild settings:\n\
|
|
VERSION=$(VERSION)\n\
|
|
MAJOR=$(MAJOR)\n\
|
|
MINOR=$(MINOR)\n\
|
|
EXECUTABLE=$(EXECUTABLE)\n\
|
|
LIBNAME=$(LIBNAME)\n\
|
|
LIBFLAGS=$(_LIBFLAGS)\n\
|
|
CPPFLAGS=$(_CPPFLAGS)\n\
|
|
INCLUDES=$(_INCLUDES)\n\n\
|
|
COOLCPP_FILES:\n$(COOLCPP_FILES)\n\n\
|
|
COOLOBJ_FILES:\n$(COOLOBJ_FILES)\n\n"
|