Skip to content

Commit 996b205

Browse files
authored
Merge pull request #140 from AdaptiveParticles/windows_compile
Windows compile
2 parents e94a62c + 05fefb9 commit 996b205

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1197
-1434
lines changed

.travis.yml

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,31 @@ matrix:
66
sudo: false
77
addons:
88
apt:
9-
sources:
10-
- sourceline: ppa:teward/swig3.0
11-
- sourceline: ppa:george-edison55/precise-backports
12-
- sourceline: ppa:ubuntu-toolchain-r/test
13-
- llvm-toolchain-precise-3.6
149
packages:
1510
- cmake
1611
- cmake-data
17-
- clang-3.6
1812
- libhdf5-dev
1913
- libtiff5
2014
- os: osx
2115
osx_image: xcode11.4
16+
addons:
17+
homebrew:
18+
packages:
19+
- c-blosc
20+
- cmake
21+
- llvm
22+
- libomp
23+
- os: windows
24+
language: cpp
2225

2326
install:
24-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
25-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install c-blosc; fi
26-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1; fi
27-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install cmake || brew upgrade cmake ; fi
28-
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export COMPILER=clang++-3.6; fi
29-
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export CXX=clang++-3.6; fi
30-
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export CC=clang-3.6; fi
27+
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade cmake ; fi
28+
- if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then travis_wait 10 choco install visualstudio2019buildtools --params "--add Microsoft.Component.MSBuild --add Microsoft.VisualStudio.Component.VC.Llvm.Clang --add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang --add Microsoft.VisualStudio.Component.Windows10SDK.19041 --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.ComponentGroup.UWP.VC.BuildTools"; fi
3129
- git submodule init
3230
- git submodule update
3331

3432
script:
35-
- sh ./cmake-build.sh
33+
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sh ./cmake-build.sh; fi
34+
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sh ./cmake-build.sh; fi
35+
- if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then travis_wait 40 sh ./cmake-build_windows.sh; fi
36+

CMakeLists.txt

Lines changed: 75 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
###############################################################################
22
# APR - Adaptive Particle Representation
33
###############################################################################
4-
cmake_minimum_required(VERSION 3.9)
5-
project(LibAPR DESCRIPTION "Adaptive Particle Representation library")
4+
cmake_minimum_required(VERSION 3.10)
5+
project(APR DESCRIPTION "Adaptive Particle Representation library")
6+
7+
message(STATUS "CMAKE VERSION ${CMAKE_VERSION}")
68

79
set(CMAKE_CXX_STANDARD 14)
810
set(CMAKE_CXX_STANDARD_REQUIRED ON)
911

1012
# APR build options:
1113
option(APR_INSTALL "Install APR library" OFF)
12-
option(APR_BUILD_SHARED_LIB "Builds shared library" ON)
13-
option(APR_BUILD_STATIC_LIB "Builds static library" OFF)
14+
option(APR_BUILD_SHARED_LIB "Builds shared library" OFF)
15+
option(APR_BUILD_STATIC_LIB "Builds static library" ON)
1416
option(APR_BUILD_EXAMPLES "Build APR examples" OFF)
1517
option(APR_USE_LIBTIFF "Use LibTIFF" ON)
1618
option(APR_TESTS "Build APR tests" OFF)
17-
option(APR_PREFER_EXTERNAL_GTEST "When found, use the installed GTEST libs instead of included sources" OFF)
18-
option(APR_PREFER_EXTERNAL_BLOSC "When found, use the installed BLOSC libs instead of included sources" OFF)
19+
option(APR_PREFER_EXTERNAL_GTEST "When found, use the installed GTEST libs instead of included sources" ON)
20+
option(APR_PREFER_EXTERNAL_BLOSC "When found, use the installed BLOSC libs instead of included sources" ON)
1921
option(APR_USE_CUDA "should APR use CUDA? (experimental - under development)" OFF)
2022
option(APR_USE_OPENMP "should APR use OpenMP?" ON)
2123
option(APR_BENCHMARK "add benchmarking code" OFF)
@@ -77,7 +79,6 @@ if(APR_DENOISE)
7779

7880
endif()
7981

80-
8182
if(APR_USE_LIBTIFF)
8283
find_package(TIFF)
8384
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LIBTIFF")
@@ -86,17 +87,22 @@ endif()
8687

8788
# Handle OpenMP
8889
find_package(OpenMP)
90+
8991
if(NOT OPENMP_FOUND OR NOT APR_USE_OPENMP)
9092
message(WARNING "OpenMP support not found or disabled with current compiler. While APR can compile like this, performance might not be optimal. Please see README.md for instructions.")
93+
set(OPENMP_LINK "")
9194
else()
95+
set(OPENMP_LINK "OpenMP::OpenMP_CXX")
9296
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_OPENMP ${OpenMP_C_FLAGS}")
9397
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENMP ${OpenMP_CXX_FLAGS}")
9498
endif()
99+
95100
include_directories(${HDF5_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${TIFF_INCLUDE_DIR})
96101

97102
if(APR_PREFER_EXTERNAL_BLOSC)
98103
find_package(BLOSC)
99104
endif()
105+
100106
if(BLOSC_FOUND)
101107
message(STATUS "APR: blosc found, using external blosc")
102108
include_directories(${BLOSC_INCLUDE_DIR})
@@ -117,7 +123,7 @@ else()
117123
endif()
118124

119125
# Add submodule GLM (include files only)
120-
include_directories("external/glm")
126+
include_directories(external/glm)
121127

122128
#message(STATUS "---------------------- VARS BEG ---------------------")
123129
#get_cmake_property(_variableNames VARIABLES)
@@ -132,18 +138,49 @@ include_directories("external/glm")
132138
# If you ever want to compile with Intel's icc (or any other compiler) provide
133139
# compiler names/paths in cmake command like this:
134140
# CC="icc" CXX="icc" CXXFLAGS="-O3" cmake -DAPR_TESTS=1
135-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 ")
136-
if(CMAKE_COMPILER_IS_GNUCC)
137-
set(CMAKE_CXX_FLAGS_RELEASE "-O4 -ffast-math")
138-
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic")
139-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Bdynamic")
140-
if(NOT WIN32)
141-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl -lz")
141+
142+
if(WIN32)
143+
144+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN_COMPILE")
145+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN_COMPILE")
146+
147+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
148+
149+
message(STATUS "Compiling on windows with CLANG!")
150+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xclang -fcxx-exceptions")
151+
152+
set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Z7")
153+
set(CMAKE_CXX_FLAGS_RELEASE "/MD /EHsc /std:c++17 /arch:AVX2 -Xclang -O3 /nologo /fp:fast") #-flto=thin -march=native /O2 /Ob2
154+
155+
endif()
156+
157+
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
158+
message(STATUS "Compiling on windows with MSVC!")
159+
160+
set(CMAKE_CXX_FLAGS_RELEASE "/MD /EHsc /std:c++17 /arch:AVX2 /O2 /Ob2 /nologo /fp:fast")
161+
set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Z7")
162+
163+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN_VS")
164+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN_VS")
165+
166+
endif()
167+
168+
169+
else()
170+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 ")
171+
172+
if(CMAKE_COMPILER_IS_GNUCC)
173+
set(CMAKE_CXX_FLAGS_RELEASE "-O4 -ffast-math")
174+
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic")
175+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Bdynamic")
176+
if(NOT WIN32)
177+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl -lz")
178+
endif()
179+
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
180+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math")
181+
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic")
182+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lz")
142183
endif()
143-
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
144-
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math")
145-
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic")
146-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lz")
147184
endif()
148185

149186
if (APR_BENCHMARK)
@@ -156,14 +193,15 @@ endif()
156193
# Generate APR library
157194
###############################################################################
158195

159-
set(LIBRARY_NAME apr)
196+
set(LIBRARY_NAME APR)
160197

161198
include_directories(src)
162199

163200
set(SOURCE_FILES src/io/blosc_filter.c src/io/hdf5functions_blosc.cpp)
164-
#set(SOURCE_FILES_RAYCAST src/numerics/APRRaycaster.cpp src/vis/Camera.cpp src/vis/Object.cpp src/vis/RaytracedObject.cpp)
201+
set(SOURCE_FILES_RAYCAST src/vis/Camera.cpp src/vis/Object.cpp src/vis/RaytracedObject.cpp src/vis/RaycastUtils.cpp)
165202

166203
add_library(aprObjLib OBJECT ${SOURCE_FILES} ${SOURCE_FILES_RAYCAST})
204+
set_property(TARGET aprObjLib PROPERTY POSITION_INDEPENDENT_CODE ON)
167205

168206
if(APR_USE_CUDA)
169207
message(STATUS "APR: Building CUDA for APR")
@@ -204,11 +242,16 @@ if(APR_BUILD_STATIC_LIB)
204242
set_target_properties(${STATIC_TARGET_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION OFF)
205243
target_include_directories(${STATIC_TARGET_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>)
206244

245+
target_link_libraries(${STATIC_TARGET_NAME} PRIVATE ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${CUDA_CUDART_LIBRARY} ${ZLIB_LIBRARIES})
246+
207247
# generate fat static library by adding dependencies
208248
if(NOT BLOSC_FOUND)
209249
include(cmake/AddStaticLibs.cmake)
210-
addStaticLibs(${STATIC_TARGET_NAME} blosc_static)
250+
addStaticLibs(${STATIC_TARGET_NAME} blosc_static) #this is not working currently for clang-cl please use external.
251+
else()
252+
target_link_libraries(${STATIC_TARGET_NAME} PRIVATE ${BLOSC_LIBRARIES} ${ZLIB_LIBRARIES})
211253
endif()
254+
212255
endif()
213256

214257
if(APR_BUILD_SHARED_LIB)
@@ -223,7 +266,7 @@ if(APR_BUILD_SHARED_LIB)
223266
set_property(TARGET ${SHARED_TARGET_NAME} PROPERTY VERSION ${APR_VERSION_STRING})
224267
set_property(TARGET ${SHARED_TARGET_NAME} PROPERTY SOVERSION ${APR_VERSION_MAJOR})
225268

226-
target_link_libraries(${SHARED_TARGET_NAME} PRIVATE ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${CUDA_CUDART_LIBRARY} ${ZLIB_LIBRARIES})
269+
target_link_libraries(${SHARED_TARGET_NAME} PRIVATE ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${CUDA_CUDART_LIBRARY} ${ZLIB_LIBRARIES})
227270
if(BLOSC_FOUND)
228271
target_link_libraries(${SHARED_TARGET_NAME} PRIVATE ${BLOSC_LIBRARIES} ${ZLIB_LIBRARIES})
229272
else()
@@ -263,7 +306,7 @@ if(APR_INSTALL)
263306
install(FILES ${PROJECT_BINARY_DIR}/ConfigAPR.h COMPONENT DEV DESTINATION ${INSTALL_INCLUDE_PROJECT_DIR}/io)
264307
install(FILES ${PROJECT_BINARY_DIR}/ConfigAPR.h COMPONENT DEV DESTINATION ${INSTALL_INCLUDE_PROJECT_DIR})
265308

266-
set(APR_TARGETS LibAprTargets)
309+
set(APR_TARGETS LibAPRTargets)
267310
install(TARGETS ${SHARED_TARGET_NAME} ${STATIC_TARGET_NAME}
268311
EXPORT ${APR_TARGETS}
269312
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
@@ -274,18 +317,18 @@ if(APR_INSTALL)
274317
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/apr.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/apr.pc" @ONLY)
275318
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/apr.pc" DESTINATION lib/pkgconfig COMPONENT DEV)
276319

277-
# AprTargets
320+
# APRTargets
278321
set(APR_NAMESPACE ${LIBRARY_NAME}::)
279-
export( EXPORT ${APR_TARGETS} FILE "${CMAKE_CURRENT_BINARY_DIR}/AprTargets.cmake" NAMESPACE ${APR_NAMESPACE})
280-
install(EXPORT ${APR_TARGETS} FILE AprTargets.cmake NAMESPACE ${APR_NAMESPACE} DESTINATION ${INSTALL_CMAKE_DIR})
322+
export( EXPORT ${APR_TARGETS} FILE "${CMAKE_CURRENT_BINARY_DIR}/APRTargets.cmake" NAMESPACE ${APR_NAMESPACE})
323+
install(EXPORT ${APR_TARGETS} FILE APRTargets.cmake NAMESPACE ${APR_NAMESPACE} DESTINATION ${INSTALL_CMAKE_DIR})
281324

282-
# AprConfig
283-
configure_file(cmake/AprConfig.cmake "${CMAKE_CURRENT_BINARY_DIR}/AprConfig.cmake" @ONLY)
284-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/AprConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/AprConfigVersion.cmake DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT DEV)
325+
# APRConfig
326+
configure_file(cmake/AprConfig.cmake "${CMAKE_CURRENT_BINARY_DIR}/APRConfig.cmake" @ONLY)
327+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/APRConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/APRConfigVersion.cmake DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT DEV)
285328

286-
# AprConfigVersion
329+
# APRConfigVersion
287330
include(CMakePackageConfigHelpers)
288-
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/AprConfigVersion.cmake" VERSION ${APR_VERSION_STRING} COMPATIBILITY AnyNewerVersion)
331+
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/APRConfigVersion.cmake" VERSION ${APR_VERSION_STRING} COMPATIBILITY AnyNewerVersion)
289332

290333
# uninstall
291334
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-uninstall.cmake.in"

INSTALL_INSTRUCTIONS.md

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,45 @@ APR_BUILD_SHARED_LIB=OFF
77
APR_INSTALL=ON
88
(all other configuration possibilities are now in the top of CMakeLists.txt file)
99

10-
so full command line would look like:
10+
## OSX / UNIX Installation
11+
12+
so full command line would look like: (-DCMAKE_INSTALL_PREFIX=/tmp/APR can be used for a non-default location)
1113

1214
```
1315
mkdir build
1416
cd build
15-
cmake -DCMAKE_INSTALL_PREFIX=/tmp/APR -DAPR_INSTALL=ON -DAPR_BUILD_STATIC_LIB=ON -DAPR_BUILD_SHARED_LIB=OFF ..
17+
cmake -DAPR_INSTALL=ON -DAPR_BUILD_STATIC_LIB=ON -DAPR_BUILD_SHARED_LIB=OFF ..
1618
make
1719
make install
1820
```
1921

20-
To use APR the minimalistic CMakeLists.txt file would look like:
22+
You may need file-permissions (sudo for the install)
2123

22-
```
23-
cmake_minimum_required(VERSION 3.2)
24-
project(myAprProject)
25-
set(CMAKE_CXX_STANDARD 14)
24+
## Windows Installation Clang
2625

27-
#external libraries needed for APR
28-
find_package(HDF5 REQUIRED)
29-
find_package(TIFF REQUIRED)
30-
include_directories(${HDF5_INCLUDE_DIRS} ${TIFF_INCLUDE_DIR} )
26+
``
27+
cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_TOOLCHAIN_FILE="PATH_TO_VCPKG\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows -T ClangCL -DAPR_BUILD_STATIC_LIB=ON -DAPR_BUILD_SHARED_LIB=OFF -DAPR_INSTALL=ON ..
28+
cmake --build . --config Release
29+
``
3130

32-
find_package(APR REQUIRED)
31+
Need to be in a console running as administrator.
3332

34-
add_executable(HelloAPR helloWorld.cpp)
35-
target_link_libraries(HelloAPR ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} apr::staticLib)
36-
```
33+
``
34+
cmake --install .
35+
``
36+
37+
## Minimal example CMAKE
38+
39+
To use APR the minimalistic CMakeLists.txt file can be found here: https://github.com/AdaptiveParticles/APR_cpp_project_example
40+
41+
##
42+
43+
APR::staticLib (Note, tested across Windows, Linux, and Mac)
44+
APR::sharedLib (Note, not tested)
3745

38-
if shared version is preferred then apr::sharedLib should be used (and of course APR_BUILD_SHARED_LIB=ON during lib build step).
46+
If shared version is preferred then APR::sharedLib should be used (and of course APR_BUILD_SHARED_LIB=ON during lib build step).
3947

40-
NOTICE: if APR is isntalled in not standard directory then some hint for cmake must be provided by adding install dir to CMAKE_PREFIX_PATH like for above example:
48+
NOTICE: if APR is installed in not standard directory then some hint for cmake must be provided by adding install dir to CMAKE_PREFIX_PATH like for above example:
4149

4250
```
4351
export CMAKE_PREFIX_PATH=/tmp/APR:$CMAKE_PREFIX_PATH

0 commit comments

Comments
 (0)