Skip to content

Commit 40cd6a5

Browse files
committed
CMake: only compile if needed & more parallel compilation
adjustment to spring commit: a896bf9decc3f435b03534fd96a2f065e40dfa9e
1 parent 920cd88 commit 40cd6a5

File tree

1 file changed

+82
-36
lines changed

1 file changed

+82
-36
lines changed

CMakeLists.txt

Lines changed: 82 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,41 @@
4949
CreateClasspath(myJavaLibs ${myJLibDir})
5050
ConcatClasspaths(myClassPath "${CLASSPATH_Java_AIINTERFACE}" "${myJavaLibs}" ${myAiSourceDir} ${myLoaderSourceDir} ${JavaOO_AIWRAPPER_JAR_CLASSPATH})
5151

52-
# Create a list of all the AIs source files
52+
# Create a list of all the AIs source files (for compiling)
5353
file(GLOB_RECURSE myLoaderSources RELATIVE "${myLoaderSourceDir}" FOLLOW_SYMLINKS "${myLoaderSourceDir}/*.java")
54-
file(GLOB_RECURSE myAiSources RELATIVE "${myAiSourceDir}" FOLLOW_SYMLINKS "${myAiSourceDir}/*.java")
54+
file(GLOB_RECURSE myAiSources RELATIVE "${myAiSourceDir}" FOLLOW_SYMLINKS "${myAiSourceDir}/*.java")
55+
# Create a list of all the AIs source files (for dependency tracking)
56+
file(GLOB_RECURSE myLoaderSourcesDep FOLLOW_SYMLINKS "${myLoaderSourceDir}/*.java")
57+
file(GLOB_RECURSE myAiSourcesDep FOLLOW_SYMLINKS "${myAiSourceDir}/*.java")
58+
59+
# Assemble project generated libraries we depend on
60+
set(myDependTargets "${Java_AIINTERFACE_TARGET}" "${JavaOO_AIWRAPPER_TARGET}")
61+
set(myDependLibFiles "${Java_AIINTERFACE_JAR_BIN}" "${JavaOO_AIWRAPPER_JAR_BIN}")
62+
set_source_files_properties(${myDependLibFiles} PROPERTIES GENERATED TRUE)
63+
64+
add_custom_target(${myLoaderTarget} SOURCES ${myBuildDir}/${myLoaderBinJarFile})
65+
set_source_files_properties(${myBuildDir}/${myLoaderBinJarFile} PROPERTIES GENERATED TRUE)
66+
add_dependencies(${myLoaderTarget} ${myDependTargets})
67+
68+
add_custom_target(${myLoaderSourceTarget} SOURCES ${myBuildDir}/${myLoaderSrcJarFile})
69+
set_source_files_properties(${myBuildDir}/${myLoaderSrcJarFile} PROPERTIES GENERATED TRUE)
70+
71+
add_custom_target(${myAiTarget} SOURCES ${myBuildDir}/${myAiBinJarFile})
72+
set_source_files_properties(${myBuildDir}/${myAiBinJarFile} PROPERTIES GENERATED TRUE)
73+
add_dependencies(${myAiTarget} ${myDependTargets})
74+
75+
add_custom_target(${myAiSourceTarget} SOURCES ${myBuildDir}/${myAiSrcJarFile})
76+
set_source_files_properties(${myBuildDir}/${myAiSrcJarFile} PROPERTIES GENERATED TRUE)
77+
78+
add_custom_target(${myTarget} ALL)
79+
add_dependencies(${myTarget} ${myLoaderTarget} ${myAiTarget} ${myLoaderSourceTarget} ${myAiSourceTarget})
5580

5681
# Compile the loader library
57-
# needed by javac
58-
file(MAKE_DIRECTORY "${myJavaLoaderBuildDir}")
59-
add_custom_target(${myLoaderTarget} ALL
60-
#OUTPUT "${myBuildDir}/${myLoaderBinJarFile}"
82+
add_custom_command(
83+
OUTPUT
84+
"${myBuildDir}/${myLoaderBinJarFile}"
85+
COMMAND "${CMAKE_COMMAND}"
86+
"-E" "make_directory" "${myJavaLoaderBuildDir}"
6187
COMMAND "${JAVA_COMPILE}"
6288
"${JAVA_COMPILE_FLAG_CONDITIONAL}"
6389
"-cp" "${myClassPath}"
@@ -66,15 +92,21 @@
6692
COMMAND "${JAVA_ARCHIVE}"
6793
"cmf" "${myDir}/manifest.mf" "${myBuildDir}/${myLoaderBinJarFile}"
6894
"-C" "${myJavaLoaderBuildDir}" "${myJavaPkgFirstPart}"
69-
WORKING_DIRECTORY "${myLoaderSourceDir}"
70-
COMMENT " ${myTarget}: Creating library ${myLoaderBinJarFile}" VERBATIM)
71-
add_dependencies(${myLoaderTarget} ${Java_AIINTERFACE_TARGET} ${JavaOO_AIWRAPPER_TARGET})
72-
73-
# Compile the ai library
74-
# needed by javac
75-
file(MAKE_DIRECTORY "${myJavaAiBuildDir}")
76-
add_custom_target(${myAiTarget} ALL
77-
#OUTPUT "${myBuildDir}/${myAiBinJarFile}"
95+
DEPENDS
96+
${myDependLibFiles}
97+
${myLoaderSourcesDep}
98+
WORKING_DIRECTORY
99+
"${myLoaderSourceDir}"
100+
COMMENT
101+
" ${myTarget}: Creating library ${myLoaderBinJarFile}" VERBATIM
102+
)
103+
104+
# Compile the AI library
105+
add_custom_command(
106+
OUTPUT
107+
"${myBuildDir}/${myAiBinJarFile}"
108+
COMMAND "${CMAKE_COMMAND}"
109+
"-E" "make_directory" "${myJavaAiBuildDir}"
78110
COMMAND "${JAVA_COMPILE}"
79111
"${JAVA_COMPILE_FLAG_CONDITIONAL}"
80112
"-cp" "${myClassPath}"
@@ -83,46 +115,60 @@
83115
COMMAND "${JAVA_ARCHIVE}"
84116
"cmf" "${myDir}/manifest.mf" "${myBuildDir}/${myAiBinJarFile}"
85117
"-C" "${myJavaAiBuildDir}" "${myJavaPkgFirstPart}"
86-
WORKING_DIRECTORY "${myAiSourceDir}"
87-
COMMENT " ${myTarget}: Creating library ${myAiBinJarFile}" VERBATIM)
88-
add_dependencies(${myAiTarget} ${Java_AIINTERFACE_TARGET} ${JavaOO_AIWRAPPER_TARGET})
118+
DEPENDS
119+
${myDependLibFiles}
120+
${myAiSourcesDep}
121+
WORKING_DIRECTORY
122+
"${myAiSourceDir}"
123+
COMMENT
124+
" ${myTarget}: Creating library ${myAiBinJarFile}" VERBATIM
125+
)
89126

90-
# Pack the sources
91-
add_custom_target(${myLoaderSourceTarget} ALL
92-
#OUTPUT "${myBuildDir}/${myLoaderSrcJarFile}"
127+
# Pack the loader sources
128+
add_custom_command(
129+
OUTPUT
130+
"${myBuildDir}/${myLoaderSrcJarFile}"
93131
COMMAND "${JAVA_ARCHIVE}"
94132
"cf" "${myBuildDir}/${myLoaderSrcJarFile}"
95133
"-C" "${myLoaderSourceDir}" "${myJavaPkgFirstPart}"
96-
WORKING_DIRECTORY "${myLoaderSourceDir}"
97-
COMMENT " ${myTarget}: Creating sources archive ${myLoaderSrcJarFile}" VERBATIM)
134+
DEPENDS
135+
${myLoaderSourcesDep}
136+
WORKING_DIRECTORY
137+
"${myLoaderSourceDir}"
138+
COMMENT
139+
" ${myTarget}: Creating sources archive ${myLoaderSrcJarFile}" VERBATIM
140+
)
98141

99-
# Pack the sources
100-
add_custom_target(${myAiSourceTarget} ALL
101-
#OUTPUT "${myBuildDir}/${myAiSrcJarFile}"
142+
# Pack the AI sources
143+
add_custom_command(
144+
OUTPUT
145+
"${myBuildDir}/${myAiSrcJarFile}"
102146
COMMAND "${JAVA_ARCHIVE}"
103147
"cf" "${myBuildDir}/${myAiSrcJarFile}"
104148
"-C" "${myAiSourceDir}" "${myJavaPkgFirstPart}"
105-
WORKING_DIRECTORY "${myAiSourceDir}"
106-
COMMENT " ${myTarget}: Creating sources archive ${myAiSrcJarFile}" VERBATIM)
107-
108-
add_custom_target(${myTarget} ALL)
109-
add_dependencies(${myTarget} ${myLoaderTarget} ${myAiTarget} ${myLoaderSourceTarget} ${myAiSourceTarget})
149+
DEPENDS
150+
${myAiSourcesDep}
151+
WORKING_DIRECTORY
152+
"${myAiSourceDir}"
153+
COMMENT
154+
" ${myTarget}: Creating sources archive ${myAiSrcJarFile}" VERBATIM
155+
)
110156

111157
# Install the data files
112-
install(DIRECTORY "${myDir}/data/" DESTINATION ${myDataDir})
158+
install(DIRECTORY "${myDir}/data/" DESTINATION ${myDataDir})
113159
# Install the library
114160
install (FILES "${myBuildDir}/${myLoaderBinJarFile}" DESTINATION ${myDataDir})
115161
# Install the library
116-
install (FILES "${myBuildDir}/${myAiBinJarFile}" DESTINATION ${myDataDir})
162+
install (FILES "${myBuildDir}/${myAiBinJarFile}" DESTINATION ${myDataDir})
117163
# Install the sources archive
118164
install (FILES "${myBuildDir}/${myLoaderSrcJarFile}" DESTINATION ${myDataDir}/jlib)
119165
# Install the sources archive
120-
install (FILES "${myBuildDir}/${myAiSrcJarFile}" DESTINATION ${myDataDir}/jlib)
166+
install (FILES "${myBuildDir}/${myAiSrcJarFile}" DESTINATION ${myDataDir}/jlib)
121167
# Install the Java OO Wrapper libraries
122-
install(FILES "${JavaOO_AIWRAPPER_JAR_BIN}" DESTINATION ${myDataDir}/jlib)
168+
install(FILES "${JavaOO_AIWRAPPER_JAR_BIN}" DESTINATION ${myDataDir}/jlib)
123169
set(wrapperJLibDir "${CMAKE_SOURCE_DIR}/AI/Wrappers/JavaOO/jlib")
124170
if (EXISTS ${wrapperJLibDir})
125-
install(DIRECTORY "${wrapperJLibDir}/" DESTINATION ${myDataDir}/jlib)
171+
install(DIRECTORY "${wrapperJLibDir}/" DESTINATION ${myDataDir}/jlib)
126172
endif (EXISTS ${wrapperJLibDir})
127173
endif (BUILD_THIS_SKIRMISHAI)
128174

0 commit comments

Comments
 (0)