richgel999 / lzham_codec

Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster decompression speed, C/C++
Other
693 stars 71 forks source link

Compiling for Mac OSX 10.10 Yosemite failed: "error: expected unqualified-id" #6

Closed lolo32 closed 9 years ago

lolo32 commented 9 years ago

I'm trying to compile it, revision 4ed83a3, on Mac OSX, and I got the error "error: expected unqualified-id"

Here are the steps I done:

$ mkdir build
$ cd build
$ cmake ..
$ make

I got an error when the first file is being compiled. Compilation message following:

[  5%] Building CXX object lzhamdecomp/CMakeFiles/lzhamdecomp.dir/lzham_assert.cpp.o
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:260:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:132:15: error: expected unqualified-id
         if ( LZHAM_HAS_DESTRUCTOR(T) )
              ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:82:64: note: expanded from macro 'LZHAM_HAS_DESTRUCTOR'
#define LZHAM_HAS_DESTRUCTOR(T) ((!scalar_type<T>::cFlag) && (!LZHAM_IS_POD(T)))
                                                               ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:71:33: note: expanded from macro 'LZHAM_IS_POD'
   #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
                                ^
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:264:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_vector.h:56:14: error: expected unqualified-id
         if (LZHAM_IS_BITWISE_COPYABLE(T))
             ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:78:98: note: expanded from macro 'LZHAM_IS_BITWISE_COPYABLE'
#define LZHAM_IS_BITWISE_COPYABLE(T) ((scalar_type<T>::cFlag) || (bitwise_copyable<T>::cFlag) || LZHAM_IS_POD(T))
                                                                                                 ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:71:33: note: expanded from macro 'LZHAM_IS_POD'
   #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
                                ^
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:264:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_vector.h:101:14: error: expected unqualified-id
         if (LZHAM_IS_BITWISE_COPYABLE(T))
             ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:78:98: note: expanded from macro 'LZHAM_IS_BITWISE_COPYABLE'
#define LZHAM_IS_BITWISE_COPYABLE(T) ((scalar_type<T>::cFlag) || (bitwise_copyable<T>::cFlag) || LZHAM_IS_POD(T))
                                                                                                 ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:71:33: note: expanded from macro 'LZHAM_IS_POD'
   #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
                                ^
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:264:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_vector.h:257:17: error: expected unqualified-id
            if (LZHAM_IS_BITWISE_COPYABLE(T))
                ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:78:98: note: expanded from macro 'LZHAM_IS_BITWISE_COPYABLE'
#define LZHAM_IS_BITWISE_COPYABLE(T) ((scalar_type<T>::cFlag) || (bitwise_copyable<T>::cFlag) || LZHAM_IS_POD(T))
                                                                                                 ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:71:33: note: expanded from macro 'LZHAM_IS_POD'
   #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
                                ^
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:264:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_vector.h:274:14: error: expected unqualified-id
         if (LZHAM_IS_BITWISE_COPYABLE(T))
             ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:78:98: note: expanded from macro 'LZHAM_IS_BITWISE_COPYABLE'
#define LZHAM_IS_BITWISE_COPYABLE(T) ((scalar_type<T>::cFlag) || (bitwise_copyable<T>::cFlag) || LZHAM_IS_POD(T))
                                                                                                 ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:71:33: note: expanded from macro 'LZHAM_IS_POD'
   #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
                                ^
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:264:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_vector.h:323:14: error: expected unqualified-id
         if (LZHAM_IS_BITWISE_COPYABLE(T))
             ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:78:98: note: expanded from macro 'LZHAM_IS_BITWISE_COPYABLE'
#define LZHAM_IS_BITWISE_COPYABLE(T) ((scalar_type<T>::cFlag) || (bitwise_copyable<T>::cFlag) || LZHAM_IS_POD(T))
                                                                                                 ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:71:33: note: expanded from macro 'LZHAM_IS_POD'
   #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
                                ^
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:264:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_vector.h:573:14: error: expected unqualified-id
            (LZHAM_IS_BITWISE_MOVABLE(T) || (is_vector<T>::cFlag)) ? NULL : object_mover, nofail);
             ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:80:38: note: expanded from macro 'LZHAM_IS_BITWISE_MOVABLE'
#define LZHAM_IS_BITWISE_MOVABLE(T) (LZHAM_IS_BITWISE_COPYABLE(T) || (bitwise_movable<T>::cFlag))
                                     ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:78:98: note: expanded from macro 'LZHAM_IS_BITWISE_COPYABLE'
#define LZHAM_IS_BITWISE_COPYABLE(T) ((scalar_type<T>::cFlag) || (bitwise_copyable<T>::cFlag) || LZHAM_IS_POD(T))
                                                                                                 ^
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_traits.h:71:33: note: expanded from macro 'LZHAM_IS_POD'
   #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
                                ^
In file included from /lzham-git/lzhamdecomp/lzham_assert.cpp:3:
In file included from /lzham-git/lzhamdecomp/../lzhamdecomp/lzham_core.h:264:
/lzham-git/lzhamdecomp/../lzhamdecomp/lzham_vector.h:569:81: warning: unused parameter 'nofail' [-Wunused-parameter]
      inline bool increase_capacity(uint min_new_capacity, bool grow_hint, bool nofail = false)
                                                                                ^
1 warning and 7 errors generated.
make[2]: *** [lzhamdecomp/CMakeFiles/lzhamdecomp.dir/lzham_assert.cpp.o] Error 1
make[1]: *** [lzhamdecomp/CMakeFiles/lzhamdecomp.dir/all] Error 2
make: *** [all] Error 2

Here is my CMake cache, in advanced mode (all default or auto detected):

BUILD_SHARED_LIBS:BOOL=ON
BUILD_X64:BOOL=ON
CMAKE_AR:FILEPATH=/usr/bin/ar
CMAKE_BUILD_TYPE:STRING=
CMAKE_COLOR_MAKEFILE:BOOL=ON
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
CMAKE_CXX_FLAGS:STRING=
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc
CMAKE_C_FLAGS:STRING=
CMAKE_C_FLAGS_DEBUG:STRING=-g
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_EXE_LINKER_FLAGS:STRING= 
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF
CMAKE_INSTALL_NAME_TOOL:FILEPATH=/usr/bin/install_name_tool
CMAKE_INSTALL_PREFIX:PATH=/usr/local
CMAKE_LINKER:FILEPATH=/usr/bin/ld
CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
CMAKE_MODULE_LINKER_FLAGS:STRING= 
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_NM:FILEPATH=/usr/bin/nm
CMAKE_OBJCOPY:FILEPATH=CMAKE_OBJCOPY-NOTFOUND
CMAKE_OBJDUMP:FILEPATH=CMAKE_OBJDUMP-NOTFOUND
CMAKE_OSX_ARCHITECTURES:STRING=
CMAKE_OSX_DEPLOYMENT_TARGET:STRING=
CMAKE_OSX_SYSROOT:STRING=
CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
CMAKE_SHARED_LINKER_FLAGS:STRING= 
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_SKIP_INSTALL_RPATH:BOOL=OFF
CMAKE_SKIP_RPATH:BOOL=OFF
CMAKE_STATIC_LINKER_FLAGS:STRING=
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_STRIP:FILEPATH=/usr/bin/strip
CMAKE_USE_RELATIVE_PATHS:BOOL=OFF
CMAKE_VERBOSE_MAKEFILE:BOOL=OFF

Additional informations:

Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix
richgel999 commented 9 years ago

Thanks - Paul Lewis sent me this message a couple days ago, this might help. I'll look at this on OSX tonight.

I was able to get LZHAM to compile on OS X, but I had to make a couple modifications to the code:

In lzhamdecomp/lzham_platform.cpp, I had to change: asm {int 3} to: __asm("int $3");

In lzhamdecomp/lzham_traits.h, I had to change:

define LZHAM_IS_POD(T) std::__is_pod::__value

to:

define LZHAM_IS_POD(T) std::is_pod::value

(Otherwise, I got these errors about expecting unqualified-ids in clang)

Then, I was able to compile by running cmake -G Xcode and then xcodebuild.

When I compiled lzham and ran lzhamtest, I noticed that the decompression is single-threaded. Is making it multi-threaded a work-in-progress/possible, or is this just a limitation of the algorithm?

Thank you, Paul

lolo32 commented 9 years ago

I made the same modifications, and the patch following was born:

diff --git a/lzhamdecomp/lzham_platform.cpp b/lzhamdecomp/lzham_platform.cpp
index cd4f9dd..172dc60 100644
--- a/lzhamdecomp/lzham_platform.cpp
+++ b/lzhamdecomp/lzham_platform.cpp
@@ -62,7 +62,7 @@ void lzham_debug_break(void)
 #if LZHAM_USE_WIN32_API
    DebugBreak();
 #elif (TARGET_OS_MAC == 1) && (TARGET_IPHONE_SIMULATOR == 0) && (TARGET_OS_IPHONE == 0)
-   __asm {int 3}
+   __asm__("int $3");
 #else
    assert(0);
 #endif
diff --git a/lzhamdecomp/lzham_traits.h b/lzhamdecomp/lzham_traits.h
index cb0076c..d7ba871 100644
--- a/lzhamdecomp/lzham_traits.h
+++ b/lzhamdecomp/lzham_traits.h
@@ -67,7 +67,12 @@ namespace lzham
    // Defines type Q as bitwise copyable.
 #define LZHAM_DEFINE_BITWISE_COPYABLE(Q) template<> struct bitwise_copyable<Q> { enum { cFlag = true }; };

-#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__)
+#if defined(__APPLE__) && defined(__MACH__)
+   // Apple OSX and iOS
+   #include <TargetConditionals.h>
+#endif
+
+#if (defined(__APPLE__) &&  TARGET_OS_MAC != 1) || defined(__FreeBSD__) || defined(__NetBSD__)
    #define LZHAM_IS_POD(T) std::__is_pod<T>::__value
 #else
    #define LZHAM_IS_POD(T) __is_pod(T)
velkyel commented 9 years ago

@lolo32 it works. OSX and iOS, both. thanks