Skip to content

Commit 650aa2b

Browse files
Modify the cmake to make it install package automatically.
1 parent 90bb865 commit 650aa2b

File tree

1 file changed

+84
-204
lines changed

1 file changed

+84
-204
lines changed

CMakeLists.txt

Lines changed: 84 additions & 204 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
cmake_minimum_required(VERSION 3.10)
22

3+
# Set policy CMP0135 to NEW to avoid timestamp warnings
4+
if(POLICY CMP0135)
5+
cmake_policy(SET CMP0135 NEW)
6+
endif()
7+
38
# Set default build type to Release if not specified
49
if(NOT CMAKE_BUILD_TYPE)
510
set(CMAKE_BUILD_TYPE Release)
@@ -16,16 +21,11 @@ endif()
1621
set(GCC_LIB_DIR "${GCC_HOME}/lib64")
1722
set(GCC_LIB32_DIR "${GCC_HOME}/lib")
1823

19-
# Set GCC compilers (can be overridden by PETSc if enabled)
24+
# Set GCC compilers
2025
set(CMAKE_C_COMPILER "${GCC_HOME}/bin/gcc" CACHE STRING "Set C compiler")
2126
set(CMAKE_CXX_COMPILER "${GCC_HOME}/bin/g++" CACHE STRING "Set C++ compiler")
2227
set(CMAKE_Fortran_COMPILER "${GCC_HOME}/bin/gfortran" CACHE STRING "Set Fortran compiler")
2328

24-
# Find MPI (uncomment if needed)
25-
# find_package(MPI REQUIRED)
26-
# set(CMAKE_C_COMPILER ${MPI_C_COMPILER})
27-
# set(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER})
28-
2929
# Find OpenMP
3030
find_package(OpenMP REQUIRED)
3131

@@ -50,13 +50,16 @@ else()
5050
message(STATUS "Using single core for building")
5151
endif()
5252

53+
# Limit cores for Boost build to avoid issues
54+
set(BOOST_BUILD_CORES 16)
55+
5356
# Set compiler flags
54-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 ${MPI_CXX_COMPILE_FLAGS} -Wall -Wno-unused-function -Wno-unused-variable")
55-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_C_COMPILE_FLAGS}")
57+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wno-unused-function")
58+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
5659
set(CMAKE_CXX_FLAGS_DEBUG "-g")
5760
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
5861
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -cpp -fPIC -fdefault-real-8 -ffree-line-length-0")
59-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_CXX_LINK_FLAGS}")
62+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
6063

6164
# Add OpenMP flags
6265
if(OpenMP_CXX_FOUND)
@@ -68,154 +71,74 @@ if(OpenMP_Fortran_FOUND)
6871
endif()
6972

7073
# Set RPATH usage
74+
set(CMAKE_INSTALL_RPATH "${DEP_INSTALL_DIR}/lib;${GCC_LIB_DIR};${GCC_LIB32_DIR}")
7175
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
7276

7377
add_definitions(-DRTE_USE_CBOOL)
7478

75-
# HDF5
76-
find_library(HDF5_LIB NAMES hdf5 hdf5_serial HINTS ${DEP_INSTALL_DIR}/lib NO_DEFAULT_PATH)
77-
find_library(HDF5_HL_LIB NAMES hdf5_hl HINTS ${DEP_INSTALL_DIR}/lib NO_DEFAULT_PATH)
78-
if(NOT HDF5_LIB OR NOT HDF5_HL_LIB)
79-
message(STATUS "HDF5 or HDF5 high-level library not found in ${DEP_INSTALL_DIR}, installing...")
80-
ExternalProject_Add(
81-
hdf5_ext
82-
URL https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz
83-
PREFIX ${CMAKE_SOURCE_DIR}/_deps/hdf5
84-
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env
85-
CC=${CMAKE_C_COMPILER}
86-
CXX=${CMAKE_CXX_COMPILER}
87-
<SOURCE_DIR>/configure
88-
--prefix=${DEP_INSTALL_DIR}
89-
--enable-cxx
90-
--enable-hl
91-
--disable-shared
92-
--enable-static
93-
--with-zlib=/usr
94-
BUILD_COMMAND make -j${N_CORES}
95-
INSTALL_COMMAND make install
96-
UPDATE_COMMAND ""
97-
BUILD_IN_SOURCE 1
98-
BUILD_ALWAYS FALSE
99-
)
100-
set(HDF5_NEEDS_INSTALL TRUE)
101-
set(HDF5_LIB ${DEP_INSTALL_DIR}/lib/libhdf5.a)
102-
set(HDF5_HL_LIB ${DEP_INSTALL_DIR}/lib/libhdf5_hl.a)
103-
else()
104-
message(STATUS "HDF5 found: ${HDF5_LIB}")
105-
message(STATUS "HDF5 high-level library found: ${HDF5_HL_LIB}")
106-
endif()
107-
108-
# NetCDF-C (depends on HDF5)
109-
find_library(NETCDF_LIB NAMES netcdf HINTS ${DEP_INSTALL_DIR}/lib NO_DEFAULT_PATH)
110-
if(NOT NETCDF_LIB)
111-
message(STATUS "NetCDF-C not found in ${DEP_INSTALL_DIR}, installing...")
112-
ExternalProject_Add(
113-
netcdf-c_ext
114-
URL https://github.com/Unidata/netcdf-c/archive/v4.3.3.1.tar.gz
115-
PREFIX ${CMAKE_SOURCE_DIR}/_deps/netcdf-c
116-
CONFIGURE_COMMAND <SOURCE_DIR>/configure
117-
--prefix=${DEP_INSTALL_DIR}
118-
CC=${CMAKE_C_COMPILER}
119-
CXX=${CMAKE_CXX_COMPILER}
120-
FC=${CMAKE_Fortran_COMPILER}
121-
--disable-dap
122-
--disable-byterange
123-
--with-hdf5=${DEP_INSTALL_DIR}
124-
BUILD_COMMAND make -j${N_CORES}
125-
INSTALL_COMMAND make install
126-
DEPENDS hdf5_ext
127-
UPDATE_COMMAND ""
128-
BUILD_ALWAYS FALSE
129-
)
130-
set(NETCDF_C_NEEDS_INSTALL TRUE)
131-
set(NETCDF_LIB ${DEP_INSTALL_DIR}/lib/libnetcdf.a)
132-
else()
133-
message(STATUS "NetCDF-C found in ${DEP_INSTALL_DIR}/lib")
134-
endif()
135-
136-
# NetCDF-C++ (depends on NetCDF-C and HDF5)
137-
find_library(NETCDF_CXX_LIB NAMES netcdf_c++4 HINTS ${DEP_INSTALL_DIR}/lib NO_DEFAULT_PATH)
138-
if(NOT NETCDF_CXX_LIB)
139-
message(STATUS "NetCDF-C++ not found in ${DEP_INSTALL_DIR}, installing...")
140-
ExternalProject_Add(
141-
netcdf-cxx_ext
142-
URL https://github.com/Unidata/netcdf-cxx4/archive/v4.3.0.tar.gz
143-
PREFIX ${CMAKE_SOURCE_DIR}/_deps/netcdf-cxx
144-
CONFIGURE_COMMAND <SOURCE_DIR>/configure
145-
--prefix=${DEP_INSTALL_DIR}
146-
CC=${CMAKE_C_COMPILER}
147-
CXX=${CMAKE_CXX_COMPILER}
148-
CPPFLAGS=-I${DEP_INSTALL_DIR}/include
149-
LDFLAGS=-L${DEP_INSTALL_DIR}/lib
150-
BUILD_COMMAND make -j${N_CORES}
151-
INSTALL_COMMAND make install
152-
DEPENDS netcdf-c_ext hdf5_ext
153-
UPDATE_COMMAND ""
154-
BUILD_ALWAYS FALSE
155-
)
156-
set(NETCDF_CXX_NEEDS_INSTALL TRUE)
157-
set(NETCDF_CXX_LIB ${DEP_INSTALL_DIR}/lib/libnetcdf_c++4.a)
158-
else()
159-
message(STATUS "NetCDF-C++ found in ${DEP_INSTALL_DIR}/lib")
160-
endif()
161-
162-
# Boost
163-
find_library(BOOST_SYSTEM_LIB NAMES boost_system HINTS ${DEP_INSTALL_DIR}/lib NO_DEFAULT_PATH)
164-
find_library(BOOST_FILESYSTEM_LIB NAMES boost_filesystem HINTS ${DEP_INSTALL_DIR}/lib NO_DEFAULT_PATH)
165-
if(NOT BOOST_SYSTEM_LIB OR NOT BOOST_FILESYSTEM_LIB)
166-
message(STATUS "Boost not found in ${DEP_INSTALL_DIR}, installing...")
167-
ExternalProject_Add(
168-
boost_ext
169-
URL https://archives.boost.io/release/1.87.0/source/boost_1_87_0.tar.bz2
170-
PREFIX ${CMAKE_SOURCE_DIR}/_deps/boost
171-
CONFIGURE_COMMAND <SOURCE_DIR>/bootstrap.sh
172-
--prefix=${DEP_INSTALL_DIR}
173-
--with-libraries=system,filesystem
174-
BUILD_COMMAND <SOURCE_DIR>/b2
175-
-j${N_CORES}
176-
install
177-
--prefix=${DEP_INSTALL_DIR}
178-
link=static
179-
threading=multi
180-
INSTALL_COMMAND ""
181-
UPDATE_COMMAND ""
182-
BUILD_IN_SOURCE 1
183-
BUILD_ALWAYS FALSE
184-
)
185-
set(BOOST_NEEDS_INSTALL TRUE)
186-
set(Boost_INCLUDE_DIRS ${DEP_INSTALL_DIR}/include)
187-
set(Boost_LIBRARIES ${DEP_INSTALL_DIR}/lib/libboost_system.a ${DEP_INSTALL_DIR}/lib/libboost_filesystem.a)
188-
else()
189-
message(STATUS "Boost found in ${DEP_INSTALL_DIR}/lib")
190-
set(Boost_INCLUDE_DIRS ${DEP_INSTALL_DIR}/include)
191-
set(Boost_LIBRARIES ${BOOST_SYSTEM_LIB} ${BOOST_FILESYSTEM_LIB})
192-
endif()
193-
194-
# Find system libraries
195-
find_library(DL_LIB NAMES dl)
196-
if(NOT DL_LIB)
197-
message(FATAL_ERROR "libdl not found. Please install the dynamic linking library.")
198-
else()
199-
message(STATUS "libdl found: ${DL_LIB}")
200-
endif()
201-
202-
find_library(Z_LIB NAMES z)
203-
if(NOT Z_LIB)
204-
message(FATAL_ERROR "zlib not found. Please install zlib.")
205-
else()
206-
message(STATUS "zlib found: ${Z_LIB}")
207-
endif()
208-
20979
# Include directories
21080
include_directories(
21181
include
21282
${DEP_INSTALL_DIR}/include
213-
${MPI_INCLUDE_PATH}
214-
${Boost_INCLUDE_DIRS}
21583
${CMAKE_SOURCE_DIR}/external/rte-rrtmgp-cpp/include
21684
${CMAKE_SOURCE_DIR}/external/rte-rrtmgp-cpp/include_test
21785
)
21886

87+
# ExternalProject for HDF5
88+
ExternalProject_Add(
89+
hdf5_ext
90+
URL https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.1/src/hdf5-1.10.1.tar.gz
91+
PREFIX ${CMAKE_SOURCE_DIR}/_deps/hdf5
92+
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${DEP_INSTALL_DIR} --enable-cxx --enable-fortran --enable-shared --with-pic CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} FC=${CMAKE_Fortran_COMPILER}
93+
BUILD_COMMAND make -j${N_CORES}
94+
INSTALL_COMMAND make install
95+
UPDATE_COMMAND ""
96+
BUILD_ALWAYS FALSE
97+
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
98+
)
99+
100+
# ExternalProject for NetCDF-C (depends on HDF5)
101+
ExternalProject_Add(
102+
netcdf-c_ext
103+
URL https://github.com/Unidata/netcdf-c/archive/v4.3.3.1.tar.gz
104+
PREFIX ${CMAKE_SOURCE_DIR}/_deps/netcdf-c
105+
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${DEP_INSTALL_DIR} --enable-netcdf-4 --enable-shared --with-pic --disable-dap CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} FC=${CMAKE_Fortran_COMPILER} CPPFLAGS=-I${DEP_INSTALL_DIR}/include LDFLAGS=-L${DEP_INSTALL_DIR}/lib
106+
BUILD_COMMAND make -j${N_CORES}
107+
INSTALL_COMMAND make install
108+
UPDATE_COMMAND ""
109+
BUILD_ALWAYS FALSE
110+
DEPENDS hdf5_ext
111+
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
112+
)
113+
114+
# ExternalProject for NetCDF-CXX (depends on NetCDF-C)
115+
ExternalProject_Add(
116+
netcdf-cxx4_ext
117+
URL https://github.com/Unidata/netcdf-cxx4/archive/v4.3.0.tar.gz
118+
PREFIX ${CMAKE_SOURCE_DIR}/_deps/netcdf-cxx4
119+
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${DEP_INSTALL_DIR} --enable-shared --with-pic CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CPPFLAGS=-I${DEP_INSTALL_DIR}/include LDFLAGS=-L${DEP_INSTALL_DIR}/lib
120+
BUILD_COMMAND make -j${N_CORES}
121+
INSTALL_COMMAND make install
122+
UPDATE_COMMAND ""
123+
BUILD_ALWAYS FALSE
124+
DEPENDS netcdf-c_ext
125+
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
126+
)
127+
128+
# ExternalProject for Boost
129+
ExternalProject_Add(
130+
boost_ext
131+
URL https://archives.boost.io/release/1.87.0/source/boost_1_87_0.tar.gz
132+
PREFIX ${CMAKE_SOURCE_DIR}/_deps/boost
133+
CONFIGURE_COMMAND <SOURCE_DIR>/bootstrap.sh --prefix=${DEP_INSTALL_DIR}
134+
BUILD_COMMAND <SOURCE_DIR>/b2 -j${BOOST_BUILD_CORES} install --prefix=${DEP_INSTALL_DIR}
135+
BUILD_IN_SOURCE TRUE
136+
INSTALL_COMMAND ""
137+
UPDATE_COMMAND ""
138+
BUILD_ALWAYS FALSE
139+
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
140+
)
141+
219142
# Add rte-rrtmgp-cpp as a subdirectory
220143
add_subdirectory(external/rte-rrtmgp-cpp)
221144

@@ -241,79 +164,37 @@ add_executable(vvm2d ${SRC})
241164
# Link Fortran library and runtime to the executable
242165
target_link_libraries(vvm2d PRIVATE p3 gfortran)
243166

244-
# Link MPI libraries (uncomment if MPI is enabled)
245-
# target_link_libraries(vvm2d PRIVATE ${MPI_CXX_LIBRARIES})
246-
247167
# Link OpenMP libraries
248168
if(OpenMP_CXX_FOUND)
249169
target_link_libraries(vvm2d PRIVATE OpenMP::OpenMP_CXX)
250170
endif()
251171

172+
# Specify expected library paths (will be built by ExternalProject)
173+
set(HDF5_LIB ${DEP_INSTALL_DIR}/lib/libhdf5.so)
174+
set(HDF5_CXX_LIB ${DEP_INSTALL_DIR}/lib/libhdf5_cpp.so)
175+
set(NETCDF_C_LIB ${DEP_INSTALL_DIR}/lib/libnetcdf.so)
176+
set(NETCDF_CXX_LIB ${DEP_INSTALL_DIR}/lib/libnetcdf_c++4.so)
177+
set(BOOST_SYSTEM_LIB ${DEP_INSTALL_DIR}/lib/libboost_system.so)
178+
set(BOOST_FILESYSTEM_LIB ${DEP_INSTALL_DIR}/lib/libboost_filesystem.so)
179+
252180
# Link libraries
253181
target_link_libraries(vvm2d PRIVATE
254182
rte_rrtmgp
255-
${NETCDF_LIB}
256-
${NETCDF_CXX_LIB}
257-
${HDF5_HL_LIB}
258183
${HDF5_LIB}
259-
${Boost_LIBRARIES}
260-
${DL_LIB}
261-
${Z_LIB}
184+
${HDF5_CXX_LIB}
185+
${NETCDF_C_LIB}
186+
${NETCDF_CXX_LIB}
187+
${BOOST_SYSTEM_LIB}
188+
${BOOST_FILESYSTEM_LIB}
262189
stdc++
263190
)
264191

265-
# Link PETSc if enabled
266-
option(USE_PETSC "Enable PETSc support" OFF)
267-
if(USE_PETSC)
268-
message(STATUS "PETSc support enabled")
269-
find_library(PETSC_LIB NAMES petsc HINTS ${DEP_INSTALL_DIR}/lib NO_DEFAULT_PATH)
270-
if(NOT PETSC_LIB)
271-
message(STATUS "PETSc not found in ${DEP_INSTALL_DIR}, installing...")
272-
ExternalProject_Add(
273-
petsc_ext
274-
GIT_REPOSITORY https://gitlab.com/petsc/petsc.git
275-
GIT_TAG v3.20.5
276-
GIT_SHALLOW TRUE
277-
PREFIX ${CMAKE_SOURCE_DIR}/_deps/petsc
278-
CONFIGURE_COMMAND <SOURCE_DIR>/configure
279-
--prefix=${DEP_INSTALL_DIR}
280-
--with-cc=${CMAKE_C_COMPILER}
281-
--with-cxx=${CMAKE_CXX_COMPILER}
282-
--with-fc=${CMAKE_Fortran_COMPILER}
283-
--with-mpi=1
284-
BUILD_COMMAND make -j${N_CORES}
285-
INSTALL_COMMAND make install
286-
UPDATE_COMMAND ""
287-
BUILD_ALWAYS FALSE
288-
)
289-
set(PETSC_NEEDS_INSTALL TRUE)
290-
set(PETSC_LIB ${DEP_INSTALL_DIR}/lib/libpetsc.so)
291-
else()
292-
message(STATUS "PETSc found in ${DEP_INSTALL_DIR}/lib")
293-
endif()
294-
target_link_libraries(vvm2d PRIVATE ${PETSC_LIB})
295-
endif()
296-
297-
# Add dependencies if needed
298-
if(HDF5_NEEDS_INSTALL)
299-
add_dependencies(vvm2d hdf5_ext)
300-
endif()
301-
if(NETCDF_C_NEEDS_INSTALL)
302-
add_dependencies(vvm2d netcdf-c_ext)
303-
endif()
304-
if(NETCDF_CXX_NEEDS_INSTALL)
305-
add_dependencies(vvm2d netcdf-cxx_ext)
306-
endif()
307-
if(BOOST_NEEDS_INSTALL)
308-
add_dependencies(vvm2d boost_ext)
309-
endif()
310-
if(USE_PETSC AND PETSC_NEEDS_INSTALL)
311-
add_dependencies(vvm2d petsc_ext)
312-
endif()
192+
# Add dependencies
193+
add_dependencies(vvm2d hdf5_ext netcdf-c_ext netcdf-cxx4_ext boost_ext)
313194

314195
# Set runtime library paths (-rpath)
315196
set_target_properties(vvm2d PROPERTIES
316-
LINK_FLAGS "-Wl,-rpath,${GCC_LIB_DIR} -Wl,-rpath,${GCC_LIB32_DIR} -Wl,-rpath,${DEP_INSTALL_DIR}/lib"
197+
LINK_FLAGS "-Wl,-rpath,${DEP_INSTALL_DIR}/lib -Wl,-rpath,${GCC_LIB_DIR} -Wl,-rpath,${GCC_LIB32_DIR}"
317198
)
318199

319200
# CPack settings
@@ -327,7 +208,6 @@ message(STATUS " Build type: ${CMAKE_BUILD_TYPE}")
327208
message(STATUS " C Compiler: ${CMAKE_C_COMPILER}")
328209
message(STATUS " C++ Compiler: ${CMAKE_CXX_COMPILER}")
329210
message(STATUS " Fortran Compiler: ${CMAKE_Fortran_COMPILER}")
330-
message(STATUS " PETSc support: ${USE_PETSC}")
331211
message(STATUS " OpenMP support: ${OpenMP_CXX_FOUND}")
332212
if(OpenMP_CXX_FOUND)
333213
message(STATUS " OpenMP CXX flags: ${OpenMP_CXX_FLAGS}")

0 commit comments

Comments
 (0)