diff --git a/cmake/msbuild2cmake.cmake b/cmake/msbuild2cmake.cmake
index 0d29211ee2..e98814799d 100644
--- a/cmake/msbuild2cmake.cmake
+++ b/cmake/msbuild2cmake.cmake
@@ -42,7 +42,7 @@ function(check_msys output)
set(${output} FALSE PARENT_SCOPE)
endfunction()
-function(clean_project name path build_dir)
+function(clean_project build_dir)
if(EXISTS ${build_dir})
message(STATUS "Removing ${build_dir}")
file(REMOVE_RECURSE ${build_dir})
@@ -168,6 +168,7 @@ message("=> Build Type: ${CMAKE_BUILD_TYPE}")
message("=> Generator : ${REKO_COMPILER}")
message("=> Platform : ${REKO_PLATFORM}")
message("=> Target : ${TARGET}")
+message("=> Action : ${ACTION}")
message("")
set(REKO_SRC ${CMAKE_CURRENT_LIST_DIR}/../src)
\ No newline at end of file
diff --git a/src/BuildTargets/BuildTargets.csproj b/src/BuildTargets/BuildTargets.csproj
index eaf8036a74..98aa9737a5 100644
--- a/src/BuildTargets/BuildTargets.csproj
+++ b/src/BuildTargets/BuildTargets.csproj
@@ -9,11 +9,14 @@
+
$([System.IO.Path]::Combine($(ProjectDir), ..\reko.cmake))
+ $([System.IO.Path]::Combine($(ProjectDir), ..\distclean.cmake))
+
$([System.IO.Path]::Combine($(VSAPPIDDIR), CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe))
cmake
@@ -86,14 +89,9 @@
-
-
-
-
-
-
-
+
+
@@ -105,4 +103,9 @@
+
+
+
+
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e47ac36c3d..22a0146eb4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -380,26 +380,11 @@ elseif("${TARGET}" STREQUAL "gen_c2xml_sysv")
add_c2xml_target_sysv(gen_c2xml_sysv libc.so)
add_c2xml_target_sysv(gen_c2xml_sysv Xlib)
add_c2xml_target_sysv(gen_c2xml_sysv opengl)
-elseif("${TARGET}" STREQUAL "nativeproxy_clean")
- #
- # Create a new target to clean NativeProxy
- #
- add_custom_target(nativeproxy_clean
- COMMENT "Cleaning NativeProxy..."
- WORKING_DIRECTORY ${REKO_SRC}/Native
- COMMAND ${CMAKE_COMMAND}
- -DREKO_SRC=${REKO_SRC}
- -DREKO_ROOT=${REKO_SRC}/../
- -DREKO_PLATFORM=${REKO_PLATFORM}
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
- -DACTION=clean
- -P ${REKO_SRC}/Native/reko.cmake
- )
-elseif("${TARGET}" STREQUAL "nativeproxy_build")
+elseif("${TARGET}" STREQUAL "nativeproxy")
#
# Create a new target to build NativeProxy
#
- add_custom_target(nativeproxy_build
+ add_custom_target(nativeproxy
COMMENT "Building NativeProxy ..."
WORKING_DIRECTORY ${REKO_SRC}/Native
COMMAND ${CMAKE_COMMAND}
@@ -409,6 +394,7 @@ elseif("${TARGET}" STREQUAL "nativeproxy_build")
-DREKO_ROOT=${REKO_SRC}/../
-DREKO_PLATFORM=${REKO_PLATFORM}
-DREKO_COMPILER=${REKO_COMPILER}
+ -DACTION=${ACTION}
-P ${REKO_SRC}/Native/reko.cmake
)
elseif("${TARGET}" STREQUAL "git_hash")
diff --git a/src/Core/Core.csproj b/src/Core/Core.csproj
index c4142b7c5d..e6fc7cc9da 100644
--- a/src/Core/Core.csproj
+++ b/src/Core/Core.csproj
@@ -36,8 +36,25 @@
-
-
+
+
+
+
+
+
+ $(ProjectDir)..\BuildTargets\BuildTargets.csproj
+ git_hash
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Environments/OS2/OS2.csproj b/src/Environments/OS2/OS2.csproj
index b8e16a12fd..6159367e55 100644
--- a/src/Environments/OS2/OS2.csproj
+++ b/src/Environments/OS2/OS2.csproj
@@ -14,7 +14,23 @@
-
-
+
+
+
+
+
+ $(ProjectDir)..\..\BuildTargets\BuildTargets.csproj
+ gen_c2xml_os2
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Environments/SysV/SysV.csproj b/src/Environments/SysV/SysV.csproj
index 3c3e087c56..3bd3104b20 100644
--- a/src/Environments/SysV/SysV.csproj
+++ b/src/Environments/SysV/SysV.csproj
@@ -17,7 +17,23 @@
-
-
+
+
+
+
+
+ $(ProjectDir)..\..\BuildTargets\BuildTargets.csproj
+ gen_c2xml_sysv
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Environments/Windows/Windows.csproj b/src/Environments/Windows/Windows.csproj
index 9f1028eba2..bf51675251 100644
--- a/src/Environments/Windows/Windows.csproj
+++ b/src/Environments/Windows/Windows.csproj
@@ -20,7 +20,23 @@
-
-
+
+
+
+
+
+ $(ProjectDir)..\..\BuildTargets\BuildTargets.csproj
+ gen_c2xml_windows
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Installers/Runtime/Runtime.csproj b/src/Installers/Runtime/Runtime.csproj
index c452353ed1..0629336195 100644
--- a/src/Installers/Runtime/Runtime.csproj
+++ b/src/Installers/Runtime/Runtime.csproj
@@ -23,8 +23,24 @@
-
+
+
+
+
+
+ $(ProjectDir)..\..\BuildTargets\BuildTargets.csproj
+ update_runtime_nuspec
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/Native/NativeProxy.csproj b/src/Native/NativeProxy.csproj
index 765bc9df41..f2e50f63f5 100755
--- a/src/Native/NativeProxy.csproj
+++ b/src/Native/NativeProxy.csproj
@@ -16,15 +16,29 @@
-
-
+
+
+
+
+
+ $(ProjectDir)..\BuildTargets\BuildTargets.csproj
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
diff --git a/src/Native/reko.cmake b/src/Native/reko.cmake
index 98346b24f8..e9011daad6 100644
--- a/src/Native/reko.cmake
+++ b/src/Native/reko.cmake
@@ -3,12 +3,18 @@ list(INSERT CMAKE_MODULE_PATH 0 "${REKO_SRC}/../cmake")
include(msbuild2cmake)
-message(STATUS "Building native libraries")
-invoke_cmake(
- BUILD_DIR ${CMAKE_BINARY_DIR}/build/${REKO_PLATFORM}/${CMAKE_BUILD_TYPE}
- DIRECTORY ${CMAKE_SOURCE_DIR}
- GENERATOR ${REKO_COMPILER}
- EXTRA_ARGUMENTS
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
- -DREKO_PLATFORM=${REKO_PLATFORM}
-)
\ No newline at end of file
+set(BUILD_DIR ${CMAKE_BINARY_DIR}/build/${REKO_PLATFORM}/${CMAKE_BUILD_TYPE})
+
+if(ACTION STREQUAL "clean")
+ clean_project(${BUILD_DIR})
+else()
+ message(STATUS "Building native libraries")
+ invoke_cmake(
+ BUILD_DIR ${BUILD_DIR}
+ DIRECTORY ${CMAKE_SOURCE_DIR}
+ GENERATOR ${REKO_COMPILER}
+ EXTRA_ARGUMENTS
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DREKO_PLATFORM=${REKO_PLATFORM}
+ )
+endif()
diff --git a/src/distclean.cmake b/src/distclean.cmake
new file mode 100644
index 0000000000..b5a1c1915e
--- /dev/null
+++ b/src/distclean.cmake
@@ -0,0 +1,34 @@
+set(REKO_SRC ${CMAKE_CURRENT_LIST_DIR})
+list(INSERT CMAKE_MODULE_PATH 0 "${REKO_SRC}/../cmake")
+include(FindDotNet)
+
+macro(rmrf path)
+ message("=> rm -r ${path}")
+ file(REMOVE_RECURSE "${path}")
+endmacro()
+
+execute_process(
+ COMMAND ${DOTNET_EXE} clean
+ COMMAND_ERROR_IS_FATAL ANY
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+)
+
+file(GLOB_RECURSE CANDIDATES
+ LIST_DIRECTORIES TRUE
+ ${REKO_SRC}/**/bin
+ ${REKO_SRC}/**/obj
+)
+
+foreach(path IN LISTS CANDIDATES)
+ if(NOT IS_DIRECTORY "${path}"
+ OR NOT path MATCHES "/(bin|obj)$")
+ continue()
+ endif()
+ rmrf("${path}")
+endforeach()
+
+set(REKO_CMAKE_BUILD_TARGETS ${REKO_SRC}/BuildTargets/build)
+
+if(IS_DIRECTORY ${REKO_CMAKE_BUILD_TARGETS})
+ rmrf(${REKO_CMAKE_BUILD_TARGETS})
+endif()
\ No newline at end of file
diff --git a/src/reko.cmake b/src/reko.cmake
index e0008de3e2..2ca4b72c8c 100644
--- a/src/reko.cmake
+++ b/src/reko.cmake
@@ -18,11 +18,17 @@ if("${TARGET}" STREQUAL "git_hash")
endif()
-invoke_cmake(
- BUILD_DIR ${CMAKE_BINARY_DIR}/build/${TARGET}
- DIRECTORY ${REKO_SRC}/../
- TARGET ${TARGET}
- GENERATOR ${REKO_COMPILER}
- # variables needed by CMakeLists.txt, that must be forwarded
- EXTRA_ARGUMENTS ${cmake_arguments}
-)
\ No newline at end of file
+set(BUILD_DIR ${CMAKE_BINARY_DIR}/build/${TARGET})
+
+if(ACTION STREQUAL clean)
+ clean_project(${BUILD_DIR})
+else()
+ invoke_cmake(
+ BUILD_DIR ${BUILD_DIR}
+ DIRECTORY ${REKO_SRC}/../
+ TARGET ${TARGET}
+ GENERATOR ${REKO_COMPILER}
+ # variables needed by CMakeLists.txt, that must be forwarded
+ EXTRA_ARGUMENTS ${cmake_arguments}
+ )
+endif()
\ No newline at end of file