diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt
index f9defd3e..8cae1acd 100644
--- a/src/cmd/CMakeLists.txt
+++ b/src/cmd/CMakeLists.txt
@@ -14,5 +14,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
+add_subdirectory(core)
add_subdirectory(synergyc)
add_subdirectory(synergys)
diff --git a/src/cmd/core/CMakeLists.txt b/src/cmd/core/CMakeLists.txt
new file mode 100644
index 00000000..dfd1ea04
--- /dev/null
+++ b/src/cmd/core/CMakeLists.txt
@@ -0,0 +1,23 @@
+# synergy -- mouse and keyboard sharing utility
+# Copyright (C) 2012-2016 Symless Ltd.
+# Copyright (C) 2009 Nick Bolton
+#
+# This package is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# found in the file LICENSE that should have accompanied this file.
+#
+# This package is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+set(sources
+ main.cpp
+)
+
+add_executable(synergy-core ${sources})
+target_link_libraries(synergy-core
+ arch base client common io mt net ipc platform server core ${libs} ${OPENSSL_LIBS})
diff --git a/src/cmd/core/main.cpp b/src/cmd/core/main.cpp
new file mode 100644
index 00000000..88e0ec72
--- /dev/null
+++ b/src/cmd/core/main.cpp
@@ -0,0 +1,61 @@
+/*
+ * synergy -- mouse and keyboard sharing utility
+ * Copyright (C) 2012-2016 Symless Ltd.
+ * Copyright (C) 2002 Chris Schoeneman
+ *
+ * This package is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * found in the file LICENSE that should have accompanied this file.
+ *
+ * This package is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "core/ClientApp.h"
+#include "core/ServerApp.h"
+#include "arch/Arch.h"
+#include "base/Log.h"
+#include "base/EventQueue.h"
+
+#include
+
+int
+main(int argc, char** argv)
+{
+ // TODO: use existing arg parse code
+ bool server, client;
+ if (argc > 1) {
+ server = std::string(argv[1]) == "--server";
+ client = std::string(argv[1]) == "--client";
+ }
+
+#if SYSAPI_WIN32
+ // record window instance for tray icon, etc
+ ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL));
+#endif
+
+ Arch arch;
+ arch.init();
+
+ Log log;
+ EventQueue events;
+
+ if (server) {
+ ServerApp app(&events);
+ return app.run(argc, argv);
+ }
+ else if (client) {
+ ClientApp app(&events);
+ return app.run(argc, argv);
+ }
+ else {
+ // TODO: use common error code
+ std::cerr << "error: use --client or --server args" << std::endl;
+ return 1;
+ }
+}