-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.xml
151 lines (138 loc) · 6.86 KB
/
build.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?xml version="1.0" standalone="yes"?>
<project name="froth" default="compile" basedir="." xmlns:resolver="antlib:org.apache.maven.resolver.ant">
<property name="steamworks.sdk" value="steamworks_sdk_161.zip"/>
<property name="vstudio.dir" value="c:\Program Files (x86)\Microsoft Visual Studio\2022"/>
<property name="src.dir" value="src/main/java"/>
<property name="deploy.dir" value="dist"/>
<property name="classes.dir" value="${deploy.dir}/classes"/>
<!-- initializes the Maven Ant tasks -->
<property name="maven-ant.vers" value="1.5.1"/>
<property name="maven-ant.dir" value="${user.home}/.m2/ant-support"/>
<property name="maven-ant.jar" value="${maven-ant.dir}/maven-resolver-ant-tasks-${maven-ant.vers}.jar"/>
<property name="maven-ant.url"
value="https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-ant-tasks/${maven-ant.vers}/maven-resolver-ant-tasks-${maven-ant.vers}-uber.jar"/>
<condition property="maven-ant.exists"><available file="${maven-ant.jar}"/></condition>
<target name="-download-maven-ant" unless="maven-ant.exists">
<mkdir dir="${maven-ant.dir}"/>
<get src="${maven-ant.url}" dest="${maven-ant.jar}" usetimestamp="true"/>
</target>
<target name="-init-maven-ant" depends="-download-maven-ant" unless="maven.initted">
<property name="maven.initted" value="true"/>
<taskdef resource="org/apache/maven/resolver/ant/antlib.xml"
uri="antlib:org.apache.maven.resolver.ant" classpath="${maven-ant.jar}" />
</target>
<target name="-prepare" depends="-init-maven-ant">
<resolver:pom file="pom.xml" id="pom"/>
<resolver:resolve>
<dependencies pomRef="pom" />
<path refid="compile.classpath" classpath="compile"/>
</resolver:resolve>
<mkdir dir="${deploy.dir}"/>
<path id="built.classpath">
<path refid="compile.classpath"/>
<pathelement location="${classes.dir}"/>
</path>
</target>
<target name="-unpack-sdk" depends="-prepare">
<unzip src="lib/${steamworks.sdk}" dest="${deploy.dir}" overwrite="false">
<patternset includes="sdk/public/steam/**, sdk/redistributable_bin/**, sdk/tools/**"/>
</unzip>
</target>
<target name="clean" description="Cleans out build results">
<delete dir="${deploy.dir}/classes"/>
<delete dir="${deploy.dir}/docs"/>
<delete failonerror="false"><fileset dir="${deploy.dir}" includes="*.jar"/></delete>
</target>
<target name="distclean" description="Scorched earth clean">
<delete dir="${deploy.dir}"/>
</target>
<target name="compile" depends="-prepare" description="Builds the Java code.">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeAntRuntime="false"
debug="on" optimize="${build.optimize}" deprecation="on" nativeHeaderDir="src/cpp"
release="10">
<classpath refid="compile.classpath"/>
<compilerarg value="-Xlint"/>
<compilerarg value="-Xlint:-serial"/>
</javac>
</target>
<target name="nativecompile" depends="-unpack-sdk" description="Builds the native code.">
<mkdir dir="${deploy.dir}/lib"/>
<mkdir dir="${deploy.dir}/lib/MacOS"/>
<mkdir dir="${deploy.dir}/lib/Windows"/>
<apply os="Linux" executable="g++" parallel="true" failonerror="true">
<arg line="-m64 -fPIC -o lib/x86_64-Linux/libfroth.so -shared -Wl,--no-undefined"/>
<arg value="-I${java.home}/include"/>
<arg value="-I${java.home}/include/linux"/>
<arg value="-I${deploy.dir}/sdk/public"/>
<arg value="-L${deploy.dir}/sdk/redistributable_bin/linux64"/>
<fileset dir="src/cpp" includes="*.cpp"/>
<srcfile/>
<arg value="-lsteam_api"/>
</apply>
<apply osfamily="windows" executable="${vstudio.dir}\BuildTools\Common7\Tools\VsDevCmd.Bat" parallel="true" failonerror="true">
<arg line="-arch=amd64 && cl -Felib/x86_64-Windows/froth64.dll -LD"/>
<arg value="-Fo${deploy.dir}/lib/Windows/"/>
<arg value="-I${java.home}/include"/>
<arg value="-I${java.home}/include/win32"/>
<arg value="-I${deploy.dir}/sdk/public"/>
<arg value="${deploy.dir}/sdk/redistributable_bin/win64/steam_api64.lib"/>
<fileset dir="src/cpp" includes="*.cpp"/>
</apply>
<apply osfamily="mac" executable="clang++" parallel="true" failonerror="true">
<arg line="-o ${deploy.dir}/lib/MacOS/libfroth.dylib -bundle -lsteam_api"/>
<arg line="-std=c++17 -arch arm64 -arch x86_64"/>
<arg line="-mmacosx-version-min=10.13"/>
<arg value="-I${java.home}/include"/>
<arg value="-I${java.home}/include/darwin"/>
<arg value="-I${deploy.dir}/sdk/public"/>
<arg value="-L${deploy.dir}/sdk/redistributable_bin/osx"/>
<fileset dir="src/cpp" includes="*.cpp"/>
</apply>
<apply osfamily="mac" executable="lipo" parallel="true" failonerror="true">
<srcfile/>
<arg line="-create -output lib/Universal-MacOS/libfroth.dylib"/>
<fileset dir="${deploy.dir}/lib/MacOS" includes="*.dylib"/>
</apply>
</target>
<target name="javadoc" depends="-prepare" description="Builds the Java documentation">
<mkdir dir="${deploy.dir}/docs"/>
<javadoc sourcepath="${src.dir}" packagenames="com.threerings.*"
destdir="${deploy.dir}/docs" stylesheetfile="docs/stylesheet.css"
additionalparam="-breakiterator">
<classpath refid="built.classpath"/>
<link href="http://java.sun.com/j2se/1.5/docs/api"/>
</javadoc>
</target>
<!-- a target for rebuilding everything -->
<target name="all" depends="clean,compile,javadoc,dist"/>
<target name="dist" depends="compile" description="Builds jar files.">
<jar destfile="${deploy.dir}/${ant.project.name}.jar">
<fileset dir="${classes.dir}" includes="com/**"/>
</jar>
</target>
<property name="maven.deploy.repo" value="file://${basedir}/repo"/>
<target name="maven-deploy" depends="dist,-unpack-sdk"
description="Deploys our build artifacts to a Maven repository.">
<copy todir="${deploy.dir}/natives">
<fileset dir="lib" excludes="*.zip"/>
</copy>
<copy todir="${deploy.dir}/natives/x86_64-Windows">
<fileset dir="${deploy.dir}/sdk/redistributable_bin/win64" includes="*.dll"/>
</copy>
<copy todir="${deploy.dir}/natives/x86_64-Linux">
<fileset dir="${deploy.dir}/sdk/redistributable_bin/linux64" includes="*.so"/>
</copy>
<copy todir="${deploy.dir}/natives/Universal-MacOS">
<fileset dir="${deploy.dir}/sdk/redistributable_bin/osx" includes="*.dylib"/>
</copy>
<jar basedir="${deploy.dir}/natives" destfile="${deploy.dir}/${ant.project.name}-natives.jar"/>
<resolver:deploy>
<artifact file="${deploy.dir}/${ant.project.name}.jar">
<pom refid="pom"/>
</artifact>
<artifact file="${deploy.dir}/${ant.project.name}-natives.jar" classifier="natives"/>
<remoterepo id="local" url="${maven.deploy.repo}"/>
</resolver:deploy>
</target>
</project>