Skip to content

Commit

Permalink
Changes found on laptop, probably to adapt to new 90 -> f90 names.
Browse files Browse the repository at this point in the history
  • Loading branch information
dmorse committed Aug 15, 2019
1 parent fb397c8 commit 9d76e99
Show file tree
Hide file tree
Showing 6 changed files with 199 additions and 194 deletions.
46 changes: 28 additions & 18 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
##### Modifiable options that control version of code ######################

option(USE_FFT3 "Use the fft3_mod file (and FFT3.0). Else, use fft2_mod" ON)
option(USE_DEVEL "Use the -D DEVEL option with the Fortran preprocessor" OFF)
option(BUILD_DMG "Build a DMG based application for OSX clients" OFF)

############################################################################

IF (USE_INTEL)
set (CMAKE_C_COMPILER "icc")
set (CMAKE_CXX_COMPILER "icpc")
ENDIF (USE_INTEL)


# CMakeLists files in this project can
# refer to the root source directory of the project as ${PSCF_SOURCE_DIR} and
# to the root binary directory of the project as ${PSCF_BINARY_DIR}.
cmake_minimum_required (VERSION 2.8.11)
project (PSCF Fortran)

#### Based on https://cmake.org/Wiki/CMakeForFortranExamplea ####
enable_language (Fortran)

option(USE_FFT3 "Use the fft3_mod file (and FFT3.0). Otherwise, use fft2_mod (and FFTW2)" ON)
option(USE_DEVEL "Use the -D DEVEL option with the Fortran preprocessor" OFF)
option(BUILD_DMG "Build a DMG based application for OSX clients" OFF)
# CMakeLists files in this project refer to the root source directory
# of the project as ${PSCF_SOURCE_DIR} and to the root build/binary
# directory of the project as ${PSCF_BINARY_DIR}.

# Add our extra Find*.cmake modules
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/")

# make sure that the default is a RELEASE
# Make sure that the default is a RELEASE
if (NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE RELEASE CACHE STRING
"Choose the type of build, options are: None Debug Release."
Expand All @@ -30,12 +34,13 @@ endif (NOT CMAKE_BUILD_TYPE)
# default installation
#get_filename_component (default_prefix ".." ABSOLUTE)
#set (CMAKE_INSTALL_PREFIX ${default_prefix} CACHE STRING
# "Choose the installation directory; by default it installs in the NORMA directory."
# "Choose the install prefix; by default it installs in the NORMA directory."
# FORCE)

# FFLAGS depend on the compiler
# Identify fortran compiler name
get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)

# Set compiler flags depend on the compiler
if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
# gfortran
set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -ffree-form")
Expand All @@ -44,10 +49,6 @@ elseif (Fortran_COMPILER_NAME MATCHES "ifort.*")
# ifort (untested)
set (CMAKE_Fortran_FLAGS_RELEASE "-O3 -free")
set (CMAKE_Fortran_FLAGS_DEBUG "-free -O0 -g")
elseif (Fortran_COMPILER_NAME MATCHES "g77")
# g77
set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -m32")
set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g -m32")
else (Fortran_COMPILER_NAME MATCHES "gfortran.*")
message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER})
message ("Fortran compiler: " ${Fortran_COMPILER_NAME})
Expand All @@ -57,12 +58,21 @@ else (Fortran_COMPILER_NAME MATCHES "gfortran.*")
endif (Fortran_COMPILER_NAME MATCHES "gfortran.*")
#### End based on https://cmake.org/Wiki/CMakeForFortranExamplea ####

if (USE_DEVEL)
set (DEVEL "-DDEVEL=1")
endif (USE_DEVEL)

# Recurse into the "PSCF" subdirectory. This does not actually
# cause another cmake executable to run. The same process will walk through
# the project's entire directory structure.
add_subdirectory (src)
if (BUILD_DMG)
set (BUILD_MACOSX_BUNDLE "MACOSX_BUNDLE")
set (MACOSX_BUNDLE_EXT ".app")
endif (BUILD_DMG)

set(FORPEDO ${CMAKE_SOURCE_DIR}/tools/python/preprocess-0.6.1/preprocess.py)

find_package(LAPACK)

# Recurse into the "src" subdirectory.
add_subdirectory (src)

# Setup the packaging
set(CPACK_PACKAGE_NAME "pscf")
Expand Down
1 change: 0 additions & 1 deletion make/INSTALL
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ defined in config.mk, enter:
6. If desired, to remove all of the files generated by compilation from
the make/ directory, enter:


> make clean

To remove any files that were created by the "make install" command,
Expand Down
12 changes: 8 additions & 4 deletions make/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,21 @@ pscf.f90: $(SRC)/pscf.fp.f90
# ====== Install =================================================

BIN_DIR=$(INSTALL)/bin
PYTHON_DIR=$(INSTALL)/lib/python2.7/site-packages
PYTHON_DIR=$(INSTALL)/lib/python2.7/site-packages/pscf
MATLAB_DIR=$(INSTALL)/lib/matlab

install: pscf
mkdir -p $(BIN_DIR)
cp pscf $(BIN_DIR)/pscf
cp $(REPO)/tools/bin/pscf-env $(BIN_DIR)
cp $(REPO)/tools/bin/pscf-read-sweep $(BIN_DIR)
mkdir -p $(PYTHON_DIR)/pscf
cp $(REPO)/tools/python/pscf/*.py $(PYTHON_DIR)/pscf
mkdir -p $(PYTHON_DIR)
cp $(REPO)/tools/python/pscf/*.py $(PYTHON_DIR)
mkdir -p $(MATLAB_DIR)
cp $(REPO)/tools/matlab/*.m $(MATLAB_DIR)

uninstall:
rm -rf $(BIN_DIR)/pscf*
rm -rf $(PYTHON_DIR)/pscf/*
rm -rf $(PYTHON_DIR)/*
rm -rf $(MATLAB_DIR)/*

10 changes: 5 additions & 5 deletions make/modules.mk
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# ====== Modules =================================================

# Utility modules

Expand All @@ -23,7 +22,7 @@ grid_mod.o: $(SRC)/grid_mod.f90 const_mod.o\
$(FFT_FILE).o: $(SRC)/$(FFT_FILE).f90 const_mod.o
$(F90) $(FAST) -c $(SRC)/$(FFT_FILE).f90

# crystallography modules
# Crystallography modules

group_mod.o: $(SRC)/group_mod.f90 const_mod.o version_mod.o
$(F90) $(FAST) -c $(SRC)/group_mod.f90
Expand Down Expand Up @@ -51,7 +50,7 @@ field_io_mod.o: $(SRC)/field_io_mod.f90 const_mod.o io_mod.o\
$(FFT_FILE).o grid_basis_mod.o
$(F90) $(FAST) -c $(SRC)/field_io_mod.f90

# scft modules
# SCFT modules

chemistry_mod.o: $(SRC)/chemistry_mod.f90 const_mod.o io_mod.o
$(F90) $(FAST) -c $(SRC)/chemistry_mod.f90
Expand All @@ -76,7 +75,7 @@ spinodal_mod.o: $(SRC)/spinodal_mod.f90 const_mod.o io_mod.o\
response_pd_mod.o chemistry_mod.o
$(F90) $(FAST) -c $(SRC)/spinodal_mod.f90

# iteration modules
# Iteration modules

iterate_mod.f90: $(SRC)/iterate_mod.fp.f90
$(FORPEDO) $(DEVEL) $(SRC)/iterate_mod.fp.f90 > iterate_mod.f90
Expand All @@ -95,7 +94,8 @@ sweep_mod.o: $(SRC)/sweep_mod.f90 const_mod.o io_mod.o\
chemistry_mod.o unit_cell_mod.o basis_mod.o
$(F90) $(FAST) -c $(SRC)/sweep_mod.f90

# response directory
# Linear response modules

response_step_mod.o: $(SRC)/response_step_mod.f90\
chemistry_mod.o $(FFT_FILE).o
$(F90) $(FAST) -c $(SRC)/response_step_mod.f90
Expand Down
68 changes: 28 additions & 40 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,40 +1,28 @@
# TODO: move these options to the top file

if (USE_FFT3)
set (FFT_FILE fft3_mod.f90)
find_package(FFTW)
else (USE_FFT3)
set (FFT_FILE fft2_mod.f90)
find_package(FFTW)
endif (USE_FFT3)

if (USE_DEVEL)
set (DEVEL "-DDEVEL=1")
endif (USE_DEVEL)

if (BUILD_DMG)
set (BUILD_MACOSX_BUNDLE "MACOSX_BUNDLE")
set (MACOSX_BUNDLE_EXT ".app")
endif (BUILD_DMG)

set(FORPEDO ${CMAKE_SOURCE_DIR}/tools/python/preprocess-0.6.1/preprocess.py)

find_package(LAPACK)

# Preprocess scf_mod module
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/scf_mod.f90
COMMAND ${FORPEDO} ${DEVEL} ${CMAKE_CURRENT_SOURCE_DIR}/scf_mod.fp.f90 > ${CMAKE_CURRENT_BINARY_DIR}/scf_mod.f90
DEPENDS scf_mod.fp.f90
)

# Preprocess iterate_mod module
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/iterate_mod.f90
COMMAND ${FORPEDO} ${DEVEL} ${CMAKE_CURRENT_SOURCE_DIR}/iterate_mod.fp.f90 > ${CMAKE_CURRENT_BINARY_DIR}/iterate_mod.f90
DEPENDS iterate_mod.fp.f90
)

# Create a library called "pscf_lib", which includes module source files.
# The extension is already found. Any number of sources could be listed here.
# Choose version of wrapper for FFTW library
if (USE_FFT3)
set (FFT_FILE fft3_mod.f90)
find_package(FFTW)
else (USE_FFT3)
set (FFT_FILE fft2_mod.f90)
find_package(FFTW)
endif (USE_FFT3)

# Create library called "pscf_lib" that contains all module files.
add_library(pscf_lib
const_mod.f90
io_mod.f90
Expand All @@ -61,42 +49,47 @@ add_library(pscf_lib
spinodal_mod.f90
)

# Ensure that linker can find any headers or fortram *.mod module files,
# including preprocessor geneerated sources placed in the build directory.
# This is the in-core source dir
# Add source and build directories to list of include directories
# used when building pscf_lib. We add the build directory to ensure
# that the compiler/archiver can find fortran module (*.mod) files
# and preprocessor generated source (*.f90) files, all of which are
# placed in the build directory.

# Add the source directory.
target_include_directories (pscf_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
# This is the out-of-source build dir, with generated sources

# Add the out-of-source build dir
target_include_directories (pscf_lib PUBLIC ${CMAKE_CURRENT_BINARY_DIR})

# Link to FFTW and Lapack libraries
# Link pscf_lib to FFTW and Lapack libraries
target_link_libraries(pscf_lib LINK_PUBLIC ${FFTW_LIBRARIES} ${LAPACK_LIBRARIES})


### PREPROCESS THE MAIN FILE ###
# Preprocess the main pscf program
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pscf.f90
COMMAND ${FORPEDO} ${DEVEL} ${CMAKE_CURRENT_SOURCE_DIR}/pscf.fp.f90 > ${CMAKE_CURRENT_BINARY_DIR}/pscf.f90
DEPENDS pscf.fp.f90
)

# Build executable pscf from pscf.f90
add_executable(pscf
${BUILD_MACOSX_BUNDLE} WIN32
${CMAKE_CURRENT_BINARY_DIR}/pscf.f90
)

set(APPS ${CMAKE_CURRENT_BINARY_DIR}/pscf${MACOSX_BUNDLE_EXT})
set(DIRS "")

# TODO: clean up these links
target_link_libraries(pscf LINK_PUBLIC pscf_lib)

# Install target
install(TARGETS pscf
BUNDLE DESTINATION . COMPONENT Runtime
RUNTIME DESTINATION bin COMPONENT Runtime
LIBRARY DESTINATION lib COMPONENT Runtime
ARCHIVE DESTINATION lib/static COMPONENT Runtime
)

set(APPS ${CMAKE_CURRENT_BINARY_DIR}/pscf${MACOSX_BUNDLE_EXT})
set(DIRS "")

if (BUILD_DMG)
# Copy libraries into the DMG
INSTALL(CODE "
Expand All @@ -106,8 +99,3 @@ if (BUILD_DMG)
" COMPONENT Runtime)
endif (BUILD_DMG)

#install(TARGETS pscf
# RUNTIME DESTINATION bin
# LIBRARY DESTINATION lib
# ARCHIVE DESTINATION lib/static
#)

0 comments on commit 9d76e99

Please sign in to comment.