Skip to content

Commit

Permalink
Crude version working with make
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrows committed Jan 9, 2024
1 parent 7526c5f commit 51468d1
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 7 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ ecbuild_add_option( FEATURE FFTW
REQUIRED_PACKAGES "FFTW COMPONENTS double ${single}" )

ecbuild_add_option( FEATURE TRANSI
DEFAULT ON
DEFAULT OFF
DESCRIPTION "Compile TransI C-interface to trans"
CONDITION HAVE_DOUBLE_PRECISION )

Expand Down
92 changes: 88 additions & 4 deletions src/trans/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,93 @@ ecbuild_list_add_pattern( LIST trans_src
internal/*
external/specnorm.F90
module/*
${CMAKE_CURRENT_BINARY_DIR}/internal/ectrans_version_mod.F90
${CMAKE_CURRENT_BINARY_DIR}/internal/ectrans_version_mod.F90
QUIET
)

get_target_property(fiat_include fiat INTERFACE_INCLUDE_DIRECTORIES)
set(fiat_include_opts ${fiat_include})
list(TRANSFORM fiat_include_opts PREPEND " -I")
list(JOIN fiat_include_opts " " fiat_include_opts_j1)
separate_arguments(fiat_include_opts_j UNIX_COMMAND "${fiat_include_opts_j1}")


function(DEFINE_PREPROCESS)
set (options ONGPU )
set (oneValueArgs INDIR OUTDIR SUBDIR BUILDTYPE)
set (multiValueArgs SOURCEFILES SPECOPTS)
cmake_parse_arguments(DPSPREFIX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(indir ${DPSPREFIX_INDIR})
set(outdir ${DPSPREFIX_OUTDIR})
set(subdir ${DPSPREFIX_SUBDIR})
set(destdir ${DPSPREFIX_BUILDTYPE})
set(custopt ${DPSPREFIX_SPECOPTS})
set(files ${DPSPREFIX_SOURCEFILES})
message (STATUS "Subdir: " ${subdir})
message (STATUS "Buildtype: " ${destdir})
message (STATUS "Specopts: " ${custopt})
message (STATUS "Files " "${files}")
set(sourcesdir "${indir}/${subdir}")
set(destdir "${outdir}/${destdir}/${subdir}")
message(STATUS "Sources dir:" ${sourcesdir})
message(STATUS "Destination dir:" ${destdir})
foreach( file_i ${files})
message (STATUS "Define preprocessing for file: ${destdir}/${file_i}")
add_custom_command(
COMMAND gcc-13 -E -P -cpp ${sourcesdir}/${file_i} -I${FFTW_INCLUDE_DIRS} ${fiat_include_opts_j} -I${PROJECT_SOURCE_DIR}/src/trans/include/ectrans -I${PROJECT_SOURCE_DIR}/src/trans/external -DSYMBOLSUFFIX=${prec} -DPRECOPT=${precno} > "${destdir}/${file_i}.pp.f90"
DEPENDS ${sourcesdir}/${file_i}
OUTPUT ${destdir}/${file_i}.pp.f90
COMMENT "Preprocessing ${sourcesdir}/${file_i} to ${destdir}/${file_i}.pp.f90"
VERBATIM
)
endforeach( file_i )
endfunction(DEFINE_PREPROCESS)

function(GENERATE_BUILD)
set (options ONGPU )
set (oneValueArgs BUILDTYPE)
set (multiValueArgs SPECOPTS )
cmake_parse_arguments(GBPREFIX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(buildtype ${GBPREFIX_BUILDTYPE}) #buildtype_arg
set(specopts ${GBPREFIX_SPECOPTS}) #specopts_arg} )
set(ongpu ${GBPREFIX_ONGPU}) # ${driverfile_arg} )
message (STATUS "Buildtype: " ${buildtype})
message (STATUS "Specopts: " ${specopts})
#file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src)
#file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype})
#file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype}/src)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype}/src/trans/sharedmem)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype}/src/trans/algor)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype}/src/trans/internal)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype}/src/trans/external)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype}/src/trans/module)
list(REMOVE_ITEM trans_src ${CMAKE_CURRENT_BINARY_DIR}/internal/ectrans_version_mod.F90)
list(REMOVE_ITEM trans_src sharedmem/sharedmem.c)
define_preprocess(INDIR ${PROJECT_SOURCE_DIR} OUTDIR "${CMAKE_BINARY_DIR}/preprocessed_src" SUBDIR "src/trans/" BUILDTYPE ${buildtype} SOURCEFILES ${trans_src} SPECOPTS ${specopts})
set(trans_sources ${trans_src})
#list(REMOVE_ITEM trans_sources ${CMAKE_CURRENT_BINARY_DIR}/internal/ectrans_version_mod.F90)
#list(REMOVE_ITEM trans_sources sharedmem/sharedmem.c)
list(TRANSFORM trans_sources PREPEND ${CMAKE_BINARY_DIR}/preprocessed_src/${buildtype}/src/trans/)
list(TRANSFORM trans_sources APPEND .pp.f90)
list(APPEND trans_sources ${CMAKE_CURRENT_BINARY_DIR}/internal/ectrans_version_mod.F90)
list(APPEND trans_sources sharedmem/sharedmem.c)
set(trans_sources_listname "trans_sources_${buildtype}")
message(STATUS "Trans source list name:" ${trans_sources_listname})
set("${trans_sources_listname}" ${trans_sources} PARENT_SCOPE)
endfunction(GENERATE_BUILD)




foreach( prec dp sp )
if( ${prec} MATCHES "sp" )
set(precno 1)
elseif (${prec} MATCHES "dp")
set(precno 2)
endif()
endforeach( prec )


if( NOT HAVE_FFTW )
ecbuild_list_exclude_pattern( LIST trans_src REGEX tpm_fftw.F90 )
endif()
Expand All @@ -57,16 +140,17 @@ foreach( prec dp sp )
elseif (${prec} MATCHES "dp")
set(precno 2)
endif()

generate_build( SPECOPTS ${custopts} BUILDTYPE ${prec} )
message(STATUS "Preprocessed sources:" ${trans_sources_${prec}})
ecbuild_add_library(
TARGET trans_${prec}
LINKER_LANGUAGE Fortran
SOURCES ${trans_src}
SOURCES ${trans_sources_${prec}}
${CMAKE_CURRENT_BINARY_DIR}/internal/ectrans_version_mod.F90
PUBLIC_INCLUDES $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/trans/include>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/trans/include/ectrans>
$<INSTALL_INTERFACE:include/ectrans>
$<INSTALL_INTERFACE:include>
PRIVATE_INCLUDES ${PROJECT_SOURCE_DIR}/src/trans/external
PRIVATE_DEFINITIONS SYMBOLSUFFIX=${prec}
PRECOPT=${precno}
PUBLIC_LIBS fiat parkind_${prec}
Expand Down
2 changes: 1 addition & 1 deletion src/trans/include/ectrans/renames.inc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#define DIST_GRID_32_CTL_MOD SUFFIXIZE(DIST_GRID_32_CTL_MOD_VER)
#define DIST_GRID_CTL_MOD SUFFIXIZE(DIST_GRID_CTL_MOD_VER)
#define DIST_SPEC_CONTROL_MOD SUFFIXIZE(DIST_SPEC_CONTROL_MOD_VER)
#define ECTRANS_VERSION_MOD SUFFIXIZE(ECTRANS_VERSION_MOD_VER)
!#define ECTRANS_VERSION_MOD SUFFIXIZE(ECTRANS_VERSION_MOD_VER)
#define eq_regions_mod SUFFIXIZE(eq_regions_mod_VER)
#define EQ_REGIONS_MOD SUFFIXIZE(EQ_REGIONS_MOD_VER)
#define FIELD_SPLIT_MOD SUFFIXIZE(FIELD_SPLIT_MOD_VER)
Expand Down
1 change: 0 additions & 1 deletion src/trans/internal/ectrans_version_mod.F90.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
! granted to it by virtue of its status as an intergovernmental organisation
! nor does it submit to any jurisdiction.
!
#include "renames.inc"
MODULE ECTRANS_VERSION_MOD

IMPLICIT NONE
Expand Down

0 comments on commit 51468d1

Please sign in to comment.