Skip to content

Remove exec flag #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>FieldML</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
224 changes: 88 additions & 136 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,140 +34,92 @@
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK ***** */


# Set the minimum version of cmake required to 2.6
CMAKE_MINIMUM_REQUIRED( VERSION 2.6 )

# Set this nampspace to keep these options seperate from other project options
SET( FIELDML_NAMESPACE_NAME FIELDML )
PROJECT(fieldml)

MACRO( OPTION_WITH_DEFAULT OPTION_NAME OPTION_STRING OPTION_DEFAULT )
IF( NOT DEFINED ${OPTION_NAME} )
SET( ${OPTION_NAME} ${OPTION_DEFAULT} )
ENDIF( NOT DEFINED ${OPTION_NAME} )

OPTION( ${OPTION_NAME} "${OPTION_STRING}" ${${OPTION_NAME}} )
ENDMACRO( OPTION_WITH_DEFAULT OPTION_NAME OPTION_STRING OPTION_DEFAULT )

MACRO( CACHE_VAR_WITH_DEFAULT OPTION_NAME OPTION_DEFAULT OPTION_TYPE OPTION_STRING )
IF( NOT DEFINED ${OPTION_NAME} )
SET( ${OPTION_NAME} ${OPTION_DEFAULT} )
ENDIF( NOT DEFINED ${OPTION_NAME} )

SET( ${OPTION_NAME} "${OPTION_DEFAULT}" CACHE ${OPTION_TYPE} "${OPTION_STRING}" )
ENDMACRO( CACHE_VAR_WITH_DEFAULT OPTION_NAME OPTION_DEFAULT OPTION_TYPE OPTION_STRING )

# Set up library options
# Generic library options
SET( LIBRARY_TARGET_NAME fieldml )

STRING( TOUPPER ${LIBRARY_TARGET_NAME} UPPERCASE_LIBRARY_TARGET_NAME )
SET( FIELDML_API_MAJOR_VERSION "0" )
SET( FIELDML_API_MINOR_VERSION "5" )
SET( FIELDML_API_PATCH_VERSION "0" )

CACHE_VAR_WITH_DEFAULT( ${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_TYPE "Release" STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel" )
SET( CMAKE_BUILD_TYPE ${${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_TYPE} CACHE
INTERNAL "Internalise this variable and manipulate with
${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_TYPE" FORCE )
CACHE_VAR_WITH_DEFAULT( ${UPPERCASE_LIBRARY_TARGET_NAME}_INSTALL_PREFIX
"${CMAKE_INSTALL_PREFIX}" PATH
"Install path prefix, prepended onto install directories." )
SET( CMAKE_INSTALL_PREFIX ${${UPPERCASE_LIBRARY_TARGET_NAME}_INSTALL_PREFIX}
CACHE INTERNAL "Internalise this variable and manipulate with
${UPPERCASE_LIBRARY_TARGET_NAME}_INSTALL_PREFIX" FORCE )
OPTION_WITH_DEFAULT( ${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_STATIC_LIB "Build static zlib" TRUE )

OPTION_WITH_DEFAULT( ${UPPERCASE_LIBRARY_TARGET_NAME}_INSTALL_CONFIG "Do you want to install CMake configuration files?" TRUE )

OPTION_WITH_DEFAULT( ${UPPERCASE_LIBRARY_TARGET_NAME}_USE_HDF5 "Do you want to use hdf5?" FALSE )

OPTION_WITH_DEFAULT( ${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_JAVA "Do you want to build the Java bindings" FALSE )


# Specific library options
OPTION_WITH_DEFAULT( ${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_TEST "Build ${LIBRARY_TARGET_NAME} test application" FALSE )

# Define library type settings
IF( NOT ${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_TEST )
SET( EXCLUDE_TEST EXCLUDE_FROM_ALL )
ENDIF( NOT ${UPPERCASE_LIBRARY_TARGET_NAME}_BUILD_TEST )

# Run ADD_SUBDIRECTORY command
SET( LIBRARY_TARGET_NAME fieldml_api )
SET( FIELDML_API_LIBRARY_TARGET_NAME ${LIBRARY_TARGET_NAME} )
ADD_SUBDIRECTORY( core )
SET( LIBRARY_TARGET_NAME fieldml_io_api )
SET( FIELDML_IO_API_LIBRARY_TARGET_NAME ${LIBRARY_TARGET_NAME} )
ADD_SUBDIRECTORY( io )
GET_DIRECTORY_PROPERTY(HDF5_INCLUDE_DIRS DIRECTORY io DEFINITION HDF5_INCLUDE_DIRS)
GET_DIRECTORY_PROPERTY(HDF5_MINE_LIBRARIES DIRECTORY io DEFINITION HDF5_MINE_LIBRARIES)
GET_DIRECTORY_PROPERTY(MPI_LIBRARIES DIRECTORY io DEFINITION MPI_MINE_LIBRARIES)
GET_DIRECTORY_PROPERTY(MPI_INCLUDE_DIRS DIRECTORY io DEFINITION MPI_INCLUDE_DIRS)
GET_DIRECTORY_PROPERTY(HDF5_USE_MPI DIRECTORY io DEFINITION HDF5_USE_MPI)
ADD_SUBDIRECTORY( test )

foreach(arg ${MPI_LIBRARIES})
set(MPI_MINE_LIBRARIES "${MPI_MINE_LIBRARIES} ${arg}")
endforeach(arg ${MPI_LIBRARIES})

IF( ${FIELDML_NAMESPACE_NAME}_INSTALL_CONFIG )
SET( LIBRARY_CONFIG_FILE ${CMAKE_CURRENT_BINARY_DIR}/fieldml-config.cmake )
SET( CONFIG_FILE_CONTENTS
"\nIF( NOT DEFINED _${FIELDML_NAMESPACE_NAME}_CONFIG_CMAKE )"
"\nSET( _${FIELDML_NAMESPACE_NAME}_CONFIG_CMAKE TRUE )"
"\nGET_FILENAME_COMPONENT( SELF_DIR \"\${CMAKE_CURRENT_LIST_FILE}\" PATH )"
"\nINCLUDE( \${SELF_DIR}/fieldml-targets.cmake )"
"\nGET_FILENAME_COMPONENT( ${FIELDML_NAMESPACE_NAME}_INCLUDE_DIRS \"\${SELF_DIR}/../../include\" ABSOLUTE )"
"\nSET( ${FIELDML_NAMESPACE_NAME}_INCLUDE_DIRS \"\${${FIELDML_NAMESPACE_NAME}_INCLUDE_DIRS}\" \"${LIBXML2_INCLUDE_DIR}\" \"${HDF5_INCLUDE_DIRS}\" \"${MPI_INCLUDE_DIRS}\" )"
"\nSET( ${FIELDML_NAMESPACE_NAME}_LIBRARIES ${FIELDML_API_LIBRARY_TARGET_NAME} ${FIELDML_IO_API_LIBRARY_TARGET_NAME} ${HDF5_MINE_LIBRARIES} ${MPI_MINE_LIBRARIES})"
"\nSET( ${FIELDML_NAMESPACE_NAME}_DEFINITIONS ${LIBXML2_DEFINITIONS} )"
"\nSET( ${FIELDML_NAMESPACE_NAME}_FOUND TRUE )"
"\nENDIF( NOT DEFINED _${FIELDML_NAMESPACE_NAME}_CONFIG_CMAKE )"
"\n" )
FILE( WRITE ${LIBRARY_CONFIG_FILE} ${CONFIG_FILE_CONTENTS} )
INSTALL( FILES ${LIBRARY_CONFIG_FILE} DESTINATION lib/cmake )
INSTALL( EXPORT fieldml-targets
DESTINATION lib/cmake )
ENDIF( ${FIELDML_NAMESPACE_NAME}_INSTALL_CONFIG )

IF ( FIELDML_BUILD_JAVA )
FIND_PACKAGE(SWIG REQUIRED)
FIND_PACKAGE(JNI)
FIND_PACKAGE(Java)
INCLUDE_DIRECTORIES(${JNI_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(io/src)
INCLUDE_DIRECTORIES(core/src)
INCLUDE(${SWIG_USE_FILE})

INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

SET(CMAKE_SWIG_FLAGS "-Iio/src;-Icore/src;-package;fieldml.jni")
SET(CMAKE_SWIG_OUTDIR "fieldml/jni")

SET_SOURCE_FILES_PROPERTIES(jni/fieldml_api.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(jni/fieldml_io.i PROPERTIES CPLUSPLUS ON)

# If you change these version, also change the .i files.
SWIG_ADD_MODULE(fieldml_jni_0.5 java jni/fieldml_api.i)
SWIG_ADD_MODULE(fieldml_io_0.5 java jni/fieldml_io.i)
SWIG_LINK_LIBRARIES(fieldml_jni_0.5 fieldml_api fieldml_io_api)
SWIG_LINK_LIBRARIES(fieldml_io_0.5 fieldml_api fieldml_io_api)

# Also make the jar file...
SET(javafiles "fieldml/jni/FieldmlApiConstants.java;fieldml/jni/FieldmlApi.java;fieldml/jni/FieldmlApiJNI.java;fieldml/jni/FieldmlDataDescriptionType.java;fieldml/jni/FieldmlDataResourceType.java;fieldml/jni/FieldmlDataSourceType.java;fieldml/jni/FieldmlEnsembleMembersType.java;fieldml/jni/FieldmlHandleType.java;fieldml/jni/FieldmlIo.java;fieldml/jni/FieldmlIoJNI.java;fieldml/jni/SWIGTYPE_p_FmlBoolean.java;fieldml/jni/SWIGTYPE_p_FmlObjectHandle.java;fieldml/jni/SWIGTYPE_p_FmlSessionHandle.java;fieldml/jni/SWIGTYPE_p_int32_t.java")
SET(classfiles "fieldml/jni/FieldmlApi.class;fieldml/jni/FieldmlApiConstants.class;fieldml/jni/FieldmlApiJNI.class;fieldml/jni/FieldmlDataDescriptionType.class;fieldml/jni/FieldmlDataDescriptionType\\$$SwigNext.class;fieldml/jni/FieldmlDataResourceType.class;fieldml/jni/FieldmlDataResourceType\\$$SwigNext.class;fieldml/jni/FieldmlDataSourceType.class;fieldml/jni/FieldmlDataSourceType\\$$SwigNext.class;fieldml/jni/FieldmlEnsembleMembersType.class;fieldml/jni/FieldmlEnsembleMembersType\\$$SwigNext.class;fieldml/jni/FieldmlHandleType.class;fieldml/jni/FieldmlHandleType\\$$SwigNext.class;fieldml/jni/FieldmlIoConstants.class;fieldml/jni/FieldmlIo.class;fieldml/jni/FieldmlIoConstants.class;fieldml/jni/FieldmlIoJNI.class;fieldml/jni/SWIGTYPE_p_FmlBoolean.class;fieldml/jni/SWIGTYPE_p_FmlObjectHandle.class;fieldml/jni/SWIGTYPE_p_FmlSessionHandle.class;fieldml/jni/SWIGTYPE_p_int32_t.class")

ADD_CUSTOM_COMMAND(OUTPUT ${classfiles}
COMMAND ${Java_JAVAC_EXECUTABLE} ARGS ${javafiles}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/jni/fieldml_apiJAVA_wrap.cxx)
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/jni/fieldml.jar
COMMAND ${Java_JAR_EXECUTABLE} ARGS cf ${CMAKE_CURRENT_BINARY_DIR}/jni/fieldml.jar ${classfiles}
DEPENDS ${classfiles})
ADD_CUSTOM_TARGET(jnijar ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/jni/fieldml.jar)

ENDIF ( FIELDML_BUILD_JAVA )
# Set the minimum version of cmake required to 3.0
cmake_minimum_required( VERSION 3.0 )

# Set this namespace to keep these options seperate from other project options
set( FIELDML_NAMESPACE_NAME FIELDML )
project(fieldml VERSION 0.5.0 LANGUAGES CXX)
enable_language(Fortran OPTIONAL)

option(USE_HDF5 "Do you want to use netgen (HDF5)?" NO)
option(HDF5_WITH_MPI "Do you want to use MPI with HDF5?" NO)
option(BUILD_TESTS "Build tests" ON)
option(FORTRAN_BINDINGS "Do you want to build the Fortran bindings" YES)
if (FORTRAN_BINDINGS AND NOT CMAKE_Fortran_COMPILER)
set(FORTRAN_BINDINGS NO)
message(WARNING "No Fortran compiler found but FORTRAN_BINDINGS requested. Disabling.")
endif()
option(JAVA_BINDINGS "Do you want to build the Java bindings" NO)
set(PACKAGE_CONFIG_DIR "lib/cmake" CACHE STRING "Directory for package config files (relative to CMAKE_INSTALL_PREFIX)")
# Further options:
# CMAKE_POSITION_INDEPENDENT_CODE=YES for -fPIC constant (is also passed in from OpenCMISS-main build script)

find_package(LibXml2 REQUIRED)
if(USE_HDF5)
# See the FindHDF5 description
if (BUILD_SHARED_LIBS)
set(HDF5_USE_STATIC_LIBRARIES NO)
else()
set(HDF5_USE_STATIC_LIBRARIES YES)
endif()
find_package(HDF5 REQUIRED CXX)
if(HDF5_WITH_MPI)
find_package(MPI REQUIRED)
endif()
endif()

if (NOT CMAKE_DEBUG_POSTFIX)
SET(CMAKE_DEBUG_POSTFIX d)
endif()

# Add actual fieldml code and io
add_subdirectory(core)
add_subdirectory(io)

if (FORTRAN_BINDINGS)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FortranBindings.cmake)
endif()

# Create interface library for easy inclusion
add_library(fieldml-api INTERFACE)
target_link_libraries(fieldml-api INTERFACE fieldml-core fieldml-io)
if (HAVE_Fortran_BINDINGS)
target_link_libraries(fieldml-api INTERFACE fieldml-fortran)
endif()
install(TARGETS fieldml-api
EXPORT fieldml-api-config
INCLUDES DESTINATION include)

# Tests
if (BUILD_TESTS)
add_subdirectory(test)
endif()

if(JAVA_BINDINGS)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/JavaBindings.cmake)
endif()

include(CMakePackageConfigHelpers)
install(EXPORT fieldml-api-config
DESTINATION ${PACKAGE_CONFIG_DIR})
WRITE_BASIC_PACKAGE_VERSION_FILE(${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-version.cmake
COMPATIBILITY AnyNewerVersion)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-dependencies.cmake
"include(CMakeFindDependencyMacro)\r\n"
"set(${PROJECT_NAME}_IMPORT_PREFIX \${_IMPORT_PREFIX})\r\n"
)
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-dependencies.cmake "find_dependency(LibXml2 ${LIBXML2_VERSION})\r\n")
if (USE_HDF5)
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-dependencies.cmake "find_dependency(HDF5 ${HDF5_VERSION})\r\n")
endif()
if (JAVA_BINDINGS)
# TODO
#file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-dependencies.cmake "find_dependency(OpenMP)\r\n")
endif()
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-dependencies.cmake "set(_IMPORT_PREFIX \${${PROJECT_NAME}_IMPORT_PREFIX})")
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-version.cmake
${CMAKE_CURRENT_BINARY_DIR}/fieldml-api-config-dependencies.cmake
DESTINATION ${PACKAGE_CONFIG_DIR})
Loading