Fix python extension linking (#168)

* Silence annoying FindFFTW warnings

* Fix linker errors at import-time

Python extensions are weakly linked, so linker errors can only be
caught at runtime. This commit fixes any such broken extensions,
and adds automated import testing to ctests to prevent future
regressions.

It also adds a helper function `isce2_add_staticlib` which creates a
position-independent static library suitable for usage in multiple
python extensions. This matches the SCons build scripts more closely
and allows for future extensions to be declared in a more terse and
hygienic fashion.

* Update utilLib scripts

* Update combinedLib scripts

* Update offoutliers lib scripts

* Add asa_im_decode cdll

* Update alos lib scripts

* Show ctest output upon failure

* Update DataAccessor scripts

* Remove TARGET_FILE_BASE_NAME

* Remove incomplete stdproc modules (require stanford code)

Co-authored-by: Ryan Burns <rtburns-jpl@users.noreply.github.com>
LT1AB
Ryan Burns 2020-09-14 10:57:10 -07:00 committed by GitHub
parent f14981341d
commit 337dc9c158
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
61 changed files with 291 additions and 290 deletions

View File

@ -47,7 +47,7 @@ jobs:
set -ex set -ex
cd /root/project/src/build cd /root/project/src/build
. /opt/conda/bin/activate root . /opt/conda/bin/activate root
ctest ctest --output-on-failure
ISCE2DIR=$(python3 -c "import os, isce2; print(os.path.dirname(isce2.__file__))" | tail -n 1) ISCE2DIR=$(python3 -c "import os, isce2; print(os.path.dirname(isce2.__file__))" | tail -n 1)
export PATH=$ISCE2DIR/applications:$PATH export PATH=$ISCE2DIR/applications:$PATH
topsApp.py --help --steps topsApp.py --help --steps

View File

@ -131,8 +131,6 @@ foreach(dtype Float Double LongDouble)
# Tell find_package whether this component was found # Tell find_package whether this component was found
set(FFTW_${component}_FIND_QUIETLY TRUE) set(FFTW_${component}_FIND_QUIETLY TRUE)
find_package_handle_standard_args(FFTW_${component}
HANDLE_COMPONENTS REQUIRED_VARS ${libvar} FFTW_INCLUDE_DIRS)
# Also set the value of the legacy library-variable # Also set the value of the legacy library-variable
# (Will be set to *-NOTFOUND if not found) # (Will be set to *-NOTFOUND if not found)
set(${libvar} ${FFTW_${component}}) set(${libvar} ${FFTW_${component}})

View File

@ -10,6 +10,40 @@ macro(isce2_get_dir_prefix)
string(REPLACE "/" "." dir_prefix ${dir_prefix}) string(REPLACE "/" "." dir_prefix ${dir_prefix})
endmacro() endmacro()
# Usage: isce2_add_staticlib(name [sources ...])
# Creates a SCons-like isce2 intermediate library.
# The actual target will also be available via the namespaced isce2:: alias.
macro(isce2_add_staticlib name)
add_library(${name} STATIC ${ARGN})
set_target_properties(${name} PROPERTIES
OUTPUT_NAME ${name}
POSITION_INDEPENDENT_CODE ON
)
# add alias matching exported target
add_library(isce2::${name} ALIAS ${name})
endmacro()
# Usage: isce2_add_cdll(libname [sources ...])
# These libraries are loaded using a hardcoded filename, so this
# macro simplifies adding target properties to make that possible.
macro(isce2_add_cdll target)
add_library(${target} SHARED ${ARGN})
set_target_properties(${target} PROPERTIES
PREFIX ""
OUTPUT_NAME ${target}
SUFFIX .so)
# If we're the root cmake project (e.g. not add_subdirectory):
if("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
# override this to also test the resulting extension
add_test(NAME load_cdll_${target}
COMMAND ${Python_EXECUTABLE} -c
"from ctypes import cdll; \
cdll.LoadLibrary('$<TARGET_FILE:${target}>')"
)
endif()
endmacro()
# Usage: # Usage:
# add_exe_test(main.cpp helpers.F [additional_source.c ...] ) # add_exe_test(main.cpp helpers.F [additional_source.c ...] )
# or # or

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12 FATAL_ERROR) cmake_minimum_required(VERSION 3.13...3.18)
project(isce2 LANGUAGES C CXX Fortran) project(isce2 LANGUAGES C CXX Fortran)
@ -26,6 +26,18 @@ include(TargetMotif)
include(TargetX11) include(TargetX11)
include(UseCython) include(UseCython)
# If we're the root cmake project (e.g. not add_subdirectory):
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_LIST_DIR}")
# override this to also test the resulting extension
function(Python_add_library target)
_Python_add_library(${target} ${ARGN})
add_test(NAME import_${target}
COMMAND ${Python_EXECUTABLE} -c
"import ${target}"
)
endfunction()
endif()
if(NOT DEFINED PYTHON_MODULE_DIR) if(NOT DEFINED PYTHON_MODULE_DIR)
set(PYTHON_MODULE_DIR packages CACHE PATH set(PYTHON_MODULE_DIR packages CACHE PATH
"Python module directory (relative to install prefix)") "Python module directory (relative to install prefix)")

View File

@ -296,7 +296,7 @@ and then try "scons install" again.
### CMake (experimental) ### CMake (experimental)
Make sure you have the following prerequisites: Make sure you have the following prerequisites:
* CMake ≥ 3.12 * CMake ≥ 3.13
* GCC ≥ 4.8 (with C++11 support) * GCC ≥ 4.8 (with C++11 support)
* Python ≥ 3.5 * Python ≥ 3.5
* Cython * Cython

View File

@ -1,15 +1,14 @@
add_library(LineAccessor_static STATIC isce2_add_staticlib(LineAccessorLib
src/ImageAccessor.cpp src/ImageAccessor.cpp
src/LineAccessor.cpp src/LineAccessor.cpp
src/LineAccessorF.cpp src/LineAccessorF.cpp
) )
target_include_directories(LineAccessor_static PUBLIC include) target_include_directories(LineAccessorLib PUBLIC include)
set_property(TARGET LineAccessor_static PROPERTY POSITION_INDEPENDENT_CODE ON)
Python_add_library(LineAccessor MODULE Python_add_library(LineAccessor MODULE
bindings/LineAccessormodule.cpp bindings/LineAccessormodule.cpp
) )
target_link_libraries(LineAccessor PUBLIC LineAccessor_static) target_link_libraries(LineAccessor PRIVATE isce2::LineAccessorLib)
InstallSameDir( InstallSameDir(
LineAccessor LineAccessor

View File

@ -1,4 +1,4 @@
Python_add_library(orbitHermite MODULE isce2_add_cdll(orbitHermite
src/orbitHermiteC.c src/orbitHermiteC.c
src/orbithermite.F src/orbithermite.F
) )

View File

@ -2,11 +2,7 @@ add_subdirectory(db)
add_subdirectory(TOPS) add_subdirectory(TOPS)
add_subdirectory(MultiMode) add_subdirectory(MultiMode)
add_library(asa_im_decode src/asa_im_decode/asa_im_decode.c) isce2_add_cdll(asa_im_decode src/asa_im_decode/asa_im_decode.c)
set_target_properties(asa_im_decode PROPERTIES
PREFIX ""
OUTPUT_NAME envisat
SUFFIX .so)
set(installfiles set(installfiles
asa_im_decode asa_im_decode
@ -94,6 +90,6 @@ target_include_directories(alos PUBLIC
include include
src/ALOS_pre_process src/ALOS_pre_process
) )
target_link_libraries(alos PUBLIC DataAccessor_static) target_link_libraries(alos PUBLIC isce2::DataAccessorLib)
InstallSameDir(${installfiles}) InstallSameDir(${installfiles})

View File

@ -1,83 +1,14 @@
add_subdirectory(ImageUtil) add_subdirectory(ImageUtil)
add_subdirectory(geo) add_subdirectory(geo)
add_subdirectory(offoutliers)
Python_add_library(offoutliers MODULE Python_add_library(offoutliers MODULE
offoutliers/bindings/offoutliersmodule.cpp offoutliers/bindings/offoutliersmodule.cpp
offoutliers/src/offoutliers.F
offoutliers/src/offoutliersAllocateDeallocate.F
offoutliers/src/offoutliersGetState.F
offoutliers/src/offoutliersSetState.F
offoutliers/src/offoutliersState.F
)
target_include_directories(offoutliers PUBLIC offoutliers/include)
target_link_libraries(offoutliers PUBLIC
stdoel_static
) )
target_link_libraries(offoutliers PRIVATE isce2::offoutliersLib)
add_definitions(-DHAVE_CONFIG_H -DHAVE_FFTW=1) add_definitions(-DHAVE_CONFIG_H -DHAVE_FFTW=1)
add_subdirectory(src)
add_library(utilLib SHARED
src/akima_reg.F
src/args_roi.F
src/besseldiffs.F
src/bilinear.F
src/cfft1d_jpl.F
src/cfft2d.F
src/cffts.F
src/config.h
src/convert_schdot_to_xyzdot.F
src/convert_sch_to_xyz.F
src/cross.F
src/curvature.F
src/derampc.F
src/dop.F
src/dot.F
src/enubasis.F
src/fc.F
src/fc.f.org
src/fftw3stub.c
src/fftw3stub.cc
src/fortranUtils.f90
src/fourn.F
src/fournnr.F
src/getangs.F
src/gettcn_tcvec.F
src/hunt.F
src/inter_motion.F
src/interp.F
src/intp_coef.f90
src/intpcoefnorm.F
src/io.c
src/latlon.F
src/latlon_nostruct.F
#src/lfit.F
src/linalg.f90
src/lincomb.F
src/lookvec.F
src/lsq.f90
src/matmat.F
src/matvec.F
src/norm.F
src/orrmread1.F
src/polint.F
src/PowerOfTwo.cc
src/quadfit.f90
src/radar_to_xyz.F
src/rdf_common.inc
src/roi_exit.cc
src/schbasis.F
src/second.c
src/sfftw_import.c
src/spline.f
#src/svd.F
#src/svdvecfit9.F
#src/svdvecfit.F
src/tranmat.F
src/uniform_interp.f90
src/unitvec.F
src/utmtoll.F
src/zbrent.F
)
target_include_directories(utilLib PUBLIC target_include_directories(utilLib PUBLIC
include include
) )
@ -85,7 +16,7 @@ target_link_libraries(utilLib PRIVATE
FFTW::Float FFTW::Float
) )
add_library(combinedLib SHARED isce2_add_staticlib(combinedLib
Library/geometry/src/geometryModule.F Library/geometry/src/geometryModule.F
Library/linalg3/src/linalg3Module.F Library/linalg3/src/linalg3Module.F
Library/linalg3/src/linalg3.c Library/linalg3/src/linalg3.c
@ -112,7 +43,7 @@ target_include_directories(combinedlibmodule PUBLIC
Library/include Library/include
) )
target_link_libraries(combinedlibmodule PUBLIC target_link_libraries(combinedlibmodule PUBLIC
combinedLib isce2::combinedLib
) )
# Set up fortran module paths # Set up fortran module paths
@ -127,12 +58,6 @@ target_include_directories(combinedLib INTERFACE
$<$<COMPILE_LANGUAGE:Fortran>:${mdir}> $<$<COMPILE_LANGUAGE:Fortran>:${mdir}>
) )
install(TARGETS
utilLib
combinedLib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
InstallSameDir( InstallSameDir(
combinedlibmodule combinedlibmodule
offoutliers offoutliers

View File

@ -0,0 +1,3 @@
add_subdirectory(src)
target_include_directories(offoutliersLib PUBLIC include)
target_link_libraries(offoutliersLib PRIVATE isce2::stdoelLib)

View File

@ -0,0 +1,7 @@
isce2_add_staticlib(offoutliersLib STATIC
offoutliers.F
offoutliersAllocateDeallocate.F
offoutliersGetState.F
offoutliersSetState.F
offoutliersState.F
)

View File

@ -0,0 +1,62 @@
isce2_add_staticlib(utilLib
akima_reg.F
args_roi.F
besseldiffs.F
bilinear.F
cfft1d_jpl.F
cfft2d.F
cffts.F
config.h
convert_schdot_to_xyzdot.F
convert_sch_to_xyz.F
cross.F
curvature.F
derampc.F
dop.F
dot.F
enubasis.F
fc.F
fc.f.org
fftw3stub.c
fftw3stub.cc
fortranUtils.f90
fourn.F
fournnr.F
getangs.F
gettcn_tcvec.F
hunt.F
inter_motion.F
interp.F
intp_coef.f90
intpcoefnorm.F
io.c
latlon.F
latlon_nostruct.F
lfit.F
linalg.f90
lincomb.F
lookvec.F
lsq.f90
matmat.F
matvec.F
norm.F
orrmread1.F
polint.F
PowerOfTwo.cc
quadfit.f90
radar_to_xyz.F
rdf_common.inc
roi_exit.cc
schbasis.F
second.c
sfftw_import.c
spline.f
svd.F
svdvecfit9.F
svdvecfit.F
tranmat.F
uniform_interp.f90
unitvec.F
utmtoll.F
zbrent.F
)

View File

@ -1,8 +1,4 @@
# TODO (subdir-staticlib) isce2_add_staticlib(DataAccessorLib
# This library is in a subdirectory but used by other libraries,
# so it's compiled as a static library so we don't need to worry
# about RPATH. Is there a better way to this?
add_library(DataAccessor_static STATIC
DataAccessor/src/DataAccessorCaster.cpp DataAccessor/src/DataAccessorCaster.cpp
DataAccessor/src/DataAccessor.cpp DataAccessor/src/DataAccessor.cpp
DataAccessor/src/DataAccessorF.cpp DataAccessor/src/DataAccessorF.cpp
@ -18,33 +14,31 @@ add_library(DataAccessor_static STATIC
InterleavedAccessor/src/Poly1dInterpolator.cpp InterleavedAccessor/src/Poly1dInterpolator.cpp
InterleavedAccessor/src/Poly2dInterpolator.cpp InterleavedAccessor/src/Poly2dInterpolator.cpp
) )
target_include_directories(DataAccessorLib PUBLIC
set_property(TARGET DataAccessor_static PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(DataAccessor_static PUBLIC
DataAccessor/include DataAccessor/include
DataCaster/include DataCaster/include
Factories/include Factories/include
InterleavedAccessor/include InterleavedAccessor/include
) )
target_link_libraries(DataAccessor_static PUBLIC target_link_libraries(DataAccessorLib PUBLIC
combinedLib isce2::combinedLib
) )
if(TARGET GDAL::GDAL) if(TARGET GDAL::GDAL)
target_sources(DataAccessor_static PRIVATE target_sources(DataAccessorLib PRIVATE
InterleavedAccessor/src/GDALAccessor.cpp InterleavedAccessor/src/GDALAccessor.cpp
) )
target_link_libraries(DataAccessor_static PUBLIC target_link_libraries(DataAccessorLib PUBLIC
GDAL::GDAL GDAL::GDAL
) )
else() else()
target_compile_definitions(DataAccessor_static PRIVATE -DHAVE_GDAL=0) target_compile_definitions(DataAccessorLib PRIVATE -DHAVE_GDAL=0)
endif() endif()
Python_add_library(DataAccessor MODULE Python_add_library(DataAccessor MODULE
DataAccessor/bindings/DataAccessormodule.cpp DataAccessor/bindings/DataAccessormodule.cpp
) )
target_link_libraries(DataAccessor PRIVATE DataAccessor_static) target_link_libraries(DataAccessor PRIVATE isce2::DataAccessorLib)
InstallSameDir( InstallSameDir(
Factories/CasterFactory.py Factories/CasterFactory.py

View File

@ -2,3 +2,17 @@ InstallSameDir(
__init__.py __init__.py
StdOEPy.py StdOEPy.py
) )
isce2_add_staticlib(stdoeLib
src/StdOE.cpp
src/StdOEDefaults.cpp
src/StdOEF.cpp
)
target_include_directories(stdoeLib PUBLIC
include
)
Python_add_library(StdOE MODULE
bindings/StdOEmodule.cpp
)
target_link_libraries(StdOE PRIVATE isce2::stdoeLib)

View File

@ -1,17 +1,10 @@
add_library(stdoel_static STATIC add_subdirectory(src)
src/ScreenWriter.cpp target_include_directories(stdoelLib PUBLIC include)
src/StdOELF.cpp
src/FileWriter.cpp
src/StdOEL.cpp
src/WriterFactory.cpp
)
set_property(TARGET stdoel_static PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(stdoel_static PUBLIC include)
Python_add_library(StdOEL MODULE Python_add_library(StdOEL MODULE
bindings/StdOELmodule.cpp bindings/StdOELmodule.cpp
) )
target_link_libraries(StdOEL PUBLIC stdoel_static) target_link_libraries(StdOEL PUBLIC isce2::stdoelLib)
InstallSameDir( InstallSameDir(
StdOEL StdOEL
@ -19,12 +12,7 @@ InstallSameDir(
StdOELPy.py StdOELPy.py
) )
add_executable(testStdOEL test/testStdOEL.cpp add_executable(testStdOEL test/testStdOEL.cpp)
src/ScreenWriter.cpp
src/StdOELF.cpp
src/FileWriter.cpp
src/StdOEL.cpp
src/WriterFactory.cpp
)
target_include_directories(testStdOEL PUBLIC include) target_include_directories(testStdOEL PUBLIC include)
target_link_libraries(testStdOEL PRIVATE isce2::stdoelLib)
add_exe_test(testStdOEL) add_exe_test(testStdOEL)

View File

@ -0,0 +1,7 @@
isce2_add_staticlib(stdoelLib
ScreenWriter.cpp
StdOELF.cpp
FileWriter.cpp
StdOEL.cpp
WriterFactory.cpp
)

View File

@ -7,7 +7,7 @@ Python_add_library(aikima MODULE
) )
target_include_directories(aikima PUBLIC include) target_include_directories(aikima PUBLIC include)
target_link_libraries(aikima PUBLIC target_link_libraries(aikima PUBLIC
DataAccessor_static isce2::DataAccessorLib
) )
InstallSameDir( InstallSameDir(

View File

@ -9,8 +9,8 @@ Python_add_library(ampcor MODULE
) )
target_include_directories(ampcor PUBLIC include) target_include_directories(ampcor PUBLIC include)
target_link_libraries(ampcor PUBLIC target_link_libraries(ampcor PUBLIC
utilLib isce2::utilLib
DataAccessor_static isce2::DataAccessorLib
) )
InstallSameDir( InstallSameDir(

View File

@ -5,7 +5,7 @@ Python_add_library(correlationlib MODULE
) )
target_include_directories(correlationlib PUBLIC include) target_include_directories(correlationlib PUBLIC include)
target_link_libraries(correlationlib PRIVATE target_link_libraries(correlationlib PRIVATE
DataAccessor_static isce2::DataAccessorLib
) )
InstallSameDir( InstallSameDir(

View File

@ -7,7 +7,7 @@ Python_add_library(dopiq MODULE
src/dopiqState.f src/dopiqState.f
) )
target_include_directories(dopiq PUBLIC include) target_include_directories(dopiq PUBLIC include)
target_link_libraries(dopiq PUBLIC DataAccessor_static) target_link_libraries(dopiq PUBLIC isce2::DataAccessorLib)
InstallSameDir( InstallSameDir(
dopiq dopiq

View File

@ -7,7 +7,7 @@ Python_add_library(doppler MODULE
src/dopplerState.f src/dopplerState.f
) )
target_include_directories(doppler PUBLIC include) target_include_directories(doppler PUBLIC include)
target_link_libraries(doppler PUBLIC DataAccessor_static) target_link_libraries(doppler PUBLIC isce2::DataAccessorLib)
InstallSameDir( InstallSameDir(
doppler doppler

View File

@ -1,4 +1,4 @@
Python_add_library(libfilter MODULE isce2_add_cdll(libfilter
src/rescale_magnitude.c src/rescale_magnitude.c
src/psfilt.c src/psfilt.c
src/timing.c src/timing.c

View File

@ -8,8 +8,8 @@ Python_add_library(fitoff MODULE
) )
target_include_directories(fitoff PUBLIC include) target_include_directories(fitoff PUBLIC include)
target_link_libraries(fitoff PUBLIC target_link_libraries(fitoff PUBLIC
combinedLib isce2::combinedLib
utilLib isce2::utilLib
) )
InstallSameDir( InstallSameDir(

View File

@ -13,11 +13,11 @@ target_include_directories(formslc PUBLIC
formslc/include formslc/include
) )
target_link_libraries(formslc PRIVATE target_link_libraries(formslc PRIVATE
DataAccessor_static isce2::DataAccessorLib
) )
target_link_libraries(formslc PUBLIC target_link_libraries(formslc PUBLIC
utilLib isce2::utilLib
) )
InstallSameDir( InstallSameDir(

View File

@ -1,4 +1,4 @@
Python_add_library(libgeolocate MODULE isce2_add_cdll(libgeolocate
src/geolocate_wrapper.c src/geolocate_wrapper.c
src/geolocate.f src/geolocate.f
) )

View File

@ -7,6 +7,11 @@ Python_add_library(get_peg_info MODULE
src/get_peg_infoState.F src/get_peg_infoState.F
) )
target_include_directories(get_peg_info PUBLIC include) target_include_directories(get_peg_info PUBLIC include)
target_link_libraries(get_peg_info PRIVATE
isce2::utilLib
isce2::stdoelLib
isce2::stdoeLib
)
InstallSameDir( InstallSameDir(
get_peg_info get_peg_info

View File

@ -1,4 +1,4 @@
Python_add_library(libgrass MODULE isce2_add_cdll(libgrass
src/corr_flag.c src/corr_flag.c
src/grass.c src/grass.c
src/trees.c src/trees.c

View File

@ -22,8 +22,8 @@ Python_add_library(icu MODULE
) )
target_include_directories(icu PUBLIC include) target_include_directories(icu PUBLIC include)
target_link_libraries(icu PUBLIC target_link_libraries(icu PUBLIC
DataAccessor_static isce2::DataAccessorLib
utilLib isce2::utilLib
) )
InstallSameDir( InstallSameDir(

View File

@ -3,7 +3,7 @@ Python_add_library(looks MODULE
) )
target_include_directories(looks PUBLIC include) target_include_directories(looks PUBLIC include)
target_link_libraries(looks PRIVATE target_link_libraries(looks PRIVATE
DataAccessor_static isce2::DataAccessorLib
) )
InstallSameDir( InstallSameDir(

View File

@ -3,8 +3,8 @@ Python_add_library(ALOS_fbd2fbs MODULE
) )
target_include_directories(ALOS_fbd2fbs PUBLIC include) target_include_directories(ALOS_fbd2fbs PUBLIC include)
target_link_libraries(ALOS_fbd2fbs PUBLIC target_link_libraries(ALOS_fbd2fbs PUBLIC
alos_lib isce2::alosLib
utilLib isce2::utilLib
) )
InstallSameDir( InstallSameDir(

View File

@ -3,8 +3,8 @@ Python_add_library(ALOS_fbs2fbd MODULE
) )
target_include_directories(ALOS_fbs2fbd PUBLIC include) target_include_directories(ALOS_fbs2fbd PUBLIC include)
target_link_libraries(ALOS_fbs2fbd PUBLIC target_link_libraries(ALOS_fbs2fbd PUBLIC
alos_lib isce2::alosLib
utilLib isce2::utilLib
) )
InstallSameDir( InstallSameDir(

View File

@ -1,9 +1,8 @@
add_library(alos_lib STATIC isce2_add_staticlib(alosLib
ALOS_lib/src/cfft1d.c ALOS_lib/src/cfft1d.c
ALOS_lib/src/find_fft_length.c ALOS_lib/src/find_fft_length.c
ALOS_lib/src/utils.c ALOS_lib/src/utils.c
ALOS_lib/src/ALOS_ldr_orbit.c ALOS_lib/src/ALOS_ldr_orbit.c
ALOS_lib/src/SConscript
ALOS_lib/src/calc_dop.c ALOS_lib/src/calc_dop.c
ALOS_lib/src/cfft1d_fftpack.c ALOS_lib/src/cfft1d_fftpack.c
ALOS_lib/src/fftpack.c ALOS_lib/src/fftpack.c
@ -14,8 +13,7 @@ add_library(alos_lib STATIC
ALOS_lib/src/read_ALOS_sarleader.c ALOS_lib/src/read_ALOS_sarleader.c
ALOS_lib/src/rng_compress.c ALOS_lib/src/rng_compress.c
) )
target_include_directories(alos_lib PUBLIC include) target_include_directories(alosLib PUBLIC include)
set_property(TARGET alos_lib PROPERTY POSITION_INDEPENDENT_CODE ON)
add_subdirectory(ALOS_fbd2fbs) add_subdirectory(ALOS_fbd2fbs)
add_subdirectory(ALOS_fbs2fbd) add_subdirectory(ALOS_fbs2fbd)

View File

@ -11,11 +11,11 @@ Python_add_library(geocode MODULE
) )
target_include_directories(geocode PUBLIC include) target_include_directories(geocode PUBLIC include)
target_link_libraries(geocode PUBLIC target_link_libraries(geocode PUBLIC
DataAccessor_static isce2::DataAccessorLib
OpenMP::OpenMP_CXX OpenMP::OpenMP_CXX
stdoel_static isce2::stdoelLib
combinedLib isce2::combinedLib
utilLib isce2::utilLib
) )
InstallSameDir( InstallSameDir(

View File

@ -1,27 +1,5 @@
# TODO (subdir-staticlib) add_subdirectory(formslcLib)
# This library is in a subdirectory but used by other libraries, add_subdirectory(resampLib)
# so it's compiled as a static library so we don't need to worry
# about RPATH. Is there a better way to this?
add_library(formslcLib SHARED
formslcLib/src/arraymodule.f90
formslcLib/src/get_frate.f90
formslcLib/src/io.c
)
set_property(TARGET formslcLib PROPERTY POSITION_INDEPENDENT_CODE ON)
target_link_libraries(formslcLib PUBLIC
utilLib
)
if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(formslcLib PUBLIC
OpenMP::OpenMP_Fortran
)
endif()
set(mdir ${CMAKE_CURRENT_BINARY_DIR}/formslc_fortran_modules)
set_property(TARGET formslcLib PROPERTY Fortran_MODULE_DIRECTORY ${mdir})
target_include_directories(formslcLib INTERFACE
$<$<COMPILE_LANGUAGE:Fortran>:${mdir}>
)
add_subdirectory(correct) add_subdirectory(correct)
add_subdirectory(crossmul) add_subdirectory(crossmul)

View File

@ -1,17 +1,4 @@
Python_add_library(correct MODULE
bindings/correctmodule.cpp
src/correctAllocateDeallocate.f
src/correctSetState.f
src/correctState.f
)
target_include_directories(correct PUBLIC include)
if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(correct PUBLIC
OpenMP::OpenMP_Fortran
)
endif()
InstallSameDir( InstallSameDir(
correct
__init__.py __init__.py
Correct.py Correct.py
) )

View File

@ -4,6 +4,10 @@ Python_add_library(crossmul MODULE
src/crossmul.f90 src/crossmul.f90
) )
target_include_directories(crossmul PUBLIC include) target_include_directories(crossmul PUBLIC include)
target_link_libraries(crossmul PRIVATE
isce2::utilLib
isce2::DataAccessorLib
)
if(TARGET OpenMP::OpenMP_Fortran) if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(crossmul PUBLIC target_link_libraries(crossmul PUBLIC
OpenMP::OpenMP_Fortran OpenMP::OpenMP_Fortran

View File

@ -1,14 +1,4 @@
Python_add_library(estamb MODULE
bindings/estambmodule.cpp
src/estambAllocateDeallocate.F
src/estambGetState.F
src/estambSetState.F
src/estambStateSoi.f90
)
target_include_directories(estamb PUBLIC include)
InstallSameDir( InstallSameDir(
estamb
__init__.py __init__.py
Estamb.py Estamb.py
) )

View File

@ -1,22 +1,4 @@
Python_add_library(stdproc_formslc MODULE
bindings/formslcmodule.cpp
src/formslcAllocateDeallocate.F
src/formslcGetState.F
src/formslcSetState.F
src/formslcStateSoi.f90
)
target_include_directories(stdproc_formslc PUBLIC include)
target_link_libraries(stdproc_formslc PUBLIC
combinedLib
formslcLib
utilLib
)
set_target_properties(stdproc_formslc
PROPERTIES OUTPUT_NAME formslc)
InstallSameDir( InstallSameDir(
stdproc_formslc
__init__.py __init__.py
Formslc.py Formslc.py
) )

View File

@ -0,0 +1,18 @@
isce2_add_staticlib(formslcLib
src/arraymodule.f90
src/get_frate.f90
src/io.c
)
target_link_libraries(formslcLib PUBLIC
isce2::utilLib
)
if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(formslcLib PUBLIC
OpenMP::OpenMP_Fortran
)
endif()
set(mdir ${CMAKE_CURRENT_BINARY_DIR}/formslc_fortran_modules)
set_property(TARGET formslcLib PROPERTY Fortran_MODULE_DIRECTORY ${mdir})
target_include_directories(formslcLib INTERFACE
$<$<COMPILE_LANGUAGE:Fortran>:${mdir}>
)

View File

@ -1,24 +1,4 @@
Python_add_library(mocompTSX MODULE
bindings/mocompTSXmodule.cpp
src/mocompTSXAllocateDeallocate.f
src/mocompTSXGetState.f
src/mocompTSXSetState.f
src/mocompTSXState.f
)
target_include_directories(mocompTSX PUBLIC include)
target_link_libraries(mocompTSX
PUBLIC
combinedLib
formslcLib
utilLib
)
if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(mocompTSX PUBLIC
OpenMP::OpenMP_Fortran
)
endif()
InstallSameDir( InstallSameDir(
mocompTSX
__init__.py __init__.py
MocompTSX.py MocompTSX.py
) )

View File

@ -1,15 +1,22 @@
Python_add_library(offsetpoly MODULE isce2_add_staticlib(offsetpolyLib
bindings/offsetpolymodule.cpp
src/offsetpolyState.F src/offsetpolyState.F
src/offsetpoly.f90 src/offsetpoly.f90
src/offsetpolySetState.F src/offsetpolySetState.F
src/offsetpolyAllocateDeallocate.F src/offsetpolyAllocateDeallocate.F
src/offsetpolyGetState.F src/offsetpolyGetState.F
) )
target_link_libraries(offsetpolyLib PRIVATE
isce2::utilLib
)
Python_add_library(offsetpoly MODULE
bindings/offsetpolymodule.cpp
)
target_include_directories(offsetpoly PUBLIC include) target_include_directories(offsetpoly PUBLIC include)
target_link_libraries(offsetpoly PUBLIC target_link_libraries(offsetpoly PRIVATE
combinedLib isce2::offsetpolyLib
utilLib isce2::resampLib
isce2::stdoelLib
) )
if(TARGET OpenMP::OpenMP_Fortran) if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(offsetpoly PUBLIC target_link_libraries(offsetpoly PUBLIC

View File

@ -8,7 +8,10 @@ Python_add_library(resamp MODULE
) )
target_include_directories(resamp PUBLIC include) target_include_directories(resamp PUBLIC include)
target_link_libraries(resamp PUBLIC target_link_libraries(resamp PUBLIC
utilLib isce2::resampLib
isce2::utilLib
isce2::stdoelLib
isce2::DataAccessorLib
) )
if(TARGET OpenMP::OpenMP_Fortran) if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(resamp PUBLIC target_link_libraries(resamp PUBLIC

View File

@ -0,0 +1 @@
add_subdirectory(src)

View File

@ -0,0 +1,8 @@
isce2_add_staticlib(resampLib
poly_funcs.f90
svd.f
svdvecfit.f
)
target_link_libraries(resampLib PRIVATE
isce2::utilLib
)

View File

@ -7,6 +7,10 @@ Python_add_library(resamp_amps MODULE
src/resamp_ampsState.F src/resamp_ampsState.F
) )
target_include_directories(resamp_amps PUBLIC include) target_include_directories(resamp_amps PUBLIC include)
target_link_libraries(resamp_amps PRIVATE
isce2::DataAccessorLib
isce2::resampLib
)
InstallSameDir( InstallSameDir(
resamp_amps resamp_amps

View File

@ -1,3 +1,5 @@
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
Python_add_library(resamp_image MODULE Python_add_library(resamp_image MODULE
bindings/resamp_imagemodule.cpp bindings/resamp_imagemodule.cpp
src/resamp_imageState.F src/resamp_imageState.F
@ -7,7 +9,10 @@ Python_add_library(resamp_image MODULE
) )
target_include_directories(resamp_image PUBLIC include) target_include_directories(resamp_image PUBLIC include)
target_link_libraries(resamp_image PUBLIC target_link_libraries(resamp_image PUBLIC
utilLib isce2::DataAccessorLib
isce2::resampLib
isce2::utilLib
isce2::stdoelLib
) )
InstallSameDir( InstallSameDir(

View File

@ -7,6 +7,11 @@ Python_add_library(resamp_only MODULE
src/resamp_onlyState.F src/resamp_onlyState.F
) )
target_include_directories(resamp_only PUBLIC include) target_include_directories(resamp_only PUBLIC include)
target_link_libraries(resamp_only PRIVATE
isce2::DataAccessorLib
isce2::resampLib
isce2::stdoelLib
)
InstallSameDir( InstallSameDir(
resamp_only resamp_only

View File

@ -7,8 +7,9 @@ Python_add_library(resamp_slc MODULE
) )
target_include_directories(resamp_slc PUBLIC include) target_include_directories(resamp_slc PUBLIC include)
target_link_libraries(resamp_slc PUBLIC target_link_libraries(resamp_slc PUBLIC
combinedLib isce2::combinedLib
utilLib isce2::utilLib
isce2::DataAccessorLib
) )
target_compile_options(resamp_slc PRIVATE target_compile_options(resamp_slc PRIVATE
-ffree-line-length-none -ffree-line-length-none

View File

@ -1,24 +1,4 @@
Python_add_library(topo MODULE
bindings/topomodule.cpp
src/topoAllocateDeallocate.f
src/topoGetState.f
src/topoMethods.f
src/topoSetState.f
src/topoState.f
)
target_include_directories(topo PUBLIC include)
target_link_libraries(topo PUBLIC
combinedLib
utilLib
)
if(TARGET OpenMP::OpenMP_Fortran)
target_link_libraries(topo PUBLIC
OpenMP::OpenMP_Fortran
)
endif()
InstallSameDir( InstallSameDir(
topo
__init__.py __init__.py
Topo.py Topo.py
) )

View File

@ -16,7 +16,7 @@ target_include_directories(GPUampcor PUBLIC
) )
target_link_libraries(GPUampcor PRIVATE target_link_libraries(GPUampcor PRIVATE
CUDA::cublas CUDA::cublas
DataAccessor_static isce2::DataAccessorLib
FFTW::Float FFTW::Float
) )
InstallSameDir( InstallSameDir(

View File

@ -12,7 +12,7 @@ target_include_directories(GPUgeo2rdr PUBLIC
include include
) )
target_link_libraries(GPUgeo2rdr PRIVATE target_link_libraries(GPUgeo2rdr PRIVATE
DataAccessor_static isce2::DataAccessorLib
) )
if(TARGET OpenMP::OpenMP_CXX) if(TARGET OpenMP::OpenMP_CXX)
target_link_libraries(GPUgeo2rdr PRIVATE OpenMP::OpenMP_CXX) target_link_libraries(GPUgeo2rdr PRIVATE OpenMP::OpenMP_CXX)

View File

@ -6,9 +6,9 @@ Python_add_library(geo2rdr MODULE
) )
target_include_directories(geo2rdr PUBLIC include) target_include_directories(geo2rdr PUBLIC include)
target_link_libraries(geo2rdr PUBLIC target_link_libraries(geo2rdr PUBLIC
DataAccessor_static isce2::DataAccessorLib
combinedLib isce2::combinedLib
utilLib isce2::utilLib
) )
if(TARGET OpenMP::OpenMP_Fortran) if(TARGET OpenMP::OpenMP_Fortran)

View File

@ -10,9 +10,9 @@ Python_add_library(geozero MODULE
) )
target_include_directories(geozero PUBLIC include) target_include_directories(geozero PUBLIC include)
target_link_libraries(geozero PUBLIC target_link_libraries(geozero PUBLIC
DataAccessor_static isce2::DataAccessorLib
combinedLib isce2::combinedLib
utilLib isce2::utilLib
OpenMP::OpenMP_Fortran OpenMP::OpenMP_Fortran
) )

View File

@ -8,9 +8,9 @@ Python_add_library(topozero MODULE
) )
target_include_directories(topozero PUBLIC include) target_include_directories(topozero PUBLIC include)
target_link_libraries(topozero PRIVATE target_link_libraries(topozero PRIVATE
combinedLib isce2::combinedLib
utilLib isce2::utilLib
DataAccessor_static isce2::DataAccessorLib
) )
set_source_files_properties(src/topozero.f90 PROPERTIES COMPILE_OPTIONS -cpp) set_source_files_properties(src/topozero.f90 PROPERTIES COMPILE_OPTIONS -cpp)
if(TARGET OpenMP::OpenMP_Fortran) if(TARGET OpenMP::OpenMP_Fortran)

View File

@ -10,7 +10,7 @@ Python_add_library(snaphu MODULE
) )
target_include_directories(snaphu PUBLIC include) target_include_directories(snaphu PUBLIC include)
target_link_libraries(snaphu PUBLIC target_link_libraries(snaphu PUBLIC
DataAccessor_static isce2::DataAccessorLib
) )
InstallSameDir( InstallSameDir(

View File

@ -1,4 +1,4 @@
Python_add_library(libalos2proc MODULE isce2_add_cdll(libalos2proc MODULE
src/rg_filter.c src/rg_filter.c
src/lib_file.c src/lib_file.c
src/lib_cpx.c src/lib_cpx.c

View File

@ -8,12 +8,12 @@ target_include_directories(correct_geoid_i2_srtm PUBLIC
correct_geoid_i2_srtm/include correct_geoid_i2_srtm/include
) )
target_link_libraries(correct_geoid_i2_srtm PUBLIC target_link_libraries(correct_geoid_i2_srtm PUBLIC
DataAccessor_static isce2::DataAccessorLib
stdoel_static isce2::stdoelLib
utilLib isce2::utilLib
) )
Python_add_library(demStitch MODULE isce2_add_cdll(demStitch
demstitcher/bindings/demStitch.c demstitcher/bindings/demStitch.c
) )
@ -27,7 +27,9 @@ target_include_directories(upsampledem PRIVATE
upsampledem/include upsampledem/include
) )
target_link_libraries(upsampledem PRIVATE target_link_libraries(upsampledem PRIVATE
utilLib isce2::DataAccessorLib
isce2::stdoelLib
isce2::utilLib
) )
Python_add_library(watermask MODULE Python_add_library(watermask MODULE

View File

@ -7,7 +7,7 @@ target_include_directories(geogrid PRIVATE
) )
target_link_libraries(geogrid PRIVATE target_link_libraries(geogrid PRIVATE
GDAL::GDAL GDAL::GDAL
combinedLib isce2::combinedLib
) )
InstallSameDir( InstallSameDir(

View File

@ -2,11 +2,15 @@ InstallSameDir(__init__.py)
if(CYTHON_EXECUTABLE AND TARGET GDAL::GDAL) if(CYTHON_EXECUTABLE AND TARGET GDAL::GDAL)
cython_add_module(splitSpectrum cython_add_module(splitSpectrum
pyx/splitRangeSpectrum.pyx pyx/splitSpectrum.pyx
src/splitRangeSpectrum.cc src/splitRangeSpectrum.cc
) )
target_include_directories(splitSpectrum PUBLIC include) target_include_directories(splitSpectrum PUBLIC include)
target_link_libraries(splitSpectrum PUBLIC GDAL::GDAL FFTW::Float OpenMP::OpenMP_CXX) target_link_libraries(splitSpectrum PUBLIC
GDAL::GDAL
FFTW::FloatThreads
OpenMP::OpenMP_CXX
)
InstallSameDir(splitSpectrum) InstallSameDir(splitSpectrum)
endif() endif()