mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-01 10:53:33 +00:00
Windows fixes.
This CL fixes up some issues which give compile errors when building with Visual Studio. Change-Id: Ib76644d869dd2adccd579621d18804d84b65a74c Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/20940 Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
parent
253ee1b3ef
commit
6ca2699eaf
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
.gclient
|
.gclient
|
||||||
.gclient_entries
|
.gclient_entries
|
||||||
|
.vs
|
||||||
.vscode
|
.vscode
|
||||||
build
|
build
|
||||||
buildtools
|
buildtools
|
||||||
|
@ -39,6 +39,14 @@ option(TINT_ENABLE_UBSAN "Enable undefined behaviour sanitizer" OFF)
|
|||||||
|
|
||||||
option(TINT_CHECK_CHROMIUM_STYLE "Check for [chromium-style] issues during build" OFF)
|
option(TINT_CHECK_CHROMIUM_STYLE "Check for [chromium-style] issues during build" OFF)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
# On Windows, CMake by default compiles with the shared CRT.
|
||||||
|
# Default it to the static CRT.
|
||||||
|
option(TINT_ENABLE_SHARED_CRT
|
||||||
|
"Tint: Use the shared CRT with MSVC instead of the static CRT"
|
||||||
|
${TINT_ENABLE_SHARED_CRT})
|
||||||
|
endif(WIN32)
|
||||||
|
|
||||||
message(STATUS "Tint build docs: ${TINT_BUILD_DOCS}")
|
message(STATUS "Tint build docs: ${TINT_BUILD_DOCS}")
|
||||||
message(STATUS "Tint build SPIR-V reader: ${TINT_BUILD_SPV_READER}")
|
message(STATUS "Tint build SPIR-V reader: ${TINT_BUILD_SPV_READER}")
|
||||||
message(STATUS "Tint build WGSL reader: ${TINT_BUILD_WGSL_READER}")
|
message(STATUS "Tint build WGSL reader: ${TINT_BUILD_WGSL_READER}")
|
||||||
@ -81,6 +89,25 @@ else()
|
|||||||
message("Doxygen not found. Skipping documentation")
|
message("Doxygen not found. Skipping documentation")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
# We don't want to have to copy the C Runtime DLL everywhere the executable
|
||||||
|
# goes. So by default compile code to assume the CRT is statically linked,
|
||||||
|
# i.e. use /MT* options. For debug builds use /MTd, and for release builds
|
||||||
|
# use /MT. If TINT_ENABLE_SHARED_CRT is ON, then use the shared C runtime.
|
||||||
|
# Modify the project-wide options variables. This is ugly, but seems to be
|
||||||
|
# the state of the art.
|
||||||
|
if(NOT ${TINT_ENABLE_SHARED_CRT})
|
||||||
|
message(STATUS "Tint: Static C runtime selected: replacing /MD* with /MT*")
|
||||||
|
foreach (flag_var
|
||||||
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||||||
|
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||||
|
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
||||||
|
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
||||||
|
string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
function(tint_default_compile_options TARGET)
|
function(tint_default_compile_options TARGET)
|
||||||
include_directories("${PROJECT_SOURCE_DIR}")
|
include_directories("${PROJECT_SOURCE_DIR}")
|
||||||
|
|
||||||
@ -141,6 +168,8 @@ function(tint_default_compile_options TARGET)
|
|||||||
/W3
|
/W3
|
||||||
/WX
|
/WX
|
||||||
/wd4068
|
/wd4068
|
||||||
|
/wd4244
|
||||||
|
/wd4267
|
||||||
/wd4514
|
/wd4514
|
||||||
/wd4571
|
/wd4571
|
||||||
/wd4625
|
/wd4625
|
||||||
@ -152,6 +181,19 @@ function(tint_default_compile_options TARGET)
|
|||||||
/wd5027
|
/wd5027
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NOT ${TINT_ENABLE_SHARED_CRT})
|
||||||
|
# For MinGW cross compile, statically link to the C++ runtime.
|
||||||
|
# But it still depends on MSVCRT.dll.
|
||||||
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||||
|
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
|
||||||
|
set_target_properties(${TARGET} PROPERTIES LINK_FLAGS
|
||||||
|
-static
|
||||||
|
-static-libgcc
|
||||||
|
-static-libstdc++)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
add_subdirectory(third_party)
|
add_subdirectory(third_party)
|
||||||
|
@ -321,7 +321,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|||||||
SignedIntData{"2", 2},
|
SignedIntData{"2", 2},
|
||||||
SignedIntData{"123", 123},
|
SignedIntData{"123", 123},
|
||||||
SignedIntData{"2147483647", 2147483647},
|
SignedIntData{"2147483647", 2147483647},
|
||||||
SignedIntData{"-2147483648", -2147483648}));
|
SignedIntData{"-2147483648", -2147483648LL}));
|
||||||
|
|
||||||
using IntegerTest_Invalid = testing::TestWithParam<const char*>;
|
using IntegerTest_Invalid = testing::TestWithParam<const char*>;
|
||||||
TEST_P(IntegerTest_Invalid, Parses) {
|
TEST_P(IntegerTest_Invalid, Parses) {
|
||||||
|
@ -49,7 +49,7 @@ TEST_F(ParserImplTest, ConstLiteral_Float) {
|
|||||||
ASSERT_FALSE(p->has_error());
|
ASSERT_FALSE(p->has_error());
|
||||||
ASSERT_NE(c, nullptr);
|
ASSERT_NE(c, nullptr);
|
||||||
ASSERT_TRUE(c->IsFloat());
|
ASSERT_TRUE(c->IsFloat());
|
||||||
EXPECT_FLOAT_EQ(c->AsFloat()->value(), 234e12);
|
EXPECT_FLOAT_EQ(c->AsFloat()->value(), 234e12f);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ParserImplTest, ConstLiteral_InvalidFloat) {
|
TEST_F(ParserImplTest, ConstLiteral_InvalidFloat) {
|
||||||
|
@ -45,10 +45,10 @@ class Builder {
|
|||||||
/// which we will use to evaluate the current set of accessors. This maybe
|
/// which we will use to evaluate the current set of accessors. This maybe
|
||||||
/// the original variable, or maybe an intermediary if we had to evaulate
|
/// the original variable, or maybe an intermediary if we had to evaulate
|
||||||
/// the access chain early (in the case of a swizzle of an access chain).
|
/// the access chain early (in the case of a swizzle of an access chain).
|
||||||
uint32_t source_id;
|
uint32_t source_id = 0;
|
||||||
/// The type of the current chain source. This type matches the deduced
|
/// The type of the current chain source. This type matches the deduced
|
||||||
/// result_type of the current source defined above.
|
/// result_type of the current source defined above.
|
||||||
ast::type::Type* source_type;
|
ast::type::Type* source_type = nullptr;
|
||||||
/// A list of access chain indices to emit. Note, we _only_ have access
|
/// A list of access chain indices to emit. Note, we _only_ have access
|
||||||
/// chain indices if the source is pointer.
|
/// chain indices if the source is pointer.
|
||||||
std::vector<uint32_t> access_chain_indices;
|
std::vector<uint32_t> access_chain_indices;
|
||||||
|
@ -32,7 +32,7 @@ TEST_F(InstructionTest, Create) {
|
|||||||
|
|
||||||
const auto& ops = i.operands();
|
const auto& ops = i.operands();
|
||||||
EXPECT_TRUE(ops[0].IsFloat());
|
EXPECT_TRUE(ops[0].IsFloat());
|
||||||
EXPECT_FLOAT_EQ(ops[0].to_f(), 1.2);
|
EXPECT_FLOAT_EQ(ops[0].to_f(), 1.2f);
|
||||||
|
|
||||||
EXPECT_TRUE(ops[1].IsInt());
|
EXPECT_TRUE(ops[1].IsInt());
|
||||||
EXPECT_EQ(ops[1].to_i(), 1u);
|
EXPECT_EQ(ops[1].to_i(), 1u);
|
||||||
|
@ -27,7 +27,7 @@ class Operand {
|
|||||||
/// The kind of the operand
|
/// The kind of the operand
|
||||||
// Note, the `kInt` will cover most cases as things like IDs in SPIR-V are
|
// Note, the `kInt` will cover most cases as things like IDs in SPIR-V are
|
||||||
// just ints for the purpose of converting to binary.
|
// just ints for the purpose of converting to binary.
|
||||||
enum Kind { kInt = 0, kFloat, kString };
|
enum class Kind { kInt = 0, kFloat, kString };
|
||||||
|
|
||||||
/// Creates a float operand
|
/// Creates a float operand
|
||||||
/// @param val the float value
|
/// @param val the float value
|
||||||
|
@ -26,7 +26,7 @@ using OperandTest = testing::Test;
|
|||||||
TEST_F(OperandTest, CreateFloat) {
|
TEST_F(OperandTest, CreateFloat) {
|
||||||
auto o = Operand::Float(1.2f);
|
auto o = Operand::Float(1.2f);
|
||||||
EXPECT_TRUE(o.IsFloat());
|
EXPECT_TRUE(o.IsFloat());
|
||||||
EXPECT_FLOAT_EQ(o.to_f(), 1.2);
|
EXPECT_FLOAT_EQ(o.to_f(), 1.2f);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(OperandTest, CreateInt) {
|
TEST_F(OperandTest, CreateInt) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user