From 59fbb5c100b67da923f73d998eb7dad37df44e43 Mon Sep 17 00:00:00 2001
From: simon wu <wswday@sina.com>
Date: Sat, 13 Jul 2019 22:54:49 +0800
Subject: [PATCH] Fixing build-errors on Windows (#969)

* Fixing build-errors on Windows (add some compile args, which are default on Linux)

* Fixing build-errors on Windows

* minor formatting

* Fixing errors on windows

1.Adding 'cxx' key for extra_compile_args
2.Adding type-cast to long for first parameter of THCCeilDiv facebookresearch/maskrcnn-benchmark#409
3.Ignoring resource setting on windows

* update the order of import statements
---
 mmdet/datasets/loader/build_loader.py         | 10 +++++----
 .../src/sigmoid_focal_loss_cuda.cu            |  4 ++--
 setup.py                                      | 21 +++++++++++++++----
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/mmdet/datasets/loader/build_loader.py b/mmdet/datasets/loader/build_loader.py
index 8759b061..18437137 100644
--- a/mmdet/datasets/loader/build_loader.py
+++ b/mmdet/datasets/loader/build_loader.py
@@ -1,3 +1,4 @@
+import platform
 from functools import partial
 
 from mmcv.runner import get_dist_info
@@ -6,10 +7,11 @@ from torch.utils.data import DataLoader
 
 from .sampler import GroupSampler, DistributedGroupSampler, DistributedSampler
 
-# https://github.com/pytorch/pytorch/issues/973
-import resource
-rlimit = resource.getrlimit(resource.RLIMIT_NOFILE)
-resource.setrlimit(resource.RLIMIT_NOFILE, (4096, rlimit[1]))
+if platform.system() != 'Windows':
+    # https://github.com/pytorch/pytorch/issues/973
+    import resource
+    rlimit = resource.getrlimit(resource.RLIMIT_NOFILE)
+    resource.setrlimit(resource.RLIMIT_NOFILE, (4096, rlimit[1]))
 
 
 def build_dataloader(dataset,
diff --git a/mmdet/ops/sigmoid_focal_loss/src/sigmoid_focal_loss_cuda.cu b/mmdet/ops/sigmoid_focal_loss/src/sigmoid_focal_loss_cuda.cu
index aa1e4b9d..7b9b8050 100644
--- a/mmdet/ops/sigmoid_focal_loss/src/sigmoid_focal_loss_cuda.cu
+++ b/mmdet/ops/sigmoid_focal_loss/src/sigmoid_focal_loss_cuda.cu
@@ -109,7 +109,7 @@ at::Tensor SigmoidFocalLoss_forward_cuda(const at::Tensor &logits,
   auto losses = at::empty({num_samples, logits.size(1)}, logits.options());
   auto losses_size = num_samples * logits.size(1);
 
-  dim3 grid(std::min(THCCeilDiv(losses_size, 512L), 4096L));
+  dim3 grid(std::min(THCCeilDiv((long)losses_size, 512L), 4096L));
   dim3 block(512);
 
   if (losses.numel() == 0) {
@@ -147,7 +147,7 @@ at::Tensor SigmoidFocalLoss_backward_cuda(const at::Tensor &logits,
   auto d_logits = at::zeros({num_samples, num_classes}, logits.options());
   auto d_logits_size = num_samples * logits.size(1);
 
-  dim3 grid(std::min(THCCeilDiv(d_logits_size, 512L), 4096L));
+  dim3 grid(std::min(THCCeilDiv((long)d_logits_size, 512L), 4096L));
   dim3 block(512);
 
   if (d_logits.numel() == 0) {
diff --git a/setup.py b/setup.py
index e40909a1..c0920d9b 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,5 @@
 import os
+import platform
 import subprocess
 import time
 from setuptools import Extension, find_packages, setup
@@ -88,18 +89,30 @@ def make_cuda_ext(name, module, sources):
 
     return CUDAExtension(
         name='{}.{}'.format(module, name),
-        sources=[os.path.join(*module.split('.'), p) for p in sources])
+        sources=[os.path.join(*module.split('.'), p) for p in sources],
+        extra_compile_args={
+            'cxx': [],
+            'nvcc': [
+                '-D__CUDA_NO_HALF_OPERATORS__',
+                '-D__CUDA_NO_HALF_CONVERSIONS__',
+                '-D__CUDA_NO_HALF2_OPERATORS__',
+            ]
+        })
 
 
 def make_cython_ext(name, module, sources):
+    extra_compile_args = None
+    if platform.system() != 'Windows':
+        extra_compile_args = {
+            'cxx': ['-Wno-unused-function', '-Wno-write-strings']
+        }
+
     extension = Extension(
         '{}.{}'.format(module, name),
         [os.path.join(*module.split('.'), p) for p in sources],
         include_dirs=[np.get_include()],
         language='c++',
-        extra_compile_args={
-            'cxx': ['-Wno-unused-function', '-Wno-write-strings']
-        })
+        extra_compile_args=extra_compile_args)
     extension, = cythonize(extension)
     return extension
 
-- 
GitLab