Skip to content

Commit

Permalink
cmake: Add common include directories and fix Windows
Browse files Browse the repository at this point in the history
Microsoft has some very annoying #define's which break most if not all of C++ at random spots. Best disable them globally so we don't have to ever deal with them. Also the MSVC CRT warnings are completely pointless, they are just whining that we use the standard instead of their non-portable functionality.
  • Loading branch information
Xaymar committed Sep 7, 2023
1 parent 54cd3ee commit ac307a4
Showing 1 changed file with 43 additions and 6 deletions.
49 changes: 43 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1626,6 +1626,21 @@ function(streamfx_add_library TARGET_NAME TARGET_TYPE)
target_compile_definitions(${TARGET_NAME} PRIVATE
__STDC_WANT_LIB_EXT1__=1
)
if(D_PLATFORM_WINDOWS)
target_compile_definitions(${TARGET_NAME}
PUBLIC
# Microsoft Visual C++
_CRT_SECURE_NO_WARNINGS
_ENABLE_EXTENDED_ALIGNED_STORAGE

PUBLIC
# windows.h
# - Disable MIN/MAX macro as this breaks a lot of code.
NOMINMAX
# - Disable IN/OUT macro as this breaks a lot of code.
NOINOUT
)
endif()

# C/C++ Compiler Adjustments
if(D_PLATFORM_WINDOWS AND ((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")))
Expand Down Expand Up @@ -1891,27 +1906,41 @@ function(streamfx_add_component COMPONENT_NAME)
# Allow disabling this component.
set(${COMPONENT_OPTION} ON CACHE BOOL "Enable the ${COMPONENT_NAME} component?")

# Add common include directories
target_include_directories(${COMPONENT_TARGET}
PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/source"
PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include"
)

# Add files in common places.
file(GLOB_RECURSE TEMPLATES FOLLOW_SYMLINKS CONFIGURE_DEPENDS "templates/*")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/templates" PREFIX "Templates" FILES ${TEMPLATES})

file(GLOB_RECURSE DATA FOLLOW_SYMLINKS CONFIGURE_DEPENDS "data/*")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/data" PREFIX "Data" FILES ${DATA})

file(GLOB_RECURSE SOURCE_PRIVATE FOLLOW_SYMLINKS CONFIGURE_DEPENDS "ui/*")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/ui" PREFIX "User-Interface Files" FILES ${UI_PRIVATE})
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/ui" PREFIX "User-Interface Files" FILES ${USERINTERFACE})

file(GLOB_RECURSE SOURCE_PRIVATE FOLLOW_SYMLINKS CONFIGURE_DEPENDS "source/*")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/source" PREFIX "Private Files" FILES ${SOURCE_PRIVATE})
file(GLOB_RECURSE UI_PRIVATE FOLLOW_SYMLINKS CONFIGURE_DEPENDS "source/ui/*")
file(GLOB_RECURSE GENERATED_PRIVATE FOLLOW_SYMLINKS CONFIGURE_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/source/*")
source_group(TREE "${CMAKE_CURRENT_BINARY_DIR}/source" PREFIX "Private Files/Generated" FILES ${GENERATED_PRIVATE})

file(GLOB_RECURSE SOURCE_PUBLIC FOLLOW_SYMLINKS CONFIGURE_DEPENDS "include/*")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/include" PREFIX "Public Files" FILES ${SOURCE_PUBLIC})
file(GLOB_RECURSE UI_PUBLIC FOLLOW_SYMLINKS CONFIGURE_DEPENDS "include/ui/*")
file(GLOB_RECURSE GENERATED_PUBLIC FOLLOW_SYMLINKS CONFIGURE_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/include/*")
source_group(TREE "${CMAKE_CURRENT_BINARY_DIR}/include" PREFIX "Public Files/Generated" FILES ${GENERATED_PUBLIC})

target_sources(${COMPONENT_TARGET}
PRIVATE
${DATA}
${TEMPLATES}
${UI_PRIVATE}
${USERINTERFACE}
${SOURCE_PRIVATE}
${GENERATED_PRIVATE}
PUBLIC
Expand All @@ -1921,13 +1950,13 @@ function(streamfx_add_component COMPONENT_NAME)

# Ignore data only files.
set_source_files_properties(
${DATA}
${TEMPLATES}
${UI_PRIVATE}
${USERINTERFACE}
PROPERTIES
HEADER_FILE_ONLY ON
)


# Enable Qt if needed
set_target_properties(${TARGET_NAME} PROPERTIES
AUTOUIC ON
Expand All @@ -1936,7 +1965,6 @@ function(streamfx_add_component COMPONENT_NAME)
AUTORCC ON
AUTOGEN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated"
)

set_source_files_properties(
${TEMPLATES}
${SOURCE_PRIVATE}
Expand All @@ -1948,7 +1976,16 @@ function(streamfx_add_component COMPONENT_NAME)
SKIP_AUTOMOC ON
SKIP_AUTORCC ON
SKIP_AUTOUIC ON
)
)
set_source_files_properties(
${UI_PRIVATE}
${UI_PUBLIC}
PROPERTIES
SKIP_AUTOGEN OFF
SKIP_AUTOMOC OFF
SKIP_AUTORCC OFF
SKIP_AUTOUIC OFF
)
endfunction()

# Use this to add a dependency on another component,
Expand Down

0 comments on commit ac307a4

Please sign in to comment.