diff options
author | Wohlstand <admin@wohlnet.ru> | 2017-11-13 04:52:25 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2017-11-13 04:52:25 +0300 |
commit | 9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d (patch) | |
tree | 82aad257a3e9c0ae03cdee4e9b867eb42e92bffd /cmake | |
parent | b043032a89f38e2b3191a65dab9ae4e8202d48f3 (diff) | |
download | libADLMIDI-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.h | 140 | ||||
-rw-r--r-- | cmake/openwattcom-dos/custom-h/myset.h | 90 | ||||
-rwxr-xr-x | cmake/openwattcom-dos/ow-cmake.sh | 8 | ||||
-rw-r--r-- | cmake/openwattcom-dos/toolchain-ow.cmake | 4 | ||||
-rwxr-xr-x | cmake/openwattcom/ow-cmake.sh | 7 |
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 |