From 52c574970d5cdc4c52b4fcc55e64f7fb2f96a956 Mon Sep 17 00:00:00 2001 From: Jason Riedy Date: Sat, 26 Aug 2006 13:13:24 -0700 Subject: [PATCH 2/3] Add the Fortran->C bridge to the build system. I simply copied the rules that already existed. This adds each *-f2c.o to the libxblas.a, so libxblas.a depends on a single Fortran ABI and cannot be used between Fortran compilers without care. I will document how to remove the files from libxblas.a in the next patch. The make.inc examples are my best guesses from memory, scattered documentation, and Burkhard Burow's cfortran.h. Note that we cannot simply use cfortran.h; it's not available with a compatible license. Signed-off-by: Jason Riedy --- m4/lib-makefile.template | 12 +++++++++++- make.cray | 3 ++- make.gnu | 6 +++++- make.hp | 3 ++- make.ia64 | 3 ++- make.ibm | 5 ++++- make.sun | 3 ++- src/Makefile.template | 5 ++++- src/common/Makefile | 2 +- 9 files changed, 33 insertions(+), 9 deletions(-) diff --git a/m4/lib-makefile.template b/m4/lib-makefile.template index 3519dd0..8936db2 100644 --- a/m4/lib-makefile.template +++ b/m4/lib-makefile.template @@ -24,7 +24,9 @@ include ../../make.inc SRC_PATH = ../../src/routine ROUTINE_SRCS = FOREACH(`ROUTINE_ARGS', `\ - $(SRC_PATH)/ROUTINE_NAME(arg).c') + $(SRC_PATH)/ROUTINE_NAME(arg).c') \ + FOREACH(`ROUTINE_ARGS', `\ + $(SRC_PATH)/ROUTINE_NAME(arg)-f2c.c') routine-source: $(ROUTINE_SRCS) @@ -38,6 +40,14 @@ FOREACH(`ROUTINE_ARGS', `$(SRC_PATH)/ROU ')dnl +FOREACH(`ROUTINE_ARGS', `$(SRC_PATH)/ROUTINE_NAME(arg)-f2c.c: ../f2c-bridge.m4 ../cblas.m4`' + sed -e "s/rou`'tine/routine/g;s/ROU`'TINE/ROUTINE/g;s/RARG/arg/g;" ../f2c-bridge.m4 | \ + $(M4) $(M4_OPTS) > tmp.ROUTINE_NAME(arg)-f2c.c && \ + $(INDENT) $(INDENT_OPTS) tmp.ROUTINE_NAME(arg)-f2c.c && \ + mv tmp.ROUTINE_NAME(arg)-f2c.c $`'@ && rm -f tmp.ROUTINE_NAME(arg)-f2c.c* + +')dnl + routine.h: ../cblas.m4 ../header.template routine-common.m4 sed -e "s/rou`'tine/routine/g" -e "s/ROU`'TINE/ROUTINE/g" \ ../header.template | $(M4) $(M4_OPTS) - >$`'@ diff --git a/make.cray b/make.cray index 2ee3c26..2b83e38 100644 --- a/make.cray +++ b/make.cray @@ -18,7 +18,8 @@ # VERSION = 1.0 CC = cc -OPTS = -O3 +F2C_CONFIG=-DCONFIG_FC_UCASE +OPTS = -O3 $(F2C_CONFIG) LINKER = $(CC) LINKOPTS = diff --git a/make.gnu b/make.gnu index f14a810..1831442 100644 --- a/make.gnu +++ b/make.gnu @@ -18,7 +18,11 @@ # VERSION = 1.0 CC = gcc -OPTS = -O3 -Dx86 -Wall +# For gfortran +#F2C_CONFIG=-DCONFIG_FC_UNDERSCORE +# For g77 or gfortran -ff2c +F2C_CONFIG=-DCONFIG_FC_DBL_UNDERSCORE -DCONFIG_FC_RETURNS_DBL_REAL +OPTS = -O3 -Dx86 -Wall $(F2C_CONFIG) LINKER = $(CC) LINKOPTS = diff --git a/make.hp b/make.hp index 648aa18..20b0956 100644 --- a/make.hp +++ b/make.hp @@ -18,7 +18,8 @@ # VERSION = 1.0 CC = /opt/ansic/bin/cc -OPTS = +O2 +DA2.0 +DS2.0 +F2C_CONFIG=-DCONFIG_FC_UNDERSCORE +OPTS = +O2 +DA2.0 +DS2.0 $(F2C_CONFIG) LINKER = $(CC) LINKOPTS= diff --git a/make.ia64 b/make.ia64 index 5d441c7..c6767f2 100644 --- a/make.ia64 +++ b/make.ia64 @@ -18,7 +18,8 @@ # VERSION = 1.0 CC = icc -OPTS = -O2 -mp +F2C_CONFIG=-DCONFIG_FC_UNDERSCORE +OPTS = -O2 -mp $(F2C_CONFIG) LINKER = $(CC) LINKOPTS = diff --git a/make.ibm b/make.ibm index c8af201..bcf43c3 100644 --- a/make.ibm +++ b/make.ibm @@ -18,7 +18,10 @@ # VERSION = 1.0 CC = xlc -OPTS = -O2 +# By default, xlf produces lower-case symbols with no underscore, so +# no F2C_CONFIG options are necessary. +F2C_CONFIG= +OPTS = -O2 $(F2C_CONFIG) LINKER = $(CC) LINKOPTS = diff --git a/make.sun b/make.sun index 7ae1d00..cb01e87 100644 --- a/make.sun +++ b/make.sun @@ -18,7 +18,8 @@ # VERSION = 1.0 CC = cc -OPTS = -xO4 +F2C_CONFIG=-DCONFIG_FC_UNDERSCORE +OPTS = -xO4 $(F2C_CONFIG) LINKER = $(CC) LINKOPTS = diff --git a/src/Makefile.template b/src/Makefile.template index bcf58dd..3f96837 100644 --- a/src/Makefile.template +++ b/src/Makefile.template @@ -21,7 +21,10 @@ M4_PATH = ../../m4/routine ROUTINE_SRCS =FOREACH(`ROUTINE_ARGS', `\ - $(SRC_PATH)/ROUTINE_NAME(arg).c') + $(SRC_PATH)/ROUTINE_NAME(arg).c') \ + FOREACH(`ROUTINE_ARGS', + `\ + $(SRC_PATH)/ROUTINE_NAME(arg)-f2c.c') ROUTINE_OBJS = $(ROUTINE_SRCS:.c=.o) diff --git a/src/common/Makefile b/src/common/Makefile index 2170bd6..6a7f5a1 100644 --- a/src/common/Makefile +++ b/src/common/Makefile @@ -14,7 +14,7 @@ include ../../make.inc LIB_PATH = ../.. HEADER_PATH = .. -COMM_OBJS = BLAS_error.o blas_malloc.o BLAS_fpinfo_x.o +COMM_OBJS = BLAS_error.o blas_malloc.o BLAS_fpinfo_x.o BLAS_fpinfo_x-f2c.o all: $(COMM_OBJS) -- 1.4.2.g6580-dirty