Переглянути джерело

Fixed bugreport:5990 OSX compiling error / warnings

Bug in Detail:
 - Misplaced LDFLAGS uage in some Makefile templates (by passing them to the compiler not to the linker.)
 - Wrong usage of volatile (a functions return value couldnt be declared to return volatile :D )
 - Unsupported Inline ASM using lock xchg operation on llvm-gcc .. (apple loves this ..)

Fixed by:
 - Removed unnecessary LDFLAGS 
 - Removed unnecessary volatile declarator
 - Replaced InterlockedExchange and InterlockedExchange64 with gcc intrinsics. 



git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16270 54d463be-8e91-2dee-dedb-b68131a5f0ec
blacksirius 13 роки тому
батько
коміт
b3b21e6e8c

+ 1 - 1
3rdparty/libconfig/Makefile.in

@@ -23,4 +23,4 @@ help:
 
 %.o: %.c $(LIBCONFIG_H)
 	@echo "	CC	$<"
-	@@CC@ @CFLAGS@ @DEFS@ @LDFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
+	@@CC@ @CFLAGS@ @DEFS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<

+ 1 - 1
3rdparty/mt19937ar/Makefile.in

@@ -23,4 +23,4 @@ help:
 
 %.o: %.c $(MT19937AR_H)
 	@echo "	CC	$<"
-	@@CC@ @CFLAGS@ @LDFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
+	@@CC@ @CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<

+ 2 - 2
src/common/Makefile.in

@@ -83,11 +83,11 @@ common_sql: obj_sql $(COMMON_SQL_OBJ) obj_sql/common_sql.a
 
 obj_all/%.o: %.c $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H)
 	@echo "	CC	$<"
-	@@CC@ @CFLAGS@ $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) @LDFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
+	@@CC@ @CFLAGS@ $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
 
 obj_all/mini%.o: %.c $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H)
 	@echo "	CC	$<"
-	@@CC@ @CFLAGS@ $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) -DMINICORE @LDFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
+	@@CC@ @CFLAGS@ $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) -DMINICORE @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
 
 obj_sql/%.o: %.c $(COMMON_H) $(COMMON_SQL_H) $(LIBCONFIG_H)
 	@echo "	CC	$<"

+ 13 - 31
src/common/atomic.h

@@ -86,71 +86,53 @@ forceinline volatile int64 InterlockedExchange64(volatile int64 *target, int64 v
 #error Your Target Platfrom is not supported
 #endif
 
-static forceinline volatile int64 InterlockedExchangeAdd64(volatile int64 *addend, int64 increment){
+static forceinline int64 InterlockedExchangeAdd64(volatile int64 *addend, int64 increment){
 	return __sync_fetch_and_add(addend, increment);
 }//end: InterlockedExchangeAdd64()
 
 
-static forceinline volatile int32 InterlockedExchangeAdd(volatile int32 *addend, int32 increment){
+static forceinline int32 InterlockedExchangeAdd(volatile int32 *addend, int32 increment){
 	return __sync_fetch_and_add(addend, increment);
 }//end: InterlockedExchangeAdd()
 
 
-static forceinline volatile int64 InterlockedIncrement64(volatile int64 *addend){
+static forceinline int64 InterlockedIncrement64(volatile int64 *addend){
 	return __sync_add_and_fetch(addend, 1);
 }//end: InterlockedIncrement64()
 
 
-static forceinline volatile int32 InterlockedIncrement(volatile int32 *addend){
+static forceinline int32 InterlockedIncrement(volatile int32 *addend){
         return __sync_add_and_fetch(addend, 1);
 }//end: InterlockedIncrement()
 
 
-static forceinline volatile int64 InterlockedDecrement64(volatile int64 *addend){
+static forceinline int64 InterlockedDecrement64(volatile int64 *addend){
 	return __sync_sub_and_fetch(addend, 1);
 }//end: InterlockedDecrement64()
 
 
-static forceinline volatile int32 InterlockedDecrement(volatile int32 *addend){
+static forceinline int32 InterlockedDecrement(volatile int32 *addend){
 	return __sync_sub_and_fetch(addend, 1);
 }//end: InterlockedDecrement()
 
 
-static forceinline volatile int64 InterlockedCompareExchange64(volatile int64 *dest, int64 exch, int64 cmp){
+static forceinline int64 InterlockedCompareExchange64(volatile int64 *dest, int64 exch, int64 cmp){
 	return __sync_val_compare_and_swap(dest, cmp, exch);
 }//end: InterlockedCompareExchange64()
 
 
-static forceinline volatile int32 InterlockedCompareExchange(volatile int32 *dest, int32 exch, int32 cmp){
-        return __sync_val_compare_and_swap(dest, cmp, exch);
+static forceinline int32 InterlockedCompareExchange(volatile int32 *dest, int32 exch, int32 cmp){
+	return __sync_val_compare_and_swap(dest, cmp, exch);
 }//end: InterlockedCompareExchnage()
 
 
-static forceinline volatile int64 InterlockedExchange64(volatile int64 *target, int64 val){
-	int ret;
-	
-	__asm__ __volatile__(
-		"lock xchg %2, (%1)"
-		:"=r" (ret)
-		:"r" (target), "0" (val)
-		:"memory"
-	);
-	
-	return ret;
+static forceinline int64 InterlockedExchange64(volatile int64 *target, int64 val){
+	return __sync_lock_test_and_set(target, val);
 }//end: InterlockedExchange64()
 
 
-static forceinline volatile int32 InterlockedExchange(volatile int32 *target, int32 val){
-	int ret;
-	
-	__asm__ __volatile__(
-		"lock xchgl %2, (%1)"
-		:"=r" (ret)
-		:"r" (target), "0" (val)
-		:"memory"
-	);
-	
-	return ret;
+static forceinline int32 InterlockedExchange(volatile int32 *target, int32 val){
+    return __sync_lock_test_and_set(target, val);
 }//end: InterlockedExchange()
 
 

+ 1 - 1
src/tool/Makefile.in

@@ -44,7 +44,7 @@ obj_all:
 
 obj_all/%.o: %.c $(COMMON_H) $(LIBCONFIG_H)
 	@echo "	CC	$<"
-	@@CC@ @CFLAGS@ $(LIBCONFIG_INCLUDE) @LDFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
+	@@CC@ @CFLAGS@ $(LIBCONFIG_INCLUDE) @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
 
 # missing common object files
 ../common/obj_all/%.o: