diff --git a/CMakeLists.txt b/CMakeLists.txt index 78e2a61..a304c23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,34 +26,48 @@ # cmake -G "Visual Studio 10 2010" .. # msbuild /p:Configuration=Release ALL_BUILD.vcxproj # +# Generic Invocation: +# cmake -E make_directory buildprod +# cd build +# cmake -G GENERATOR -DCMAKE_BUILD_TYPE=Release .. +# cmake --build . --target SOME_TARGET --config Release +# # More information: # cmake --help # # CMake is available at https://cmake.org/download/ # -cmake_minimum_required (VERSION 2.6) - -SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) -SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +cmake_minimum_required (VERSION 2.8.8) project(EPANET) -IF(APPLE) +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +SET(CMAKE_POSITION_INDEPENDENT_CODE ON) + +IF (APPLE) SET(CMAKE_INSTALL_NAME_DIR @executable_path) SET(CMAKE_BUILD_WITH_INSTALL_RPATH ON) -ENDIF(APPLE) +ENDIF (APPLE) + +IF (MSVC) + set(CMAKE_C_FLAGS_RELEASE "/GL") + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) +ENDIF (MSVC) -# the library -include_directories(include) -file(GLOB EPANET_SOURCES src/*.c) -file(GLOB EPANET_HEADERS src/*.h) -file(GLOB EPANET_DATA src/*.dat) set(EPANET_API_HEADER "include/epanet2.h") -add_library(epanet STATIC ${EPANET_SOURCES} ${EPANET_HEADERS} ${EPANET_DATA} ${EPANET_API_HEADER}) +# create object library for reuse in other targets +include_directories(include; src) +file(GLOB EPANET_SOURCES src/*.c) +add_library(epanet_objs OBJECT ${EPANET_SOURCES}) + +# the shared library +add_library(epanet SHARED $ ${EPANET_API_HEADER}) # the standalone executable -include_directories(src) -add_executable(runepanet run/main.c) -target_link_libraries (runepanet LINK_PUBLIC epanet m) +add_executable(runepanet run/main.c $) +if (NOT MSVC) + target_link_libraries (runepanet m) +endif (NOT MSVC) diff --git a/README.md b/README.md index 48d47aa..7e7d3e9 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ EPANET {#epanet-readme} ====== +## Build Status +[![Build status](https://ci.appveyor.com/api/projects/status/eitwkr1f9jhj5m3a/branch/dev?svg=true)](https://ci.appveyor.com/project/OpenWaterAnalytics/epanet/branch/dev) [![Build Status](https://travis-ci.org/OpenWaterAnalytics/EPANET.svg?branch=master)](https://travis-ci.org/OpenWaterAnalytics/EPANET) The EPANET Library is a pressurized pipe network hydraulic and water quality analysis toolkit written in C. diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..42eece6 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,48 @@ +# +# appveyor.yml - Appveyor CI configuration for OWA EPANET +# +# Date created: 01/09/2018 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# + +version: 2.0.{build} + +image: + - Visual Studio 2013 + +# called before repo cloning +init: + - set EPANET_HOME=%APPVEYOR_BUILD_FOLDER% + - set BUILD_HOME=buildprod + - set TEST_HOME=tests\epanet-nrtestsuite + - set NRTEST_SCRIPT=%EPANET_HOME%\%BUILD_HOME%\packages\nrtest\scripts + - set GENERATOR="Visual Studio 10 2010" + +cache: + - C:\ProgramData\chocolatey\bin -> appveyor.yml + - C:\ProgramData\chocolatey\lib -> appveyor.yml + - '%BUILD_HOME% -> CMakeLists.txt' + +# called after repo clone +install: + - choco install swig + - python -m pip install --src %BUILD_HOME%\packages -r tools\requirements.txt + +# called before build +before_build: + - cd %BUILD_HOME% + - cmake -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release .. + +# run custom build script +build_script: + - cmake --build . --target runepanet --config Release + +before_test: + - cd %EPANET_HOME% + - tools\gen-config.cmd %EPANET_HOME%\%BUILD_HOME%\bin\Release > %TEST_HOME%\apps\epanet-%APPVEYOR_REPO_COMMIT%.json + +# run custom test script +test_script: + - tools\run-nrtest.cmd %NRTEST_SCRIPT% %TEST_HOME% %APPVEYOR_REPO_COMMIT% diff --git a/tools/gen-config.cmd b/tools/gen-config.cmd new file mode 100644 index 0000000..c59902e --- /dev/null +++ b/tools/gen-config.cmd @@ -0,0 +1,29 @@ +:: +:: gen-config.cmd - Generated nrtest app configuration file for test executable +:: +:: Date Created: 1/8/2018 +:: +:: Author: Michael E. Tryby +:: US EPA - ORD/NRMRL +:: +:: Arguments: +:: 1 - absolute path to test executable (valid path seperator for nrtest is "/") +:: + +@echo off +setlocal + +:: process path to remove quotes and convert backward to forward slash +set ABS_BUILD_PATH=%~1 +set ABS_BUILD_PATH=%ABS_BUILD_PATH:\=/% + +:: this is the target created by the cmake build script +set TEST_CMD=runepanet.exe + +echo { +echo "name" : "epanet", +echo "version" : "", +echo "description" : "", +echo "setup_script" : "", +echo "exe" : "%ABS_BUILD_PATH%/%TEST_CMD%" +echo } diff --git a/tools/run-nrtest.cmd b/tools/run-nrtest.cmd new file mode 100644 index 0000000..600563a --- /dev/null +++ b/tools/run-nrtest.cmd @@ -0,0 +1,46 @@ +:: +:: run_nrtest.cmd - Runs numerical regression test +:: +:: Date Created: 1/8/2018 +:: +:: Author: Michael E. Tryby +:: US EPA - ORD/NRMRL +:: +:: Arguments: +:: 1 - nrtest script path +:: 2 - test suite path +:: 3 - version/build identifier +:: + +@echo off +setlocal + +set NRTEST_SCRIPT_PATH=%~1 +set TEST_SUITE_PATH=%~2 + +set NRTEST_EXECUTE_CMD=python %NRTEST_SCRIPT_PATH%\nrtest execute +set TEST_APP_PATH=apps\epanet-%3.json +set TESTS=tests\examples +set TEST_OUTPUT_PATH=benchmark\epanet-%3 + +set NRTEST_COMPARE_CMD=python %NRTEST_SCRIPT_PATH%\nrtest compare +set REF_OUTPUT_PATH=benchmark\epanet-2012 +set RTOL_VALUE=0.1 +set ATOL_VALUE=0.0 + +:: change current directory to test suite +cd %TEST_SUITE_PATH% + +:: if present clean test benchmark results +if exist %TEST_OUTPUT_PATH% ( + rmdir /s /q %TEST_OUTPUT_PATH% +) + +echo INFO: Creating test benchmark +set NRTEST_COMMAND=%NRTEST_EXECUTE_CMD% %TEST_APP_PATH% %TESTS% -o %TEST_OUTPUT_PATH% +:: if there is an error exit the script with error value 1 +%NRTEST_COMMAND% || exit /B 1 + +echo INFO: Comparing test and ref benchmark +set NRTEST_COMMAND=%NRTEST_COMPARE_CMD% %TEST_OUTPUT_PATH% %REF_OUTPUT_PATH% --rtol %RTOL_VALUE% --atol %ATOL_VALUE% +%NRTEST_COMMAND%