-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathCMakeLists.txt
137 lines (114 loc) · 5.07 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# This is the CMake file for the src directory of the NCEPLIBS-g2 project.
#
# Mark Potts, Kyle Gerheiser, Ed Hartnett
# These are the fortran source files.
set(fortran_src addfield.F90 addgrid.F90 addlocal.F90 cmplxpack.F90
compack.F90 comunpack.F90 drstemplates.F90 g2_gbytesc.F90 g2grids.F90
gb_info.F90 getdim.F90 getfield.F90 getg2i.F90 getg2ir.F90 getgb2.F90
getgb2l.F90 getgb2p.F90 getgb2r.F90 getgb2rp.F90 getgb2s.F90
getidx.F90 getlocal.F90 getpoly.F90 gettemplates.F90 gf_free.F90
gf_getfld.F90 gf_unpack1.F90 gf_unpack2.F90 gf_unpack3.F90
gf_unpack4.F90 gf_unpack5.F90 gf_unpack6.F90 gf_unpack7.F90
gribcreate.F90 gribend.F90 gribinfo.F90
${CMAKE_CURRENT_BINARY_DIR}/gribmod.F90 gridtemplates.F90 intmath.F90
ixgb2.F90 jpcpack.F90 jpcunpack.F90 misspack.F90 mkieee.F90 pack_gp.f
params_ecmwf.F90 params.F90 pdstemplates.F90 pngpack.F90 pngunpack.F90
putgb2.F90 rdieee.F90 realloc.F90 reduce.f simpack.F90 simunpack.F90
skgb.F90 specpack.F90 specunpack.F90)
# This function calls NCEPLIBS-w3emc.
if (BUILD_WITH_W3EMC)
set(fortran_src ${fortran_src} gdt2gds.F90)
endif()
# These are the C source files.
set(c_src dec_png.c enc_png.c mova2i.c)
# Create this fortran file, which has the contents of the VERSION file
# substituted in.
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/gribmod.F90.in" "${CMAKE_CURRENT_BINARY_DIR}/gribmod.F90" @ONLY)
foreach(kind ${kinds})
# Figure out the library name and the include directory.
set(lib_name ${PROJECT_NAME}_${kind})
set(module_dir ${CMAKE_CURRENT_BINARY_DIR}/include_${kind})
# Build the fortran code.
add_library(${lib_name}_f OBJECT ${fortran_src})
set_target_properties(${lib_name}_f PROPERTIES COMPILE_FLAGS
"${fortran_${kind}_flags}")
set_target_properties(${lib_name}_f PROPERTIES Fortran_MODULE_DIRECTORY
${module_dir})
if(BUILD_SHARED_LIBS)
set_property(TARGET ${lib_name}_f PROPERTY POSITION_INDEPENDENT_CODE 1)
endif()
# Set preprocessor define so code can know what kind of library is
# being built.
target_compile_definitions(${lib_name}_f PUBLIC KIND=${kind})
# Build the C code.
add_library(${lib_name}_c OBJECT ${c_src})
target_include_directories(${lib_name}_c PRIVATE ${JASPER_INCLUDE_DIR})
target_link_libraries(${lib_name}_c PRIVATE PNG::PNG)
if(BUILD_SHARED_LIBS)
set_property(TARGET ${lib_name}_c PROPERTY POSITION_INDEPENDENT_CODE 1)
endif()
# Assemble the library.
add_library(${lib_name} $<TARGET_OBJECTS:${lib_name}_f> $<TARGET_OBJECTS:${lib_name}_c>)
# Link to bacio, and jasper always.
target_link_libraries(${lib_name} PUBLIC bacio::bacio ${PNG_LIBRARIES} ${JASPER_LIBRARIES})
# Link to w3emc if necessary.
if (BUILD_WITH_W3EMC)
target_link_libraries(${lib_name} PUBLIC w3emc::w3emc_${kind})
endif()
# For shared, set SOVERSION; increment it if API changes (other than
# adding new functions).
if(BUILD_SHARED_LIBS)
set_target_properties(${lib_name} PROPERTIES SOVERSION 0)
endif()
# Include directories.
target_include_directories(${lib_name} INTERFACE
$<BUILD_INTERFACE:${module_dir}>
$<INSTALL_INTERFACE:include_${kind}>)
list(APPEND LIB_TARGETS ${lib_name})
# Build with Jasper.
if(JASPER_FOUND)
message(STATUS "Found JASPER:")
message(STATUS " JASPER include directories ${JASPER_INCLUDE_DIR}")
message(STATUS " JASPER libraries ${JASPER_LIBRARIES} version ${JASPER_VERSION}")
target_sources(${lib_name} PRIVATE dec_jpeg2000.c enc_jpeg2000.c)
target_compile_definitions(${lib_name} PRIVATE USE_JPEG2000)
target_include_directories(${lib_name} PRIVATE "${JASPER_INCLUDE_DIR}")
set(G2_JPEG2000_ENABLED ON)
if(JASPER_VERSION_STRING VERSION_GREATER_EQUAL "3")
message(STATUS " JASPER is version 3.0 or greater")
add_definitions(-DJASPER3)
endif()
add_definitions(-DJPEG)
endif()
install(DIRECTORY ${module_dir} DESTINATION ${CMAKE_INSTALL_PREFIX})
endforeach()
install(
TARGETS ${LIB_TARGETS}
EXPORT ${PROJECT_NAME}Exports
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
### Package config
include(CMakePackageConfigHelpers)
set(CONFIG_INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
export(EXPORT ${PROJECT_NAME}Exports
NAMESPACE ${PROJECT_NAME}::
FILE ${PROJECT_NAME}-targets.cmake)
# g2-config.cmake
configure_package_config_file(
${CMAKE_SOURCE_DIR}/cmake/PackageConfig.cmake.in ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake
INSTALL_DESTINATION ${CONFIG_INSTALL_DESTINATION})
install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake
DESTINATION ${CONFIG_INSTALL_DESTINATION})
# g2-config-version.cmake
write_basic_package_version_file(
${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion)
install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
DESTINATION ${CONFIG_INSTALL_DESTINATION})
# g2-targets.cmake and g2-targets-<build-type>.cmake
install(EXPORT ${PROJECT_NAME}Exports
NAMESPACE ${PROJECT_NAME}::
FILE ${PROJECT_NAME}-targets.cmake
DESTINATION ${CONFIG_INSTALL_DESTINATION})