Skip to content
This repository has been archived by the owner on Mar 6, 2024. It is now read-only.

Commit

Permalink
Add support for MSVC
Browse files Browse the repository at this point in the history
  • Loading branch information
amyspark committed Sep 8, 2021
1 parent 03d0712 commit d887e94
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 28 deletions.
88 changes: 68 additions & 20 deletions gmic-qt/CMakeLists.txt
Expand Up @@ -29,10 +29,10 @@ else()
message("Building for target host application: " ${GMIC_QT_HOST})
endif()

if(EXISTS "../src/gmic.cpp")
set (GMIC_PATH "../src" CACHE STRING "Define the path to the gmic headers")
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../src/gmic.cpp")
set (GMIC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../src" CACHE STRING "Define the path to the gmic headers")
else()
set (GMIC_PATH "../gmic/src" CACHE STRING "Define the path to the gmic headers")
set (GMIC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../gmic/src" CACHE STRING "Define the path to the gmic headers")
endif()

message("G'MIC path: " ${GMIC_PATH})
Expand All @@ -44,15 +44,20 @@ set (GMIC_LIB_PATH "${GMIC_PATH}" CACHE STRING "Define the path to the GMIC shar
option(ENABLE_ASAN "Enable -fsanitize=address (if debug build)" ON)
option(ENABLE_FFTW3 "Enable FFTW3 library support" ON)

option(ENABLE_LTO "Enable -flto (Link Time Optimizer) on gcc and clang" ON)
option(ENABLE_LTO "Enable Link Time Optimizer" ON)

if (WIN32)
message("LTO is disabled (windows platform)")
if (MSVC)
option(ENABLE_CFG "Enable Control Flow Guard (MSVC)" ON)
add_definitions(-D__PRETTY_FUNCTION__=__FUNCSIG__)
endif()

if (WIN32 AND NOT MSVC)
message("LTO is disabled (windows platform, not MSVC)")
set(ENABLE_LTO OFF)
endif()

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(ENABLE_LTO OFF)
set(ENABLE_LTO OFF FORCE)
endif()


Expand Down Expand Up @@ -123,6 +128,11 @@ endif()

# Required packages

#
# Threads
#
find_package(Threads REQUIRED)

#
# Qt5
#
Expand Down Expand Up @@ -203,10 +213,33 @@ endif()
# LTO option
#

if (ENABLE_LTO AND (CMAKE_COMPILER_IS_GNUCC OR (CMAKE_CSS_COMPILER_IS STREQUAL "Clang")))
if (ENABLE_LTO)
message("Link Time Optimizer enabled")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
if (MSVC)
string(REPLACE "INCREMENTAL" "INCREMENTAL:NO" CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
string(REPLACE "INCREMENTAL" "INCREMENTAL:NO" CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}")
string(REPLACE "INCREMENTAL" "INCREMENTAL:NO" CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GL")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LTCG")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
endif()
endif()

#
# Enable CFG
#
if (MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:4194304")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /STACK:4194304")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /STACK:4194304")
if (ENABLE_CFG)
add_compile_options(/guard:CF)
add_link_options(/GUARD:CF)
endif()
endif()

#
Expand Down Expand Up @@ -265,9 +298,13 @@ if (WIN32)
add_definitions(-Dcimg_display=2)
add_definitions(-DPSAPI_VERSION=1)
add_definitions(-D_IS_WINDOWS_)
if (MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_compile_options(/wd4267)
endif()
set(gmic_qt_LIBRARIES
${gmic_qt_LIBRARIES}
pthread psapi gdi32
Threads::Threads psapi gdi32
)
endif()

Expand All @@ -282,19 +319,30 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
endif(ENABLE_ASAN)
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
add_definitions(-DQT_NO_DEBUG_OUTPUT)
string(REPLACE "-O2" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "-O3" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s")
if (WIN32)
if (MSVC)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /fp:fast /Oi")
else()
string(REPLACE "-O2" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "-O3" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast")
endif()
if (NOT MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s")
endif()
if (WIN32 AND NOT MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mwindows")
endif()
elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_definitions(-DQT_NO_DEBUG_OUTPUT)
string(REPLACE "-O2" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
string(REPLACE "-O3" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
set_source_files_properties(${GMIC_PATH}/gmic.cpp PROPERTIES COMPILE_FLAGS "-Ofast")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2")
if(MSVC)
string(REPLACE "Ob1" "Ob2" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /fp:fast /Oi")
else()
string(REPLACE "-O2" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
string(REPLACE "-O3" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
set_source_files_properties(${GMIC_PATH}/gmic.cpp PROPERTIES COMPILE_FLAGS "-Ofast")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2")
endif()
else()
message(FATAL_ERROR "Build type not recognized (${CMAKE_BUILD_TYPE})")
endif()
Expand Down
2 changes: 1 addition & 1 deletion gmic-qt/cmake/modules/FindFFTW3.cmake
Expand Up @@ -62,7 +62,7 @@ else()

find_library(
FFTW3_LIBRARY
NAMES libfftw3 libfftw3-3 libfftw3f-3 libfftw3l-3
NAMES libfftw3 libfftw3-3 libfftw3f-3 libfftw3l-3 fftw3
DOC "Libraries to link against for FFT Support")

if (FFTW3_LIBRARY)
Expand Down
2 changes: 1 addition & 1 deletion gmic-qt/src/FilterParameters/FloatParameter.cpp
Expand Up @@ -161,7 +161,7 @@ void FloatParameter::timerEvent(QTimerEvent * event)
{
killTimer(event->timerId());
_timerId = 0;
if (not _spinBox->unfinishedKeyboardEditing()) {
if (!_spinBox->unfinishedKeyboardEditing()) {
notifyIfRelevant();
}
}
Expand Down
2 changes: 1 addition & 1 deletion gmic-qt/src/FilterParameters/IntParameter.cpp
Expand Up @@ -156,7 +156,7 @@ void IntParameter::timerEvent(QTimerEvent * e)
{
killTimer(e->timerId());
_timerId = 0;
if (not _spinBox->unfinishedKeyboardEditing()) {
if (!_spinBox->unfinishedKeyboardEditing()) {
notifyIfRelevant();
}
}
Expand Down
2 changes: 1 addition & 1 deletion gmic-qt/src/FilterParameters/PointParameter.cpp
Expand Up @@ -202,7 +202,7 @@ void PointParameter::setVisibilityState(AbstractParameter::VisibilityState state

void PointParameter::updateView()
{
if (not _spinBoxX) {
if (!_spinBoxX) {
return;
}
disconnectSpinboxes();
Expand Down
6 changes: 3 additions & 3 deletions gmic-qt/src/FilterSelector/FiltersPresenter.cpp
Expand Up @@ -261,7 +261,7 @@ void FiltersPresenter::selectFilterFromHash(QString hash, bool notify)
hashExists = false;
}
}
if (not hashExists) {
if (!hashExists) {
hash.clear();
}
setCurrentFilter(hash);
Expand Down Expand Up @@ -536,12 +536,12 @@ void FiltersPresenter::removeFave(const QString & hash)

bool FiltersPresenter::danglingFaveIsSelected() const
{
if (not _filtersView || not _filtersView->aFaveIsSelected()) {
if (!_filtersView || !_filtersView->aFaveIsSelected()) {
return false;
}
QString hash = _filtersView->selectedFilterHash();
if (_favesModel.contains(hash)) {
return not _filtersModel.contains(_favesModel.getFaveFromHash(hash).originalHash());
return !_filtersModel.contains(_favesModel.getFaveFromHash(hash).originalHash());
}
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion gmic-qt/src/HeadlessProcessor.cpp
Expand Up @@ -271,7 +271,7 @@ void HeadlessProcessor::endApplication(const QString & errorMessage)
if (!errorMessage.isEmpty()) {
Logger::error(errorMessage);
}
QCoreApplication::exit(not errorMessage.isEmpty());
QCoreApplication::exit(!errorMessage.isEmpty());
}

} // namespace GmicQt
4 changes: 4 additions & 0 deletions src/gmic.cpp
Expand Up @@ -2534,7 +2534,11 @@ struct _gmic_parallel {
};

template<typename T>
#if cimg_OS==2 && defined(_MSC_VER)
DWORD WINAPI gmic_parallel(LPVOID arg) {
#else
static void *gmic_parallel(void *arg) {
#endif
_gmic_parallel<T> &st = *(_gmic_parallel<T>*)arg;
try {
unsigned int pos = 0;
Expand Down

0 comments on commit d887e94

Please sign in to comment.