/* ###
 * IP: GHIDRA
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Native build files are already applied in development mode (indicated by presence of the
// Generic project).  Only need to apply them if we are in a distribution.
if (findProject(':Generic') == null) {
	// running from within Ghidra install
	apply from: "../../../GPL/utils.gradle"
	apply from: "../../../GPL/nativePlatforms.gradle"
	apply from: "../../../GPL/nativeBuildProperties.gradle"
}

model {
	components {
		lzfse(NativeExecutableSpec) {
			baseName "lzfse"
			
			targetPlatform "win_x86_64"
			targetPlatform "linux_x86_64"
			targetPlatform "linux_arm_64"
			targetPlatform "mac_x86_64"
			targetPlatform "mac_arm_64"
			targetPlatform "freebsd_x86_64"
			targetPlatform "freebsd_arm_64"
		
			sources {
				c {
					source {
						srcDir "src/lzfse/c"
						include "lzfse_encode.c"
						include "lzfse_decode.c"
						include "lzfse_encode_base.c"
						include "lzfse_decode_base.c"
						include "lzvn_encode_base.c"
						include "lzvn_decode_base.c"
						include "lzfse_fse.c"
						include "lzfse_main.c"
					}
				}
			}
		}
	}
	
	binaries {
		all{ b ->
			if (b.toolChain in Gcc) {
				b.cCompiler.args "-std=c99"
				b.cCompiler.args "-Wall"
				b.cCompiler.args "-O2"
				if (b.targetPlatform.operatingSystem.linux) {
					b.cCompiler.define "LINUX"
					b.cCompiler.define "_LINUX"
				}
			}
		 	else if (b.toolChain in VisualCpp) {
				if (b.targetPlatform.operatingSystem.windows) {
					b.cCompiler.define "WINDOWS"
					b.cCompiler.define "_WINDOWS"
					b.cCompiler.define "WIN32"
					b.cCompiler.define "_WIN32"
					if (b.targetPlatform.name == "win_x86_64") {
						b.cCompiler.define "WIN64"
						b.cCompiler.define "_WIN64"
					}	
				}
				b.cCompiler.args "/O2"
			}
			else if (b.toolChain in Clang) {
				b.cCompiler.args "-std=c99"
				b.cCompiler.args "-Wall"
				b.cCompiler.args "-O2"
			}
		}
	}
}
