diff --git a/CMakeLists.txt b/CMakeLists.txt index 8444f239a..184c7c36f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,8 +36,6 @@ IF (NOT SKBUILD) MESSAGE(STATUS "Looking in ${SKBLD_DIR}/resources/cmake for CMake modules") ENDIF() -SET(PYTHON_EXTENSION_MODULE_SUFFIX ".${Python3_SOABI}" CACHE STRING "Suffix for python extension modules") - # Detect when building against a conda environment set the _using_conda variable # for use both in this file and in the parent GET_FILENAME_COMPONENT(_python_bin_dir ${Python3_EXECUTABLE} DIRECTORY) @@ -68,7 +66,8 @@ SET(CMAKE_Fortran_MODULE_DIRECTORY ${MOD}) # The source for the SWIFTEST binary and have it placed in the bin folder ADD_SUBDIRECTORY(${SRC} ${BIN}) -ADD_SUBDIRECTORY(${SRC}/bindings) + +ADD_SUBDIRECTORY(${PY}) # # Set up test directory # ENABLE_TESTING() # ADD_SUBDIRECTORY(${TEST}) diff --git a/cmake/Modules/FindNETCDF.cmake b/cmake/Modules/FindNETCDF.cmake index 003d5b195..0a641f714 100644 --- a/cmake/Modules/FindNETCDF.cmake +++ b/cmake/Modules/FindNETCDF.cmake @@ -14,8 +14,7 @@ find_library(NETCDF_FORTRAN_LIBRARY NAMES netcdff HINTS ENV NETCDF_FORTRAN_HOME find_library(NETCDF_LIBRARY NAMES netcdf HINTS ENV NETCDF_FORTRAN_HOME ENV LD_LIBRARY_PATH) set(NETCDF_FOUND TRUE) -set(NETCDF_INCLUDE_DIRS ${NETCDF_INCLUDE_DIR}) # Note for posterity: When building static libraries, NETCDF_FORTRAN_LIBRARY must come *before* NETCDF_LIBRARY. Otherwise you get a bunch of "undefined reference to" errors -set(NETCDF_LIBRARIES ${NETCDF_FORTRAN_LIBRARY} ${NETCDF_LIBRARY}) +set(NETCDF_LIBRARIES ${NETCDF_FORTRAN_LIBRARY} ${NETCDF_LIBRARY} CACHE STRING "NetCDF libraries") mark_as_advanced(NETCDF_LIBRARY NETCDF_FORTRAN_LIBRARY NETCDF_INCLUDE_DIR) \ No newline at end of file diff --git a/setup.py b/setup.py index a2175d937..132f2b202 100644 --- a/setup.py +++ b/setup.py @@ -11,6 +11,8 @@ """ from skbuild import setup +from Cython.Build import cythonize +import os with open('version.txt') as version_file: version = version_file.read().strip() @@ -43,4 +45,5 @@ 'astroquery>=0.4.6', 'tqdm>=4.65.0', ], - packages=['swiftest']) + packages=['swiftest'], + ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ec59d460d..1f769d3fc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -136,6 +136,24 @@ ENDIF () # Turn preprocessor on for all files SET_SOURCE_FILES_PROPERTIES(${SWIFTEST_src} ${DRIVER_src} PROPERTIES Fortran_PREPROCESS ON) + +#Set strict vs fast math flags +STRING(TOUPPER "${CMAKE_BUILD_TYPE}" BT) +IF(BT STREQUAL "RELEASE" OR BT STREQUAL "PROFILE") + SET_PROPERTY(SOURCE ${STRICT_MATH_FILES} APPEND_STRING PROPERTY COMPILE_FLAGS "${STRICTMATH_FLAGS}") + SET_PROPERTY(SOURCE ${FAST_MATH_FILES} APPEND_STRING PROPERTY COMPILE_FLAGS "${FASTMATH_FLAGS}") +ENDIF() + +IF(BT STREQUAL "DEBUG") + ADD_DEFINITIONS(-DDEBUG) +ELSEIF(BT STREQUAL "PROFILE") + ADD_DEFINITIONS(-DPROFILE) +ENDIF() + +##################################################### +# Add the needed libraries and special compiler flags +##################################################### + # Create a library from the source files, except the driver SET(SWIFTEST_LIBRARY swiftest) ADD_LIBRARY(${SWIFTEST_LIBRARY} ${SWIFTEST_src}) @@ -144,10 +162,6 @@ ADD_LIBRARY(${SWIFTEST_LIBRARY} ${SWIFTEST_src}) SET(SWIFTEST_DRIVER swiftest_driver) ADD_EXECUTABLE(${SWIFTEST_DRIVER} ${DRIVER_src}) -##################################################### -# Add the needed libraries and special compiler flags -##################################################### - TARGET_LINK_LIBRARIES(${SWIFTEST_DRIVER} PUBLIC ${SWIFTEST_LIBRARY} ${NETCDF_FORTRAN_LIBRARIES} ${NETCDF_LIBRARIES} $ENV{LIBS}) IF(USE_OPENMP) @@ -162,24 +176,6 @@ IF(USE_COARRAY) SET_PROPERTY(TARGET ${SWIFTEST_LIBRARY} ${SWIFTEST_DRIVER} APPEND_STRING PROPERTY LINK_FLAGS "${Coarray_Fortran_FLAGS} ") ENDIF(USE_COARRAY) -STRING(REPLACE ";" " " SWIFTEST_LINK_FLAGS "${CMAKE_Fortran_LINK_FLAGS} -L${LIB} ${CMAKE_LINK_LIBRARY_FLAG}${SWIFTEST_LIBRARY} ${NETCDF_FORTRAN_LIBRARIES} ${NETCDF_LIBRARIES} $ENV{LIBS}") -SET(SWIFTEST_LINK_FLAGS "${SWIFTEST_LINK_FLAGS}" CACHE STRING "Link flags to pass to setup.py") - -GET_TARGET_PROPERTY(SWIFTEST_INCLUDE_DIR ${SWIFTEST_DRIVER} INCLUDE_DIRECTORIES) -SET(SWIFTEST_INCLUDE_DIR "${SWIFTEST_INCLUDE_DIR}" CACHE STRING "Include directory needed for linking the library to an executable") - -#Set strict vs fast math flags -STRING(TOUPPER "${CMAKE_BUILD_TYPE}" BT) -IF(BT STREQUAL "RELEASE" OR BT STREQUAL "PROFILE") - SET_PROPERTY(SOURCE ${STRICT_MATH_FILES} APPEND_STRING PROPERTY COMPILE_FLAGS "${STRICTMATH_FLAGS}") - SET_PROPERTY(SOURCE ${FAST_MATH_FILES} APPEND_STRING PROPERTY COMPILE_FLAGS "${FASTMATH_FLAGS}") -ENDIF() - -IF(BT STREQUAL "DEBUG") - ADD_DEFINITIONS(-DDEBUG) -ELSEIF(BT STREQUAL "PROFILE") - ADD_DEFINITIONS(-DPROFILE) -ENDIF() # Check to see if the compiler allows for local-spec in do concurrent statements. Set a preprocessor variable if it does IF (USE_OPENMP) diff --git a/src/bindings/__init__.py b/src/bindings/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/bindings/bindings.h b/src/bindings/bindings.h deleted file mode 100644 index 0a69771e3..000000000 --- a/src/bindings/bindings.h +++ /dev/null @@ -1 +0,0 @@ -extern void bindings_c_driver(char* integrator, char* param_file_name, char* display_style); \ No newline at end of file diff --git a/src/bindings/bindings.pyx b/src/bindings/bindings.pyx deleted file mode 100644 index b2ba72fc3..000000000 --- a/src/bindings/bindings.pyx +++ /dev/null @@ -1,17 +0,0 @@ -# cython: language_level=3, c_string_type=unicode, c_string_encoding=ascii - -cdef extern from "bindings.h": - void bindings_c_driver(char* integrator, char* param_file_name, char* display_style) - -def driver(integrator, param_file_name, display_style): - b_integrator = bytes(integrator,'ascii') + b'\x00' - b_param_file_name = bytes(param_file_name,'ascii') + b'\x00' - b_display_style = bytes(display_style,'ascii') + b'\x00' - - cdef: - char* c_integrator = b_integrator - char* c_param_file_name = b_param_file_name - char* c_display_style = b_display_style - - bindings_c_driver(c_integrator, c_param_file_name, c_display_style) - return \ No newline at end of file diff --git a/src/bindings/CMakeLists.txt b/swiftest/CMakeLists.txt similarity index 55% rename from src/bindings/CMakeLists.txt rename to swiftest/CMakeLists.txt index f72f75ba4..6a1843b7a 100644 --- a/src/bindings/CMakeLists.txt +++ b/swiftest/CMakeLists.txt @@ -18,22 +18,12 @@ IF(${PYTHON_VERSION_MAJOR} EQUAL 3 ADD_COMPILE_OPTIONS("-Wno-deprecated-declarations") ENDIF() -SET(SWIFTEST_BINDINGS swiftest_bindings) +SET(SWIFTEST_BINDINGS _bindings) -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) -ADD_CYTHON_TARGET(${SWIFTEST_BINDINGS} bindings.pyx) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${MOD}) +ADD_CYTHON_TARGET(${SWIFTEST_BINDINGS}) ADD_LIBRARY(${SWIFTEST_BINDINGS} MODULE ${SWIFTEST_BINDINGS}) -TARGET_LINK_LIBRARIES(${SWIFTEST_BINDINGS} ${SWIFTEST_LIBRARY} ${SWIFTEST_LIBRARY} ${NETCDF_FORTRAN_LIBRARIES} ${NETCDF_LIBRARIES} $ENV{LIBS}) +#MESSAGE(STATUS "Module linked libraries\nswiftest: ${SWIFTEST_LIBRARY}\nnetcdf: ${NETCDF_LIBRARIES}\nLIBS: $ENV{LIBS}") +TARGET_LINK_LIBRARIES(${SWIFTEST_BINDINGS} swiftest ${NETCDF_LIBRARIES} $ENV{LIBS}) PYTHON_EXTENSION_MODULE(${SWIFTEST_BINDINGS}) -INSTALL(TARGETS ${SWIFTEST_BINDINGS} DESTINATION swiftest) - -IF(APPLE) - SET_TARGET_PROPERTIES(${SWIFTEST_BINDINGS} PROPERTIES INSTALL_RPATH "@loader_path") -ELSE() - SET_TARGET_PROPERTIES(${SWIFTEST_BINDINGS} PROPERTIES INSTALL_RPATH "\$ORIGIN") -ENDIF() - -IF(_using_conda OR DEFINED ENV{CIBUILDWHEEL}) - MESSAGE(STATUS "Conda detected. Setting INSTALL_RPATH_USE_LINK_PATH to True") - SET_TARGET_PROPERTIES(${SWIFTEST_BINDINGS} PROPERTIES INSTALL_RPATH_USE_LINK_PATH True) -ENDIF() \ No newline at end of file +INSTALL(TARGETS ${SWIFTEST_BINDINGS} LIBRARY DESTINATION swiftest) \ No newline at end of file diff --git a/swiftest/__init__.py b/swiftest/__init__.py index 8d382b20a..86f1b79c0 100644 --- a/swiftest/__init__.py +++ b/swiftest/__init__.py @@ -9,6 +9,6 @@ If not, see: https://www.gnu.org/licenses. """ -from swiftest.constants import * -from swiftest.simulation_class import Simulation -from swiftest.swiftest_bindings import driver \ No newline at end of file +from .constants import * +from .simulation_class import Simulation +from ._bindings import driver \ No newline at end of file