Skip to content

Commit

Permalink
Fix MSVC build on windows
Browse files Browse the repository at this point in the history
* Add conditional flags for MSVC
* Add conditional flag for unix stdlib import
* Add address sanitizer check (disabled for now)
  • Loading branch information
rmarquis committed May 6, 2024
1 parent 3124931 commit 5d14256
Show file tree
Hide file tree
Showing 11 changed files with 196 additions and 21 deletions.
48 changes: 45 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,55 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()

# Enable AddressSanitizer
set(ENABLE_ASAN FALSE)

# create compilation database
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

if(MSVC)
message(STATUS "MSVC version: ${MSVC_VERSION}")

if(ENABLE_ASAN)
# Dont know the exact version but its somewhere there
if(MSVC_VERSION LESS 1925)
message(FATAL_ERROR "AddressSanitizer enabled but compiler doesn't support it - cannot continue.")
endif()

message(STATUS "Enabling AddressSanitizer for this configuration")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
endif()

if(FORCE_STATIC_VCRT)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /O2")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHa /W3")

set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)

foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
endif()

add_definitions(-D_CRT_SECURE_NO_WARNINGS) # Do not show CRT warnings
endif(MSVC)

# add_subdirectory("example")
add_subdirectory("common")
add_subdirectory("dimlp")
Expand Down
43 changes: 41 additions & 2 deletions common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Enable static compilation for MingW
Expand All @@ -24,6 +26,43 @@ if (WIN32)
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc -liconv -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS} -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
endif()
if(MSVC)
message(STATUS "MSVC version: ${MSVC_VERSION}")

if(ENABLE_ASAN)
# Dont know the exact version but its somewhere there
if(MSVC_VERSION LESS 1925)
message(FATAL_ERROR "AddressSanitizer enabled but compiler doesn't support it - cannot continue.")
endif()

message(STATUS "Enabling AddressSanitizer for this configuration")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
endif()

if(FORCE_STATIC_VCRT)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /O2")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHa /W3")

set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)

foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
endif()

add_definitions(-D_CRT_SECURE_NO_WARNINGS) # Do not show CRT warnings
endif(MSVC)
endif()


Expand Down
4 changes: 3 additions & 1 deletion common/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ project(common)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-O3")
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

FILE(GLOB COMMON_SRC
Expand Down
45 changes: 42 additions & 3 deletions dimlp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()

# Enable static compilation for MingW
# see https://cython.readthedocs.io/en/latest/src/tutorial/appendix.html
Expand All @@ -24,6 +26,43 @@ if (WIN32)
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc -liconv -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS} -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
endif()
if(MSVC)
message(STATUS "MSVC version: ${MSVC_VERSION}")

if(ENABLE_ASAN)
# Dont know the exact version but its somewhere there
if(MSVC_VERSION LESS 1925)
message(FATAL_ERROR "AddressSanitizer enabled but compiler doesn't support it - cannot continue.")
endif()

message(STATUS "Enabling AddressSanitizer for this configuration")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
endif()

if(FORCE_STATIC_VCRT)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /O2")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHa /W3")

set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)

foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
endif()

add_definitions(-D_CRT_SECURE_NO_WARNINGS) # Do not show CRT warnings
endif(MSVC)
endif()

add_subdirectory("cpp")
Expand Down
7 changes: 5 additions & 2 deletions dimlp/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ project(dimlp)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-O3")
#set(CMAKE_CXX_FLAGS "-O3 -fsanitize=address -fsanitize=leak -fsanitize=undefined")
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
# Warning, these flags slows down the execution
# set(CMAKE_CXX_FLAGS "-O3 -fsanitize=address -fsanitize=leak -fsanitize=undefined")
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

FILE(GLOB DIMLP_COMMON_SRC
Expand Down
2 changes: 2 additions & 0 deletions dimlp/cpp/src/randFun.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#include <stdlib.h>
#include <sys/types.h>
#if defined(__unix__) || defined(__APPLE__)
#include <unistd.h>
#endif

#include "randFun.h"

Expand Down
7 changes: 5 additions & 2 deletions example/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Enable static compilation for MingW
Expand Down
4 changes: 3 additions & 1 deletion example/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ project(example)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-O3")
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

FILE(GLOB SOURCE_FILES
Expand Down
45 changes: 42 additions & 3 deletions fidex/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_CXX_FLAGS "-O3 -fopenmp")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -fopenmp")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3 -fopenmp")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -fopenmp")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()

# Enable static compilation for MingW
# see https://cython.readthedocs.io/en/latest/src/tutorial/appendix.html
Expand All @@ -24,6 +26,43 @@ if (WIN32)
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc -liconv -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS} -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
endif()
if(MSVC)
message(STATUS "MSVC version: ${MSVC_VERSION}")

if(ENABLE_ASAN)
# Dont know the exact version but its somewhere there
if(MSVC_VERSION LESS 1925)
message(FATAL_ERROR "AddressSanitizer enabled but compiler doesn't support it - cannot continue.")
endif()

message(STATUS "Enabling AddressSanitizer for this configuration")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
endif()

if(FORCE_STATIC_VCRT)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /O2")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHa /W3")

set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)

foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT.lib /NODEFAULTLIB:MSVCRTD.lib")
endif()

add_definitions(-D_CRT_SECURE_NO_WARNINGS) # Do not show CRT warnings
endif(MSVC)
endif()


Expand Down
8 changes: 5 additions & 3 deletions fidex/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ project(fidexProject)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-O3 -Wunused" )
# Warning, these flags slows down the execution
# set(CMAKE_CXX_FLAGS "-O3 -fsanitize=address -fsanitize=leak -fsanitize=undefined")
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3 -Wunused" )
# Warning, these flags slows down the execution
# set(CMAKE_CXX_FLAGS "-O3 -fsanitize=address -fsanitize=leak -fsanitize=undefined")
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

FILE (GLOB FIDEX_COMMON_SRC
Expand Down
4 changes: 3 additions & 1 deletion tests/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ project(tests)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-O3" )
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "-O3")
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

FILE(GLOB TESTS_SRC
Expand Down

0 comments on commit 5d14256

Please sign in to comment.