Browse Source

CMake: Merge all AnKi libs to a single one. This will improve build times a bit

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
e4ddc0273e

+ 27 - 15
CMakeLists.txt

@@ -12,6 +12,14 @@ macro(installExecutable exe)
 		COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${exe}> ${CMAKE_BINARY_DIR}/bin)
 		COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${exe}> ${CMAKE_BINARY_DIR}/bin)
 endmacro()
 endmacro()
 
 
+macro(addAnkiSourceFiles)
+	foreach(f ${ARGV})
+		set(AK_SOURCES "${AK_SOURCES} ${f}")
+	endforeach()
+
+	set(AK_SOURCES ${AK_SOURCES} PARENT_SCOPE)
+endmacro()
+
 ################################################################################
 ################################################################################
 # Determin the system to build for. Do that first                              #
 # Determin the system to build for. Do that first                              #
 ################################################################################
 ################################################################################
@@ -361,22 +369,22 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -W -Wextra -Wstrict-alia
 # Set platform specific
 # Set platform specific
 if(LINUX)
 if(LINUX)
 	if(GL)
 	if(GL)
-		set(_SYS ${ANKI_GR_BACKEND} ankiglew)
+		set(THIRD_PARTY_LIBS ${ANKI_GR_BACKEND} ankiglew)
 	else()
 	else()
-		set(_SYS vulkan)
+		set(THIRD_PARTY_LIBS vulkan)
 		if(SDL)
 		if(SDL)
-			set(_SYS ${_SYS} X11-xcb)
+			set(THIRD_PARTY_LIBS ${THIRD_PARTY_LIBS} X11-xcb)
 		else()
 		else()
 			message(FATAL_ERROR "Unhandled case")
 			message(FATAL_ERROR "Unhandled case")
 		endif()
 		endif()
 	endif()
 	endif()
 
 
-	set(_SYS ${_SYS} pthread dl)
+	set(THIRD_PARTY_LIBS ${THIRD_PARTY_LIBS} pthread dl)
 elseif(MACOS)
 elseif(MACOS)
 	find_package(OpenGL REQUIRED)
 	find_package(OpenGL REQUIRED)
-	set(_SYS ${OPENGL_LIBRARIES} ankiglew pthread)
+	set(THIRD_PARTY_LIBS ${OPENGL_LIBRARIES} ankiglew pthread)
 elseif(ANDROID)
 elseif(ANDROID)
-	set(_SYS GLESv3 EGL log android)
+	set(THIRD_PARTY_LIBS GLESv3 EGL log android)
 	include_directories("${ANDROID_NDK}/sources/android/native_app_glue")
 	include_directories("${ANDROID_NDK}/sources/android/native_app_glue")
 	set(_SYS_SRC "${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c")
 	set(_SYS_SRC "${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c")
 elseif(WINDOWS)
 elseif(WINDOWS)
@@ -388,28 +396,31 @@ elseif(WINDOWS)
 		endif()
 		endif()
 
 
 		link_directories($ENV{VULKAN_SDK}/Bin)
 		link_directories($ENV{VULKAN_SDK}/Bin)
-		set(_SYS vulkan-1)
+		set(THIRD_PARTY_LIBS vulkan-1)
 	endif()
 	endif()
 
 
-	set(_SYS ${_SYS} version Imm32 Winmm DbgHelp)
+	set(THIRD_PARTY_LIBS ${THIRD_PARTY_LIBS} version Imm32 Winmm DbgHelp)
 else()
 else()
 	message(FATAL_ERROR "Unhandled case")
 	message(FATAL_ERROR "Unhandled case")
 endif()
 endif()
 
 
-link_directories(${FREETYPE_INSTALL_DIR}/lib)
+if(SDL)
+	set(THIRD_PARTY_LIBS ${THIRD_PARTY_LIBS} SDL2-static)
+endif()
+
+if(VULKAN)
+	set(THIRD_PARTY_LIBS ${THIRD_PARTY_LIBS} glslang SPIRV HLSL OGLCompiler OSDependent ankispirvcross)
+endif()
 
 
 # Add anki sub libraries
 # Add anki sub libraries
 set(ANKI_SUB_DIRS core script renderer scene ui event input physics resource misc gr collision math util)
 set(ANKI_SUB_DIRS core script renderer scene ui event input physics resource misc gr collision math util)
-set(ANKI_LIBS "")
-
 foreach(TMP ${ANKI_SUB_DIRS})
 foreach(TMP ${ANKI_SUB_DIRS})
 	add_subdirectory(src/anki/${TMP})
 	add_subdirectory(src/anki/${TMP})
-	set(ANKI_LIBS ${ANKI_LIBS} anki${TMP})
 endforeach()
 endforeach()
 
 
-add_library(anki src/anki/Dummy.cpp "${_SYS_SRC}")
-
-target_link_libraries(anki ${ANKI_LIBS} ankitinyxml2 ankilua ankiz ${_SYS})
+separate_arguments(AK_SOURCES)
+add_library(anki ${AK_SOURCES})
+target_link_libraries(anki ankitinyxml2 ankilua ankiz ankinewton ${THIRD_PARTY_LIBS})
 
 
 ################################################################################
 ################################################################################
 # AnKi extra                                                                   #
 # AnKi extra                                                                   #
@@ -433,3 +444,4 @@ endif()
 if(ANKI_BUILD_BENCH)
 if(ANKI_BUILD_BENCH)
 	add_subdirectory(bench)
 	add_subdirectory(bench)
 endif()
 endif()
+

+ 2 - 5
src/anki/collision/CMakeLists.txt

@@ -1,5 +1,2 @@
-file(GLOB ANKI_CLN_SOURCES *.cpp)
-file(GLOB ANKI_CLN_HEADERS *.h)
-
-add_library(ankicollision ${ANKI_CLN_SOURCES} ${ANKI_CLN_HEADERS})
-target_link_libraries(ankicollision ankimath)
+file(GLOB SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 5 - 9
src/anki/core/CMakeLists.txt

@@ -1,15 +1,11 @@
-set(ANKI_CORE_SOURCES App.cpp StdinListener.cpp Config.cpp Trace.cpp StagingGpuMemoryManager.cpp)
+set(SOURCES App.cpp StdinListener.cpp Config.cpp Trace.cpp StagingGpuMemoryManager.cpp)
 
 
 if(SDL)
 if(SDL)
-	set(ANKI_CORE_SOURCES ${ANKI_CORE_SOURCES} NativeWindowSdl.cpp)
+	set(SOURCES ${SOURCES} NativeWindowSdl.cpp)
 else()
 else()
 	message(FATAL_ERROR "Not implemented")
 	message(FATAL_ERROR "Not implemented")
 endif()
 endif()
 
 
-add_library(ankicore ${ANKI_CORE_SOURCES})
-
-target_link_libraries(ankicore ankiscript ankirenderer ankiscene ankiresource ankiinput ankimisc ankiutil)
-
-if(SDL)
-	target_link_libraries(ankicore SDL2-static)
-endif()
+foreach(S ${SOURCES})
+	addAnkiSourceFiles("${CMAKE_CURRENT_SOURCE_DIR}/${S}")
+endforeach()

+ 2 - 4
src/anki/event/CMakeLists.txt

@@ -1,4 +1,2 @@
-FILE(GLOB ANKI_EVENT_SOURCES *.cpp)
-FILE(GLOB ANKI_EVENT_HEADERS *.h)
-
-ADD_LIBRARY(ankievent ${ANKI_EVENT_SOURCES} ${ANKI_EVENT_HEADERS})
+file(GLOB SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 4 - 13
src/anki/gr/CMakeLists.txt

@@ -1,21 +1,12 @@
-file(GLOB ANKI_GR_SOURCES *.cpp common/*.cpp)
+file(GLOB SOURCES *.cpp common/*.cpp)
 
 
 if(GL)
 if(GL)
 	set(GR_BACKEND "gl")
 	set(GR_BACKEND "gl")
-	set(EXTRA_LIBS "")
 else()
 else()
 	set(GR_BACKEND "vulkan")
 	set(GR_BACKEND "vulkan")
-	set(EXTRA_LIBS glslang SPIRV HLSL OGLCompiler OSDependent ankispirvcross)
 endif()
 endif()
 
 
-file(GLOB ANKI_GR_BACKEND_SOURCES ${GR_BACKEND}/*.cpp)
-list(REMOVE_ITEM ANKI_GR_BACKEND_SOURCES "${GR_BACKEND}/GrManagerImplSdl.cpp")
+file(GLOB GR_BACKEND_SOURCES ${GR_BACKEND}/*.cpp)
 
 
-if(SDL)
-	set(ANKI_GR_BACKEND_SOURCES ${ANKI_GR_BACKEND_SOURCES} "${GR_BACKEND}/GrManagerImplSdl.cpp")
-else()
-	message(FATAL "Missing backend")
-endif()
-
-add_library(ankigr ${ANKI_GR_SOURCES} ${ANKI_GR_BACKEND_SOURCES})
-target_link_libraries(ankigr ankiutil ${EXTRA_LIBS})
+addAnkiSourceFiles(${SOURCES})
+addAnkiSourceFiles(${GR_BACKEND_SOURCES})

+ 6 - 5
src/anki/input/CMakeLists.txt

@@ -1,10 +1,11 @@
-file(GLOB ANKI_INPUT_SOURCES Input.cpp)
+set(SOURCES Input.cpp)
 
 
 if(SDL)
 if(SDL)
-	set(ANKI_INPUT_SOURCES ${ANKI_INPUT_SOURCES} InputSdl.cpp)
+	set(SOURCES ${SOURCES} InputSdl.cpp)
 else()
 else()
-	set(ANKI_INPUT_SOURCES ${ANKI_INPUT_SOURCES} InputDummy.cpp)
+	set(SOURCES ${SOURCES} InputDummy.cpp)
 endif()
 endif()
 
 
-add_library(ankiinput ${ANKI_INPUT_SOURCES})
-target_link_libraries(ankiinput ankicore)
+foreach(F ${SOURCES})
+	addAnkiSourceFiles("${CMAKE_CURRENT_SOURCE_DIR}/${F}")
+endforeach()

+ 2 - 4
src/anki/math/CMakeLists.txt

@@ -1,4 +1,2 @@
-file(GLOB ANKI_M_SOURCES *.cpp)
-file(GLOB ANKI_M_HEADERS *.h)
-
-add_library(ankimath ${ANKI_M_SOURCES} ${ANKI_M_HEADERS})
+file(GLOB SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 2 - 4
src/anki/misc/CMakeLists.txt

@@ -1,4 +1,2 @@
-FILE(GLOB ANKI_MISC_SOURCES *.cpp)
-FILE(GLOB ANKI_MISC_HEADERS *.h)
-
-ADD_LIBRARY(ankimisc ${ANKI_MISC_SOURCES} ${ANKI_MISC_HEADERS})
+file(GLOB SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 2 - 6
src/anki/physics/CMakeLists.txt

@@ -1,6 +1,2 @@
-file(GLOB ANKI_PHYS_SOURCES *.cpp)
-file(GLOB ANKI_PHYS_HEADERS *.h)
-
-add_library(ankiphysics ${ANKI_PHYS_SOURCES} ${ANKI_PHYS_HEADERS})
-target_link_libraries(ankiphysics ankinewton)
-
+file(GLOB SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 2 - 5
src/anki/renderer/CMakeLists.txt

@@ -1,5 +1,2 @@
-file(GLOB_RECURSE ANKI_R_SOURCES *.cpp)
-file(GLOB_RECURSE ANKI_R_HEADERS *.h)
-
-add_library(ankirenderer ${ANKI_R_SOURCES} ${ANKI_R_HEADERS})
-target_link_libraries(ankirenderer ankicore ankiutil ankiresource)
+file(GLOB_RECURSE SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 2 - 5
src/anki/resource/CMakeLists.txt

@@ -1,5 +1,2 @@
-file(GLOB_RECURSE ANKI_RSRC_SOURCES *.cpp)
-file(GLOB_RECURSE ANKI_RSRC_HEADERS *.h)
-
-add_library(ankiresource ${ANKI_RSRC_SOURCES} ${ANKI_RSRC_HEADERS})
-target_link_libraries(ankiresource ankiphysics ankigr)
+file(GLOB_RECURSE SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 2 - 6
src/anki/scene/CMakeLists.txt

@@ -1,6 +1,2 @@
-file(GLOB_RECURSE ANKI_SCENE_SOURCES *.cpp)
-file(GLOB_RECURSE ANKI_SCENE_HEADERS *.h)
-
-add_library(ankiscene ${ANKI_SCENE_SOURCES} ${ANKI_SCENE_HEADERS})
-
-target_link_libraries(ankiscene ankievent)
+file(GLOB_RECURSE SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 2 - 7
src/anki/script/CMakeLists.txt

@@ -1,7 +1,2 @@
-file(GLOB_RECURSE ANKI_SCRIPT_SOURCES *.cpp)
-file(GLOB_RECURSE ANKI_SCRIPT_HEADERS *.h)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-add_library(ankiscript ${ANKI_SCRIPT_SOURCES} ${ANKI_SCRIPT_HEADERS})
-target_link_libraries(ankiscript ankirenderer ankiscene ankimath)
+file(GLOB_RECURSE SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 2 - 4
src/anki/ui/CMakeLists.txt

@@ -1,4 +1,2 @@
-file(GLOB ANKI_UI_SOURCES *.cpp)
-
-add_library(ankiui ${ANKI_UI_SOURCES})
-target_link_libraries(ankiui ankiresource freetype)
+file(GLOB SOURCES *.cpp)
+addAnkiSourceFiles(${SOURCES})

+ 8 - 6
src/anki/util/CMakeLists.txt

@@ -1,15 +1,17 @@
-set(ANKI_UTIL_SOURCES Assert.cpp Functions.cpp File.cpp Filesystem.cpp Memory.cpp System.cpp HighRezTimer.cpp ThreadPool.cpp ThreadHive.cpp Hash.cpp Logger.cpp String.cpp StringList.cpp)
+set(SOURCES Assert.cpp Functions.cpp File.cpp Filesystem.cpp Memory.cpp System.cpp HighRezTimer.cpp ThreadPool.cpp ThreadHive.cpp Hash.cpp Logger.cpp String.cpp StringList.cpp)
 
 
 if(LINUX OR ANDROID OR MACOS)
 if(LINUX OR ANDROID OR MACOS)
-	set(ANKI_UTIL_SOURCES ${ANKI_UTIL_SOURCES} HighRezTimerPosix.cpp FilesystemPosix.cpp ThreadPosix.cpp)
+	set(SOURCES ${SOURCES} HighRezTimerPosix.cpp FilesystemPosix.cpp ThreadPosix.cpp)
 else()
 else()
-	set(ANKI_UTIL_SOURCES ${ANKI_UTIL_SOURCES} HighRezTimerWindows.cpp FilesystemWindows.cpp ThreadWindows.cpp)
+	set(SOURCES ${SOURCES} HighRezTimerWindows.cpp FilesystemWindows.cpp ThreadWindows.cpp)
 endif()
 endif()
 
 
 if(LINUX)
 if(LINUX)
-	set(ANKI_UTIL_SOURCES ${ANKI_UTIL_SOURCES} INotifyLinux.cpp)
+	set(SOURCES ${SOURCES} INotifyLinux.cpp)
 elseif(WINDOWS)
 elseif(WINDOWS)
-	set(ANKI_UTIL_SOURCES ${ANKI_UTIL_SOURCES} INotifyWindows.cpp)
+	set(SOURCES ${SOURCES} INotifyWindows.cpp)
 endif()
 endif()
 
 
-add_library(ankiutil ${ANKI_UTIL_SOURCES})
+foreach(F ${SOURCES})
+	addAnkiSourceFiles("${CMAKE_CURRENT_SOURCE_DIR}/${F}")
+endforeach()