forked from pyswmm/Stormwater-Management-Model
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
132 lines (99 loc) · 4.45 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
# SWMM LIBRARY
cmake_minimum_required (VERSION 3.0.2)
project(SWMM)
# Append local dir to module search path
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
option(BUILD_TESTS "Build unit tests (requires Boost test)" OFF)
option(BUILD_COVERAGE "Build library for coverage" OFF)
# Adds a subdirectory to the build. Paths are relative to the directory
# containing root CMakeLists.txt file.
add_subdirectory(tools/swmm-output)
IF (BUILD_TESTS)
add_subdirectory(tests)
ENDIF (BUILD_TESTS)
# Sets for output directory for executables and libraries.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# Sets the position independent code property for all targets.
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Sets compiler flags when building with Visual Studio.
if(MSVC)
set(CMAKE_C_FLAGS "/fp:fast /fp:except- /EHsc ")
set(CMAKE_C_FLAGS_DEBUG "/ZI /Od /Gm /RTC1")
set(CMAKE_C_FLAGS_RELEASE "/Zi /O2 /Oi /GL /MT /Gy")
set(CMAKE_SHARED_LINKER_FLAGS "/LTCG")
set(CMAKE_EXE_LINKER_FLAGS "/LTCG")
endif(MSVC)
# Set compiler flags when building on UNIX.
if(UNIX AND NOT APPLE)
set(CMAKE_C_FLAGS "-fopenmp")
set(CMAKE_CXX_FLAGS "-std=c++11 -fopenmp -Wno-write-strings")
# add_definitions(-std=c99)
endif(UNIX AND NOT APPLE)
# Set compiler flags when building on Apple
# adapted from https://github.com/CLIUtils/cmake/blob/master/PatchOpenMPApple.cmake
if(APPLE)
find_program(BREW NAMES brew)
if(BREW)
execute_process(COMMAND ${BREW} ls libomp RESULT_VARIABLE BREW_RESULT_CODE OUTPUT_QUIET ERROR_QUIET)
if(BREW_RESULT_CODE)
message(STATUS "This program supports OpenMP on Mac through Brew. Please run \"brew install libomp\"")
else()
execute_process(COMMAND ${BREW} --prefix libomp OUTPUT_VARIABLE BREW_LIBOMP_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
set(OpenMP_C_FLAGS "-Ofast -Xpreprocessor -fopenmp -lomp -Wno-unused-command-line-argument")
set(OpenMP_C_LIB_NAMES "omp")
set(OpenMP_CXX_FLAGS "-Ofast -Xpreprocessor -fopenmp -lomp -Wno-unused-command-line-argument")
set(OpenMP_CXX_LIB_NAMES "omp")
set(OpenMP_omp_LIBRARY "${BREW_LIBOMP_PREFIX}/lib/libomp.dylib")
include_directories("${BREW_LIBOMP_PREFIX}/include")
link_directories("${BREW_LIBOMP_PREFIX}/lib/")
message(STATUS "Using Homebrew libomp from ${BREW_LIBOMP_PREFIX}")
endif()
else()
message(STATUS "This program supports OpenMP on Mac through Homebrew, installing Homebrew recommmended https://brew.sh")
endif()
endif(APPLE)
# Loads settings for OpenMP and append any OpenMP compiler flags.
FIND_PACKAGE(OpenMP)
if(OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif(OPENMP_FOUND)
# Set up file groups for exe and lib targets
file(GLOB SWMM_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} src/*.c)
list(REMOVE_ITEM SWMM_SOURCES "src/swmm5.c")
set(SWMM_API_HEADERS include/swmm5.h; include/toolkitAPI.h)
include_directories(include)
# Build target for coverage configuration
IF (BUILD_COVERAGE)
include(CodeCoverage)
set(CMAKE_BUILD_TYPE "Debug")
APPEND_COVERAGE_COMPILER_FLAGS()
set(CMAKE_C_FLAGS_DEBUG "-O0")
# Creates swmm5 shared library
add_library(swmm_objs OBJECT ${SWMM_SOURCES})
add_library(swmm5 SHARED src/swmm5.c $<TARGET_OBJECTS:swmm_objs>)
target_include_directories(swmm5 PUBLIC ${PROJECT_SOURCE_DIR}/include)
# Build target for default library configuration
ELSE (BUILD_COVERAGE)
# Creates swmm5 shared library
add_library(swmm_objs OBJECT ${SWMM_SOURCES})
add_library(swmm5 SHARED src/swmm5.c $<TARGET_OBJECTS:swmm_objs>)
# Add includes and libraries to use when linking the swmm5 library
target_include_directories(swmm5 PUBLIC ${PROJECT_SOURCE_DIR}/include)
# Create export headers for use when linking with MSVC
#include(GenerateExportHeader)
#GENERATE_EXPORT_HEADER(swmm5
# BASE_NAME swmm5
# EXPORT_MACRO_NAME DLLEXPORT
# EXPORT_FILE_NAME swmm5_exports.h
# STATIC_DEFINE SHARED_EXPORTS_BUILT_AS_STATIC)
ENDIF (BUILD_COVERAGE)
# Creates the swmm5 command line executable
add_executable(run-swmm src/swmm5.c $<TARGET_OBJECTS:swmm_objs> ${SWMM_API_HEADERS})
target_compile_definitions(run-swmm PRIVATE CLE=TRUE)
if(NOT WIN32)
target_link_libraries(run-swmm PUBLIC m pthread)
endif(NOT WIN32)