aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2017-11-13 04:52:25 +0300
committerWohlstand <admin@wohlnet.ru>2017-11-13 04:52:25 +0300
commit9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d (patch)
tree82aad257a3e9c0ae03cdee4e9b867eb42e92bffd /cmake
parentb043032a89f38e2b3191a65dab9ae4e8202d48f3 (diff)
downloadlibADLMIDI-9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d.tar.gz
libADLMIDI-9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d.tar.bz2
libADLMIDI-9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d.zip
Continue attempt to make library and demo player runnable under OpenWatcom
Because of broken STL containers, are very hard crashes in random places are can't be fixed with a full customizing of those containers.
Diffstat (limited to 'cmake')
-rw-r--r--cmake/openwattcom-dos/custom-h/mymap.h140
-rw-r--r--cmake/openwattcom-dos/custom-h/myset.h90
-rwxr-xr-xcmake/openwattcom-dos/ow-cmake.sh8
-rw-r--r--cmake/openwattcom-dos/toolchain-ow.cmake4
-rwxr-xr-xcmake/openwattcom/ow-cmake.sh7
5 files changed, 244 insertions, 5 deletions
diff --git a/cmake/openwattcom-dos/custom-h/mymap.h b/cmake/openwattcom-dos/custom-h/mymap.h
new file mode 100644
index 0000000..560621e
--- /dev/null
+++ b/cmake/openwattcom-dos/custom-h/mymap.h
@@ -0,0 +1,140 @@
+/*
+PtrList - A custom STD::Vector implementation. Workaround for OpenWatcom's crashing implementation
+
+Copyright (c) 2017 Vitaliy Novichkov <admin@wohlnet.ru>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef MYMAP_H
+#define MYMAP_H
+
+#include <vector>
+#include <utility>
+#include <cstdio>
+
+//WORKAROUND: use custom std::map implementation to avoid lots of crashes!!!
+#define _MAP_INCLUDED
+
+namespace std
+{
+
+template<class Key,
+ class Type,
+ class Allocator = allocator< pair<Key, Type > >,
+ class Implementation = vector< pair<Key, Type >, Allocator> >
+class map : public Implementation
+{
+public:
+ map() : Implementation() {}
+ ~map() {}
+
+ iterator find(const Key& val)
+ {
+ std::printf("std::map find\r\n");
+ std::fflush(stdout);
+
+ for(iterator it = begin(); it != end(); it++)
+ {
+ if(val == it->first)
+ return it;
+ }
+ return end();
+ }
+
+ map& operator=( map const & x )
+ {
+ std::printf("std::map operator=\r\n");
+ std::fflush(stdout);
+
+ Implementation::operator=( x ); return( *this );
+ }
+
+ Type& operator[](const Key &key)
+ {
+ std::printf("std::map operator[]\r\n");
+ std::fflush(stdout);
+
+ for(iterator it = begin(); it != end(); it++)
+ {
+ if(key == it->first)
+ return it->second;
+ }
+ return Implementation::insert(end(), pair<Key, Type>(key, Type()))->second;
+ }
+
+ pair<iterator, bool> insert(const pair<Key, Type> &val)
+ {
+ std::printf("std::map insert\r\n");
+ std::fflush(stdout);
+
+ bool found = false;
+ iterator f = find(val.first);
+ if(f != end())
+ {
+ f->second = val.second;
+ found = true;
+ }
+ else
+ {
+ f = Implementation::insert(end(), val);
+ }
+ return make_pair<iterator, bool>(f, found);
+ }
+
+ void erase(const iterator& val)
+ {
+ std::printf("std::map erase iterator\r\n");
+ std::fflush(stdout);
+
+ if(val != end())
+ Implementation::erase(val);
+ }
+
+ void erase(const Key& val)
+ {
+ std::printf("std::map erase key\r\n");
+ std::fflush(stdout);
+
+ iterator f = find(val);
+ if(f != end())
+ {
+ Implementation::erase(f);
+ }
+ }
+
+ //@{
+ /**
+ * @brief Finds the number of elements.
+ * @param __x Element to located.
+ * @return Number of elements with specified key.
+ *
+ * This function only makes sense for multisets; for set the result will
+ * either be 0 (not present) or 1 (present).
+ */
+ size_t
+ count(const Key& __x)
+ {
+ return find(__x) == Implementation::end() ? 0 : 1;
+ }
+};
+
+}
+
+#endif // MYMAP_H
diff --git a/cmake/openwattcom-dos/custom-h/myset.h b/cmake/openwattcom-dos/custom-h/myset.h
new file mode 100644
index 0000000..c5e581d
--- /dev/null
+++ b/cmake/openwattcom-dos/custom-h/myset.h
@@ -0,0 +1,90 @@
+/*
+PtrList - A custom STD::Vector implementation. Workaround for OpenWatcom's crashing implementation
+
+Copyright (c) 2017 Vitaliy Novichkov <admin@wohlnet.ru>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef MYSET_H
+#define MYSET_H
+
+#include <vector>
+
+//WORKAROUND: use custom vector implementation to avoid lots of crashes!!!
+#define _SET_INCLUDED
+//#define set MySet
+
+namespace std
+{
+
+template<class T, class Allocator = allocator< T >, class Implementation = vector<T, Allocator> >
+class set : public Implementation
+{
+public:
+ set() : Implementation() {}
+ ~set() {}
+
+ iterator find(const T& val)
+ {
+ for(iterator it = begin(); it != end(); it++)
+ {
+ if(val == *it)
+ return it;
+ }
+ return end();
+ }
+
+ void insert (const T& val)
+ {
+ iterator f = find(val);
+ if(f != end())
+ {
+ Implementation::insert(end(), val);
+ }
+ }
+
+ void erase(const T& val)
+ {
+ iterator f = find(val);
+ if(f != end())
+ {
+ Implementation::erase(f);
+ }
+ }
+
+ //@{
+ /**
+ * @brief Finds the number of elements.
+ * @param __x Element to located.
+ * @return Number of elements with specified key.
+ *
+ * This function only makes sense for multisets; for set the result will
+ * either be 0 (not present) or 1 (present).
+ */
+ size_t
+ count(const T& __x)
+ {
+ return find(__x) == Implementation::end() ? 0 : 1;
+ }
+};
+
+}
+
+#endif // MYSET_H
diff --git a/cmake/openwattcom-dos/ow-cmake.sh b/cmake/openwattcom-dos/ow-cmake.sh
index 921df11..60ebf6e 100755
--- a/cmake/openwattcom-dos/ow-cmake.sh
+++ b/cmake/openwattcom-dos/ow-cmake.sh
@@ -5,13 +5,17 @@ export WIPFC=$WATCOM/wipfc
export INCLUDE="$WATCOM/h"
WATCOM_FLAGS="-bdos4g -march=i386"
export CFLAGS="$WATCOM_FLAGS -xc -std=wc"
-export CXXFLAGS="$WATCOM_FLAGS -xc++ -xs -feh -std=c++11"
+export CXXFLAGS="$WATCOM_FLAGS -xc++ -xs -feh -frtti -std=c++98"
export LFLAGS="$WATCOM_FLAGS"
+SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
+echo "Path to script ${SCRIPTPATH}"
+
# export PKG_CONFIG_LIBDIR="${WATCOM}/lib/pkgconfig"
# djgpp_c_flags="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4"
-SCRIPT_PATH=$HOME/_git_repos/libADLMIDI/cmake/openwattcom-dos
+#SCRIPT_PATH=$HOME/_git_repos/libADLMIDI/cmake/openwattcom-dos
+SCRIPT_PATH=$SCRIPTPATH
CUSTOM_PATH=$SCRIPT_PATH:${WATCOM}/binl:$PATH
if [[ "$1" != '--build' ]]; then
diff --git a/cmake/openwattcom-dos/toolchain-ow.cmake b/cmake/openwattcom-dos/toolchain-ow.cmake
index 17fbd22..cff87e8 100644
--- a/cmake/openwattcom-dos/toolchain-ow.cmake
+++ b/cmake/openwattcom-dos/toolchain-ow.cmake
@@ -9,7 +9,7 @@ set (WATCOM_PREFIX "$ENV{HOME}/Qt/Tools/ow-snapshot-2.0")
set (ENV{PATH} ${WATCOM_PREFIX}/binl:$ENV{PATH})
set (ENV{WATCOM} ${WATCOM_PREFIX})
-set (ENV{INCLUDE} "${WATCOM_PREFIX}/lh")
+set (ENV{INCLUDE} "${WATCOM_PREFIX}/h:${CMAKE_CURRENT_LIST_DIR}/custom-h")
set (ENV{EDPATH} ${WATCOM_PREFIX}/eddat)
set (ENV{WIPFC} ${WATCOM_PREFIX}/wipfc)
@@ -27,7 +27,7 @@ set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-include_directories(${WATCOM_PREFIX}/lh)
+include_directories(${WATCOM_PREFIX}/h ${CMAKE_CURRENT_LIST_DIR}/custom-h)
# Make sure Qt can be detected by CMake
set (QT_BINARY_DIR ${WATCOM_PREFIX}/binl /usr/bin)
diff --git a/cmake/openwattcom/ow-cmake.sh b/cmake/openwattcom/ow-cmake.sh
index 2e6dbe5..00d048d 100755
--- a/cmake/openwattcom/ow-cmake.sh
+++ b/cmake/openwattcom/ow-cmake.sh
@@ -6,12 +6,17 @@ export INCLUDE="$WATCOM/lh"
WATCOM_FLAGS="-blinux"
export CFLAGS="$WATCOM_FLAGS -xc -std=wc"
export CXXFLAGS="$WATCOM_FLAGS -xc++ -xs -feh -std=c++11"
+export LFLAGS="$WATCOM_FLAGS"
+
+SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
+echo "Path to self ${SCRIPTPATH}"
# export PKG_CONFIG_LIBDIR="${WATCOM}/lib/pkgconfig"
# djgpp_c_flags="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4"
-SCRIPT_PATH=$HOME/_git_repos/libADLMIDI/cmake/openwattcom
+#SCRIPT_PATH=$HOME/_git_repos/libADLMIDI/cmake/openwattcom
+SCRIPT_PATH=$SCRIPTPATH
CUSTOM_PATH=$SCRIPT_PATH:${WATCOM}/binl:$PATH
if [[ "$1" != '--build' ]]; then