Skip to content

Commit 2ecf611

Browse files
authored
[CMake] Provide out-of-source build (#768)
* [CMake] Provide out-of-source build * remove unused code * update those under tests * prevent code duplication * Clean dependency on PRISMS source directory * installed to a single cmake folder, clean CMakeLists.txt * fix application build after relocating cmake * install LICENSE file * format fix: white space * fix application build * bug fix * bug fix2 * bug fix3
1 parent 8a6096b commit 2ecf611

31 files changed

Lines changed: 192 additions & 110 deletions

File tree

CMakeLists.txt

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -90,19 +90,22 @@ message(STATUS "=========================================================")
9090
message(STATUS "")
9191

9292
# Generate config.h to enable and disable certain features within the source code.
93-
set(PRISMS_PF_SOURCE_DIR ${CMAKE_SOURCE_DIR})
93+
set(PRISMS_PF_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}")
9494

9595
if(ADDITIONAL_DEGREES)
9696
set(EXPAND_DEGREES "; 3; 4; 5; 6")
9797
endif()
9898

9999
configure_file(
100-
${CMAKE_SOURCE_DIR}/include/prismspf/config.h.in
101-
${CMAKE_BINARY_DIR}/include/prismspf/config.h
100+
${CMAKE_CURRENT_SOURCE_DIR}/include/prismspf/config.h.in
101+
${CMAKE_CURRENT_BINARY_DIR}/include/prismspf/config.h
102102
)
103103

104104
# Configure the template arguments file
105-
configure_file(${CMAKE_SOURCE_DIR}/cmake/templates.in ${CMAKE_BINARY_DIR}/cmake/templates)
105+
configure_file(
106+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates.in
107+
${CMAKE_CURRENT_BINARY_DIR}/cmake/templates
108+
)
106109

107110
# Add the script files
108111
add_subdirectory("${CMAKE_SOURCE_DIR}/cmake/scripts")
@@ -276,10 +279,9 @@ foreach(_build ${PRISMS_PF_BUILD_TYPES})
276279
target_include_directories(
277280
${_library}
278281
PUBLIC
279-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
280-
$<INSTALL_INTERFACE:include/prisms_pf>
281-
PRIVATE
282-
${CMAKE_BINARY_DIR}/src
282+
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
283+
$<INSTALL_INTERFACE:include>
284+
PRIVATE ${CMAKE_SOURCE_DIR}/src
283285
)
284286

285287
target_compile_options(
@@ -337,14 +339,36 @@ install(
337339

338340
# Install the headers
339341
install(
340-
DIRECTORY
341-
${CMAKE_CURRENT_SOURCE_DIR}/include/
342-
DESTINATION include/prisms_pf
342+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
343+
DESTINATION include
343344
FILES_MATCHING
344345
PATTERN "*.h"
345346
PATTERN "*.hpp"
346347
)
347348

349+
# Install the generated config.h
350+
install(
351+
FILES ${CMAKE_CURRENT_BINARY_DIR}/include/prismspf/config.h
352+
DESTINATION include/prismspf
353+
)
354+
355+
# Install the cmake folder
356+
install(
357+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake/
358+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/prisms_pf
359+
FILES_MATCHING
360+
PATTERN "*.cmake"
361+
PATTERN "*.cc"
362+
PATTERN "CMakeLists.txt"
363+
PATTERN "*.cmake.in" EXCLUDE
364+
)
365+
366+
# Install the generated Config file
367+
install(
368+
FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/prisms_pf-config.cmake
369+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/prisms_pf
370+
)
371+
348372
# Install the CMake config files
349373
install(
350374
EXPORT prisms_pf-targets
@@ -353,9 +377,21 @@ install(
353377
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/prisms_pf
354378
)
355379

380+
# Install the VERSION file
381+
install(
382+
FILES ${CMAKE_CURRENT_SOURCE_DIR}/VERSION
383+
DESTINATION .
384+
)
385+
386+
# Install the LICENSE file
387+
install(
388+
FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE
389+
DESTINATION .
390+
)
391+
392+
# Install the cmake/template file
356393
install(
357-
FILES
358-
${CMAKE_BINARY_DIR}/cmake/prisms_pf-config.cmake
394+
FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/templates"
359395
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/prisms_pf
360396
)
361397

@@ -404,9 +440,9 @@ include(${CMAKE_SOURCE_DIR}/cmake/write_config.cmake)
404440
# Generate configuration file for applications
405441
include(CMakePackageConfigHelpers)
406442
configure_package_config_file(
407-
${CMAKE_SOURCE_DIR}/cmake/prisms_pf-config.cmake.in
408-
${CMAKE_BINARY_DIR}/cmake/prisms_pf-config.cmake
409-
INSTALL_DESTINATION ${CMAKE_BINARY_DIR}/cmake
443+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/prisms_pf-config.cmake.in
444+
${CMAKE_CURRENT_BINARY_DIR}/cmake/prisms_pf-config.cmake
445+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/prisms_pf
410446
)
411447

412448
# Unwrap the compiler compile_commands.json after the build

applications/MgNd_precipitate_single_Bppp/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,10 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
2424
else()
2525
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2626
endif()

applications/allen_cahn_explicit/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,11 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
24+
2425
else()
2526
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2627
endif()

applications/alloy_solidification/CMakeLists.txt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,27 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
24+
25+
# put the binary in the source folder
26+
if(TARGET main-debug)
27+
set_target_properties(
28+
main-debug
29+
PROPERTIES
30+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}
31+
)
32+
endif()
33+
34+
if(TARGET main-release)
35+
set_target_properties(
36+
main-release
37+
PROPERTIES
38+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}
39+
)
40+
endif()
2441
else()
2542
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2643
endif()

applications/blank/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,10 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
2424
else()
2525
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2626
endif()

applications/cahn_hilliard_explicit/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,10 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
2424
else()
2525
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2626
endif()

applications/coupled_allen_cahn_cahn_hilliard/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,10 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
2424
else()
2525
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2626
endif()

applications/eshelby_inclusion/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,10 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
2424
else()
2525
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2626
endif()

applications/nucleation/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,10 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
2424
else()
2525
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2626
endif()

applications/precipitate_evolution/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cmake_minimum_required(VERSION 3.18)
66

77
# Create a project for the application
8-
project(myapp CXX)
8+
project(myapp C CXX)
99

1010
# Find the PRISMS-PF package
1111
find_package(
@@ -17,10 +17,10 @@ find_package(
1717
)
1818
if(PRISMS_PF_FOUND)
1919
# Include setup script
20-
include(${PRISMS_PF_CORE_DIR}/cmake/setup_application.cmake)
20+
include(${PRISMS_PF_CMAKE_DIR}/setup_application.cmake)
2121

2222
# Set up the application
23-
prisms_pf_autopilot(${PRISMS_PF_CORE_DIR})
23+
prisms_pf_autopilot(${PRISMS_PF_CMAKE_DIR})
2424
else()
2525
message(FATAL_ERROR "PRISMS-PF package not found. Please make sure it is in path.")
2626
endif()

0 commit comments

Comments
 (0)