Skip to content
Snippets Groups Projects
Commit 1dceeba4 authored by Mick Jordan's avatar Mick Jordan
Browse files

access included GnuR sources directly, not via symbolic links

parent bdc94446
No related branches found
No related tags found
No related merge requests found
......@@ -33,29 +33,27 @@ endif
.PHONY: all clean cleanlib cleanobj force libr
all: linked $(LIB_APPL) libr
LIBDIR = $(abspath $(TOPDIR)/../lib)
LIB_APPL := $(LIBDIR)/libappl$(DYLIB_EXT)
all: $(LIB_APPL) libr
SRC = src
OBJ = lib
LIBDIR = $(abspath $(TOPDIR)/../lib)
LINKED_C_FILES = interv.c
GNUR_LINKED_C_FILES = $(addprefix $(GNUR_HOME)/src/appl/, $(LINKED_C_FILES))
NON_LOCAL_C_SOURCES = $(addprefix $(SRC)/, $(LINKED_C_FILES))
C_LOCAL_SOURCES = $(filter-out $(NON_LOCAL_C_SOURCES),$(wildcard $(SRC)/*.c))
C_SOURCES := $(NON_LOCAL_C_SOURCES) $(C_LOCAL_SOURCES)
GNUR_SRC = $(GNUR_HOME)/src/appl
GNUR_C_FILES = interv.c
GNUR_C_OBJECTS := $(addprefix $(OBJ)/, $(GNUR_C_FILES:.c=.o))
C_SOURCES := $(wildcard $(SRC)/*.c)
C_OBJECTS := $(subst $(SRC),$(OBJ),$(C_SOURCES:.c=.o))
F_OBJECTS := $(wildcard $(GNUR_HOME)/src/appl/d*.o)
LIB_APPL := $(LIBDIR)/libappl$(DYLIB_EXT)
# the Fortran sources are not recompiled
F_OBJECTS := $(wildcard $(GNUR_HOME)/src/appl/d*.o)
$(LIB_APPL): $(C_OBJECTS) $(F_OBJECTS)
$(LIB_APPL): $(C_OBJECTS) $(GNUR_C_OBJECTS) $(F_OBJECTS) Makefile
mkdir -p $(LIBDIR)
$(DYLIB_LD) $(DYLIB_LDFLAGS) -o $(LIB_APPL) $(C_OBJECTS) $(F_OBJECTS) $(LIBS)
linked: $(GNUR_LINKED_C_FILES)
$(foreach file,$(LINKED_C_FILES),ln -sf $(GNUR_HOME)/src/appl/$(file) $(SRC)/$(file);)
touch linked
$(DYLIB_LD) $(DYLIB_LDFLAGS) -o $(LIB_APPL) $(C_OBJECTS) $(GNUR_C_OBJECTS) $(F_OBJECTS) $(LIBS)
$(C_OBJECTS): | $(OBJ)
......@@ -77,7 +75,7 @@ $(LIB_R): $(OBJ)/xerbla.o
$(DYLIB_LD) $(DYLIB_LDFLAGS) -o $(LIB_R) -current_version $(R_VERSION) -compatibility_version $(R_VERSION) $(OBJ)/xerbla.o
cleanlibr:
rm -f $(LIB_R)
rm -f $(LIBDIR)/libR.*
else
libr:
......@@ -91,12 +89,14 @@ FFI_INCLUDES = -I$(TOPDIR)/include -I$(TOPDIR)/include/R_ext
$(OBJ)/%.o: $(SRC)/%.c
$(CC) $(CFLAGS) $(FFI_INCLUDES) -c $< -o $@
$(OBJ)/%.o: $(GNUR_SRC)/%.c
$(CC) $(CFLAGS) $(FFI_INCLUDES) -c $< -o $@
cleanlib:
rm -f $(LIBDIR)/libappl.*
clean: cleanobj cleanlibr
clean: cleanobj cleanlib cleanlibr
cleanobj:
rm -f linked
rm -f $(OBJ)/*.o
rm -f $(SRC)/$(LINKED_C_FILES)
......@@ -31,6 +31,10 @@
# define LIB_PKG_PRE and for post processing define LIB_PKG_POST in its Makefile.
# If a package-specfic clean is needed it should define CLEAN_PKG
# A package may include C and Fortran code compiled directly from the GnuR code base,
# but using FastR headers. This is handled by the package defining the variables
# GNUR_C_OBJECTS and GNUR_F_OBJECTS before including this file.
ifneq ($(MAKECMDGOALS),clean)
include $(TOPDIR)/platform.mk
endif
......@@ -45,6 +49,7 @@ endif
SRC = src
OBJ = lib
GNUR_SRC = $(GNUR_HOME)/src/library/$(PKG)/src
C_SOURCES := $(wildcard $(SRC)/*.c)
......@@ -78,7 +83,7 @@ libcommon: $(PKGDIR)
$(PKGDIR): $(GNUR_HOME)/library/$(PKG)
(cd $(GNUR_HOME)/library; tar cf - $(PKG)) | (cd $(FASTR_LIBRARY_DIR); tar xf -)
touch $(FASTR_LIBRARY_DIR)/$(PKG)
touch $(PKGDIR)
$(C_OBJECTS): | $(OBJ)
......@@ -87,19 +92,11 @@ $(F_OBJECTS): | $(OBJ)
$(OBJ):
mkdir -p $(OBJ)
$(LIB_PKG): $(C_OBJECTS) $(F_OBJECTS) $(PKGDIR)
$(LIB_PKG): $(C_OBJECTS) $(F_OBJECTS) $(GNUR_C_OBJECTS) $(GNUR_F_OBJECTS) $(PKGDIR)
mkdir -p $(LIBDIR)
$(DYLIB_LD) $(DYLIB_LDFLAGS) -o $(LIB_PKG) $(C_OBJECTS) $(F_OBJECTS) $(PKG_LIBS)
$(DYLIB_LD) $(DYLIB_LDFLAGS) -o $(LIB_PKG) $(C_OBJECTS) $(F_OBJECTS) $(GNUR_C_OBJECTS) $(GNUR_F_OBJECTS) $(PKG_LIBS)
mkdir -p $(FASTR_LIBRARY_DIR)/$(PKG)/libs
cp $(LIB_PKG) $(FASTR_LIBRARY_DIR)/$(PKG)/libs
# find a way to move into stats makefile (using LIB_PKG_POST)
ifeq ($(OS_NAME),Darwin)
ifeq ($(PACKAGE),stats)
install_name_tool -change libRblas.dylib $(FASTR_R_HOME)/lib/libRblas.dylib $(FASTR_LIBRARY_DIR)/$(PKG)/libs/$(PKG).so
install_name_tool -change libRlapack.dylib $(FASTR_R_HOME)/lib/libRlapack.dylib $(FASTR_LIBRARY_DIR)/$(PKG)/libs/$(PKG).so
install_name_tool -change libappl.dylib $(FASTR_R_HOME)/lib/libappl.dylib $(FASTR_LIBRARY_DIR)/$(PKG)/libs/$(PKG).so
endif
endif
$(OBJ)/%.o: $(SRC)/%.c $(H_SOURCES)
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
......
......@@ -24,14 +24,14 @@
# Completeness of the stats package is a work in progress
# Currently we compile a subset of the .c and .f files from the
# GnuR stats library source - those that do not depend on GnuR internals (always true for .f)
# A first step in the build is to make symbolic links to those files and also to
# do some necessary modofications to a copy of fft.c.
# Also do some necessary modifications to a copy of fft.c.
.PHONY: cleanpkg
.PHONY: cleanpkg nametool
GNUR_FFT = $(addprefix $(GNUR_HOME)/src/library/stats/src/, fft.c)
LIB_PKG_PRE = $(addprefix $(OBJ)/, fft.o) linked
FFT_OBJECT = $(addprefix $(OBJ)/, fft.o)
LIB_PKG_PRE = $(FFT_OBJECT)
LIB_PKG_POST = nametool
CLEAN_PKG := cleanpkg
......@@ -42,37 +42,37 @@ endif
PKG_LIBS := $(LAPACK_LIBS) $(BLAS_LIBS) -lappl -L$(FASTR_LIB_DIR) $(FLIBS)
include ../lib.mk
OBJ = lib
LINKED_F_FILES = bsplvd.f bvalue.f bvalus.f eureka.f hclust.f kmns.f lminfl.f loessf.f ppr.f qsbart.f sgram.f \
GNUR_F_FILES = bsplvd.f bvalue.f bvalus.f eureka.f hclust.f kmns.f lminfl.f loessf.f ppr.f qsbart.f sgram.f \
sinerp.f sslvrg.f stl.f stxwx.f
GNUR_LINKED_F_FILES = $(addprefix $(GNUR_HOME)/src/library/stats/src/, $(LINKED_F_FILES))
LINKED_C_FILES = isoreg.c kmeans.c loessc.c monoSpl.c sbart.c
GNUR_LINKED_C_FILES = $(addprefix $(GNUR_HOME)/src/library/stats/src/, $(LINKED_C_FILES))
GNUR_F_OBJECTS = $(addprefix $(OBJ)/, $(GNUR_F_FILES:.f=.o))
linked: $(GNUR_LINKED_F_FILES) $(GNUR_LINKED_C_FILES)
$(foreach file,$(LINKED_C_FILES),ln -sf $(GNUR_HOME)/src/library/stats/src/$(file) $(SRC)/$(file);)
$(foreach file,$(LINKED_F_FILES),ln -sf $(GNUR_HOME)/src/library/stats/src/$(file) $(SRC)/$(file) ;)
touch linked
GNUR_C_FILES = isoreg.c kmeans.c loessc.c monoSpl.c sbart.c
# this dance ensures that C_SOURCES is set correctly regardless of whether the linked/modified files
# have been created or not (C_SOURCES will have been set in ../lib.mk)
NON_LOCAL_C_SOURCES = $(addprefix $(SRC)/, $(LINKED_C_FILES))
C_LOCAL_SOURCES = $(filter-out $(NON_LOCAL_C_SOURCES),$(wildcard $(SRC)/*.c))
C_SOURCES := $(NON_LOCAL_C_SOURCES) $(C_LOCAL_SOURCES)
GNUR_C_OBJECTS := $(addprefix $(OBJ)/, $(GNUR_C_FILES:.c=.o)) $(FFT_OBJECT)
#$(info NON_LOCAL_C_SOURCES=$(NON_LOCAL_C_SOURCES))
#$(info LOCAL_C_SOURCES=$(C_LOCAL_SOURCES))
#$(info C_SOURCES=$(C_SOURCES))
include ../lib.mk
$(C_OBJECTS): | $(OBJ)
$(SRC)/fft.c: $(GNUR_FFT) src/ed_fft
ed $(GNUR_FFT) < src/ed_fft
$(OBJ)/%.o: $(GNUR_SRC)/%.c
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(OBJ)/%.o: $(GNUR_SRC)/%.f
$(F77) $(FFLAGS) $(FPICFLAGS) -c $< -o $@
# ensure that the references to Rblas, Rlapack and appl are absolute
nametool:
ifeq ($(OS_NAME),Darwin)
install_name_tool -change libRblas.dylib $(FASTR_R_HOME)/lib/libRblas.dylib $(FASTR_LIBRARY_DIR)/$(PKG)/libs/$(PKG).so
install_name_tool -change libRlapack.dylib $(FASTR_R_HOME)/lib/libRlapack.dylib $(FASTR_LIBRARY_DIR)/$(PKG)/libs/$(PKG).so
install_name_tool -change libappl.dylib $(FASTR_R_HOME)/lib/libappl.dylib $(FASTR_LIBRARY_DIR)/$(PKG)/libs/$(PKG).so
endif
cleanpkg:
rm -f linked
rm -f $(SRC)/fft.c
rm -f $(NON_LOCAL_C_SOURCES)
rm -f $(addprefix $(SRC)/, $(LINKED_F_FILES))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment